{
  "swagger": "2.0",
  "info": {
    "version": "v1",
    "title": "FireAnt RESTFUL API",
    "description": "Tài liệu đặc tả FireAnt RESTFUL API v1.0.0"
  },
  "host": "api.fireant.vn",
  "schemes": [
    "https"
  ],
  "paths": {
    "/academy/subjects": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy danh sách chủ đề khóa học",
        "operationId": "Academy_GetCourseSubjects",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Academy.Subject"
              }
            }
          },
          "500": {
            "description": "Lỗi hệ thống"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/subjects/{subjectId}": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy thông tin chủ đề khóa học",
        "operationId": "Academy_GetCourseSubject",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "subjectId",
            "in": "path",
            "description": "ID của chủ đề",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Academy.Subject"
            }
          },
          "500": {
            "description": "Lỗi hệ thống"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/courses/{courseId}": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy thông tin khóa học theo ID",
        "operationId": "Academy_GetCourse",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "courseId",
            "in": "path",
            "description": "ID của khóa học",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Academy.Course"
              }
            }
          },
          "404": {
            "description": "Bài giảng không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/courses/levels": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy danh sách tất cả cấp độ của các khóa học",
        "operationId": "Academy_GetAllCoursesLevel",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Academy.CoursesLevel"
              }
            }
          },
          "500": {
            "description": "Có lỗi khi lấy danh sách cấp độ của khóa học"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/courses": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy danh sách khóa học",
        "operationId": "Academy_GetCourses",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "subjectId",
            "in": "query",
            "description": "Lọc theo chủ đề khóa học (Mặc định là 0, lấy tất cả)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Phân loại (0: lớp học, 1: hội thảo, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "level",
            "in": "query",
            "description": "Lọc theo cấp độ khóa học (Basic, Advance...)",
            "required": false,
            "type": "string"
          },
          {
            "name": "isHot",
            "in": "query",
            "description": "Lọc theo khóa học nổi bật",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Academy.Course"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/courses/recordCount": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy số lượng khóa học",
        "operationId": "Academy_GetCoursesCount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "subjectId",
            "in": "query",
            "description": "Lọc theo chủ đề khóa học (0: tất cả chủ đề)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "level",
            "in": "query",
            "description": "Lọc theo cấp độ khóa học (Basic, Advance...)",
            "required": false,
            "type": "string"
          },
          {
            "name": "isHot",
            "in": "query",
            "description": "Lọc theo khóa học nổi bật",
            "required": false,
            "type": "boolean"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "500": {
            "description": "Có lỗi khi lấy danh sách khóa học"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/courses/{courseID}/thumbnail": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy ảnh đại diện của khóa học",
        "operationId": "Academy_GetCourseImage",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "courseID",
            "in": "path",
            "description": "ID ảnh",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "width",
            "in": "query",
            "description": "Chiều rộng ảnh (=0 nếu muốn lấy kích thước đầy đủ, mặc định = 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "height",
            "in": "query",
            "description": "Chiều cao ảnh (=0 nếu muốn lấy kích thước đầy đủ, mặc định = 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "404": {
            "description": "Không tìm thấy tài nguyên"
          }
        }
      }
    },
    "/academy/courses/{courseId}/lessons": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy danh sách bài giảng của khóa học",
        "operationId": "Academy_GetLessons",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "courseId",
            "in": "path",
            "description": "ID của khóa hoc",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Academy.Lesson"
              }
            }
          },
          "404": {
            "description": "Khóa học không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/courses/{courseId}/isEnrolled": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Kiểm tra xem user đã đăng ký khóa học hay chưa",
        "operationId": "Academy_CheckEnrollment",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "courseId",
            "in": "path",
            "description": "Id của khóa học",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "boolean"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/lessons/{lessonId}": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy thông tin bài giảng theo ID",
        "operationId": "Academy_GetLesson",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "lessonId",
            "in": "path",
            "description": "ID của bài giảng",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Academy.Lesson"
              }
            }
          },
          "404": {
            "description": "Bài giảng không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/news": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy danh sách tin tức",
        "operationId": "Academy_GetNews",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "isHot",
            "in": "query",
            "description": "Lọc theo tin nổi bật",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Academy.News"
              }
            }
          },
          "500": {
            "description": "Có lỗi khi lấy tin tức"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/news/{newsId}": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy thông tin của tin tức theo ID",
        "operationId": "Academy_GetNews",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "newsId",
            "in": "path",
            "description": "ID của tin",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Academy.News"
            }
          },
          "404": {
            "description": "Tin không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/news/recordCount": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy số lượng tin tức",
        "operationId": "Academy_GetNewsCount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "isHot",
            "in": "query",
            "description": "Lọc theo tin nổi bật",
            "required": false,
            "type": "boolean"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/news/{newsId}/thumbnail": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy ảnh đại diện của tin",
        "operationId": "Academy_GetNewsThumbnail",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "newsId",
            "in": "path",
            "description": "ID của tin",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "width",
            "in": "query",
            "description": "Kích thước chiều rộng của ảnh",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "height",
            "in": "query",
            "description": "Kích thước chiều cao của ảnh",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "byte",
              "type": "string"
            }
          },
          "500": {
            "description": "Có lỗi khi lấy ảnh đại diện của tin"
          }
        }
      }
    },
    "/academy/classes/{classId}/teachers": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy danh sách giảng viên của lớp học",
        "operationId": "Academy_GetTeacherAssignments",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "classId",
            "in": "path",
            "description": "ID của khóa học",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Academy.Teacher"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/classes": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy danh sách các lớp học",
        "operationId": "Academy_GetClasses",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": "Trạng thái lớp học (0: chưa diễn ra, 1: đang tuyển sinh, 2: đã kết thúc, mặc định là 1)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Academy.Class"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/classes/{classId}/schedule": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy thông tin lịch học",
        "operationId": "Academy_GetCourseSchedules",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "classId",
            "in": "path",
            "description": "ID của lớp học",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Academy.CourseSchedule"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/classes/ownedClasses": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy danh sách lớp học của tôi",
        "operationId": "Academy_GetOwnedClass",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Phân loại (0: lớp học, 1: hội thảo, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Academy.Class"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/classes/ownedClasses/{classId}/meeting": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy thông tin dạy trực tuyến",
        "operationId": "Academy_GenerateOwnedSignature",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "classId",
            "in": "path",
            "description": "ID của lớp học",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Academy.Meeting"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/classes/ownedClasses/{classId}/schedules/{scheduleId}/status": {
      "put": {
        "tags": [
          "Academy"
        ],
        "summary": "Cập nhật trạng thái buổi học",
        "operationId": "Academy_UpdateScheduleStatus",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "classId",
            "in": "path",
            "description": "ID của lớp học",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "scheduleId",
            "in": "path",
            "description": "ID của buổi học",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin trạng thái buổi học",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Academy.CourseScheduleChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Academy.CourseSchedule"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-write"
            ]
          }
        ]
      }
    },
    "/academy/classes/enrolledClasses": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy danh sách lớp học đã đăng ký",
        "operationId": "Academy_GetEnrolledClass",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Phân loại (0: lớp học, 1: hội thảo, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Academy.Class"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/classes/enrolledClasses/{classId}/meeting": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy thông tin học trực tuyến",
        "operationId": "Academy_GenerateEnrolledSignature",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "classId",
            "in": "path",
            "description": "ID của lớp học",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Academy.Meeting"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy": {
      "post": {
        "tags": [
          "Academy"
        ],
        "summary": "Đăng ký khóa học",
        "operationId": "Academy_Enroll",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin đăng ký",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Academy.EnrollmentChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/enrollments/{enrollmentId}": {
      "get": {
        "tags": [
          "Academy"
        ],
        "summary": "Lấy thông tin đăng ký khóa học",
        "operationId": "Academy_GetEnrollment",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "enrollmentId",
            "in": "path",
            "description": "Id đăng ký",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Academy.Enrollment"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-read"
            ]
          }
        ]
      }
    },
    "/academy/{enrollmentId}": {
      "put": {
        "tags": [
          "Academy"
        ],
        "summary": "Duyệt đơn hàng đăng ký khóa học",
        "operationId": "Academy_ProcessEnrollment",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "enrollmentId",
            "in": "path",
            "description": "Mã đơn hàng",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin đăng ký",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Academy.EnrollmentChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Academy.Enrollment"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "academy-write"
            ]
          }
        ]
      }
    },
    "/broker-users/{userId}/bank-account/{accountId}": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Trả về thông tin chuyển khoản tiền.",
        "operationId": "Accounts_BankAccount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt.",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.BankAccount"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-read"
            ]
          }
        ]
      }
    },
    "/broker-users/{userId}/accounts": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Trả về danh sách tài khoản tại công ty chứng khoán của user.",
        "operationId": "Accounts_Accounts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt.",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Trading.Account"
              }
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-read"
            ]
          }
        ]
      }
    },
    "/broker-users/{userId}/accounts/state": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Lấy trạng thái tài khoản tại công ty chứng khoán",
        "operationId": "Accounts_AccountState",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt.",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.Account"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-read"
            ]
          }
        ]
      }
    },
    "/broker-users/{userId}/accounts/{accountId}/state": {
      "get": {
        "tags": [
          "Accounts"
        ],
        "summary": "Lấy trạng thái tài khoản tại công ty chứng khoán",
        "operationId": "Accounts_AccountState",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt.",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user.",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.Account"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-read"
            ]
          }
        ]
      }
    },
    "/admin/user-info": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Lấy thông tin user theo id",
        "operationId": "Admin_GetUserInfo",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "query",
            "description": "User id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/member-info-by-phone": {
      "get": {
        "tags": [
          "Admin"
        ],
        "operationId": "Admin_GetMemberInfoByPhoneNumber",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "phoneNumber",
            "in": "query",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.MemberInfo"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/block-user": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Block 1 user",
        "operationId": "Admin_BlockUser",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin yêu cầu khóa tài khoản",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Alerts.BlockUserRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/yesterday-new-users": {
      "get": {
        "tags": [
          "Admin"
        ],
        "summary": "Danh sách user mới đăng ký hôm trước",
        "operationId": "Admin_GetYesterdayNewUsers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.UserProfile"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/news": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Tạo tin tức",
        "operationId": "Admin_InsertNews",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin tin tức",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Alerts.AdminNewsRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "401": {
            "description": "Không có quyền thực hiện hành động"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/admin/news/{postId}": {
      "put": {
        "tags": [
          "Admin"
        ],
        "summary": "Sửa tin tức",
        "operationId": "Admin_UpdateNews",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "Id tin tức",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin tin tức",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Alerts.AdminNewsRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "401": {
            "description": "Không có quyền thực hiện hành động"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Admin"
        ],
        "summary": "Xóa tin tức",
        "operationId": "Admin_DeleteNews",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "Id tin tức",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin UserName thao tác",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Alerts.AdminNewsRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "401": {
            "description": "Không có quyền thực hiện hành động"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/admin/upload-banner": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Upload ảnh banner quảng cáo vào NAS server",
        "operationId": "Admin_UploadBanner",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "401": {
            "description": "Không có quyền thực hiện hành động"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/upload-ads-json": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Upload file ads.json vào NAS server",
        "operationId": "Admin_UploadAdsJson",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "401": {
            "description": "Không có quyền thực hiện hành động"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/upload-ads-content": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Upload file JSON hoặc ảnh cho page content vào NAS server.",
        "operationId": "Admin_UploadAdsContentJson",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "401": {
            "description": "Không có quyền thực hiện hành động"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/upload-file": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Upload file vào NAS server theo thư mục tùy chỉnh",
        "operationId": "Admin_UploadFile",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "folder",
            "in": "query",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "401": {
            "description": "Không có quyền thực hiện hành động"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/upload-image": {
      "post": {
        "tags": [
          "Admin"
        ],
        "summary": "Upload ảnh vào NAS server",
        "operationId": "Admin_UploadImage",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "401": {
            "description": "Không có quyền thực hiện hành động"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/feed/health": {
      "get": {
        "tags": [
          "AdminFeed"
        ],
        "summary": "Tình trạng trên máy chủ đang trả lời (kho, cấu hình, bộ đếm, lỗi gần nhất) và lượt chạy gần nhất của từng job",
        "operationId": "AdminFeed_GetHealth",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Feed.FeedHealth"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/feed/config": {
      "get": {
        "tags": [
          "AdminFeed"
        ],
        "summary": "Toàn bộ khoá cấu hình (FireAnt_Feed.dbo.Config)",
        "operationId": "AdminFeed_GetConfig",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Feed.FeedConfigEntry"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "AdminFeed"
        ],
        "summary": "Đặt một khoá cấu hình. Mọi máy chủ API nạp lại trong ≤ 30 giây.",
        "description": "Ví dụ bật dần \"Quan tâm\": following.mode = shadow, rồi on + following.percent = 10.\r\nValue = null thì xoá khoá (về mặc định trong code).",
        "operationId": "AdminFeed_SetConfig",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "change",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Feed.FeedConfigChange"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/feed/explain": {
      "get": {
        "tags": [
          "AdminFeed"
        ],
        "summary": "Giải thích điểm của một bài với một người dùng (R, H, Q, F, M, N, nguồn, lý do, vị trí, hoặc lý do bị lọc)",
        "operationId": "AdminFeed_Explain",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "query",
            "description": "Id người dùng",
            "required": true,
            "type": "string"
          },
          {
            "name": "postId",
            "in": "query",
            "description": "Mã bài",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "mode",
            "in": "query",
            "description": "following (mặc định) | foryou",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Feed.FeedExplanation"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/feed/jobs/{name}/run": {
      "post": {
        "tags": [
          "AdminFeed"
        ],
        "summary": "Chạy ngay một job: refresh, authors, profiles, profiles-full, purge",
        "operationId": "AdminFeed_RunJob",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Feed.FeedJobResult"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/social-stats/market": {
      "get": {
        "tags": [
          "AdminSocialStats"
        ],
        "operationId": "AdminSocialStats_GetMarket",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "sessions",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialMarketStats"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/social-stats/symbols": {
      "get": {
        "tags": [
          "AdminSocialStats"
        ],
        "operationId": "AdminSocialStats_GetSymbols",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "sort",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "kind",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "exchange",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "icb1",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "minAuthors",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "top",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "sessions",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialTopSymbols"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/social-stats/symbols/{symbol}": {
      "get": {
        "tags": [
          "AdminSocialStats"
        ],
        "operationId": "AdminSocialStats_GetSymbol",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "sessions",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialSymbolStats"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/social-stats/health": {
      "get": {
        "tags": [
          "AdminSocialStats"
        ],
        "operationId": "AdminSocialStats_GetHealth",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialStatsHealth"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/social-stats/jobs/{name}/run": {
      "post": {
        "tags": [
          "AdminSocialStats"
        ],
        "operationId": "AdminSocialStats_RunJob",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "name",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "days",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialJobResult"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/authentication/anonymous-login": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Đăng nhập nặc danh",
        "operationId": "Authentication_AnonymousLogin",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        }
      }
    },
    "/authentication/login": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Đăng nhập bằng mật khấu",
        "operationId": "Authentication_Login",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.LoginRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        }
      }
    },
    "/authentication/apple-login": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Đăng nhập Apple",
        "operationId": "Authentication_AppleLogin",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.ExternalLoginRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        }
      }
    },
    "/authentication/google-login": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Đăng nhập Google",
        "operationId": "Authentication_GoogleLogin",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.ExternalLoginRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        }
      }
    },
    "/authentication/facebook-login": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Đăng nhập Facebook",
        "operationId": "Authentication_FacebookLogin",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.ExternalLoginRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        }
      }
    },
    "/authentication/registration": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Đăng ký tài khoản",
        "operationId": "Authentication_Register",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.RegisterRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        }
      }
    },
    "/authentication/password-reset": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Đặt lại mật khẩu",
        "operationId": "Authentication_ForgotPassword",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.ForgotPasswordRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        }
      }
    },
    "/authentication/email-confirmation": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Gửi email xác nhận tài khoản",
        "operationId": "Authentication_SendConfirmEmail",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.SendConfirmationEmailRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        }
      }
    },
    "/authentication/refresh-token": {
      "post": {
        "tags": [
          "Authentication"
        ],
        "summary": "Refresh token",
        "operationId": "Authentication_RefreshToken",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.RefreshTokenRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.RefreshTokenResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        }
      }
    },
    "/bonds/categories": {
      "get": {
        "tags": [
          "Bond"
        ],
        "summary": "Lấy danh sách các danh mục trái phiếu",
        "operationId": "Bond_GetCategories",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "option",
            "in": "query",
            "description": "0:Issuer, 1:Type, 2:RateType, 3:Currency, 4:Exchange, 5:ICB, 6:Form, 7:Method, 8:Status",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "icbLevel",
            "in": "query",
            "description": "Cấp ngành (áp dụng khi option=5)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "isListing",
            "in": "query",
            "description": "1: Đang niêm yết, 0: Hủy niêm yết",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Bonds.BondCategoryItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/bonds/filter": {
      "post": {
        "tags": [
          "Bond"
        ],
        "summary": "Lọc và tìm kiếm trái phiếu",
        "operationId": "Bond_FilterBonds",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Tập hợp điều kiện lọc",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Bonds.BondFilterRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Bonds.BondListItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        }
      }
    },
    "/bonds/issuer/{symbol}": {
      "get": {
        "tags": [
          "Bond"
        ],
        "summary": "Lấy danh sách trái phiếu theo mã tổ chức phát hành",
        "operationId": "Bond_GetBondsBySymbol",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Bonds.BondListItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/bonds/{bondCode}": {
      "get": {
        "tags": [
          "Bond"
        ],
        "summary": "Lấy thông tin chi tiết một mã trái phiếu",
        "operationId": "Bond_GetBondDetail",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "bondCode",
            "in": "path",
            "description": "Mã trái phiếu",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Bonds.BondDetailViewModel"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/bonds/{bondCode}/cashflow": {
      "get": {
        "tags": [
          "Bond"
        ],
        "summary": "Lấy lịch dòng tiền tương lai của trái phiếu",
        "operationId": "Bond_GetBondFutureCashFlow",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "bondCode",
            "in": "path",
            "description": "Mã trái phiếu",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Bonds.CashFlowJson"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/bonds/stats/issuers/top-debt": {
      "get": {
        "tags": [
          "Bond"
        ],
        "summary": "Top doanh nghiệp có dư nợ trái phiếu lớn nhất",
        "operationId": "Bond_GetTopIssuersByDebt",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "top",
            "in": "query",
            "description": "Số lượng",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Bonds.IssuerStatisticItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/bonds/stats/bonds/high-yield": {
      "get": {
        "tags": [
          "Bond"
        ],
        "summary": "Danh sách trái phiếu có lãi suất cao nhất",
        "operationId": "Bond_GetHighYieldBonds",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "minRate",
            "in": "query",
            "description": "Lãi suất thấp nhất",
            "required": false,
            "type": "number",
            "format": "double"
          },
          {
            "name": "top",
            "in": "query",
            "description": "Số lượng",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Bonds.BondListItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/bonds/stats/bonds/maturing-soon": {
      "get": {
        "tags": [
          "Bond"
        ],
        "summary": "Danh sách trái phiếu sắp đáo hạn",
        "operationId": "Bond_GetBondsMaturingSoon",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "description": "Số ngày",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Bonds.BondListItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/bonds/stats/industries": {
      "get": {
        "tags": [
          "Bond"
        ],
        "summary": "Thống kê quy mô phát hành theo ngành nghề (ICB)",
        "operationId": "Bond_GetIndustryStatistics",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "top",
            "in": "query",
            "description": "Số lượng",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "level",
            "in": "query",
            "description": "Cấp của ngành cần lấy",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Bonds.IndustryStatisticItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/brokers": {
      "get": {
        "tags": [
          "Brokers"
        ],
        "summary": "Trả về danh sách công ty chứng khoán",
        "operationId": "Brokers_Brokers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Trading.Broker"
              }
            }
          }
        }
      }
    },
    "/brokers/{brokerId}/link-user-url": {
      "get": {
        "tags": [
          "Brokers"
        ],
        "summary": "Lấy liên kết dùng để kết nối tài khoản tại công ty chứng khoán với tài khoản FireAnt.",
        "operationId": "Brokers_LinkUserUrl",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC,...)",
            "required": true,
            "type": "string"
          },
          {
            "name": "returnUrl",
            "in": "query",
            "description": "Liên kết quay về sau khi kết nối thành công",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Công ty chứng khoán không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-write"
            ]
          }
        ]
      }
    },
    "/brokers/{brokerId}/open-account-url": {
      "get": {
        "tags": [
          "Brokers"
        ],
        "summary": "Lấy liên kết dùng để mở tài khoản tại công ty chứng khoán.",
        "operationId": "Brokers_OpenAccountUrl",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC,...)",
            "required": true,
            "type": "string"
          },
          {
            "name": "requestId",
            "in": "query",
            "description": "Id tham chiếu ứng với yêu cầu mở tài khoản",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Công ty chứng khoán không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-write"
            ]
          }
        ]
      }
    },
    "/brokers/{brokerId}/users/{identityNumber}": {
      "get": {
        "tags": [
          "Brokers"
        ],
        "summary": "Lấy tên tài khoản tại công ty chứng khoán theo số chứng minh thư",
        "operationId": "Brokers_GetBrokerUserName",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC,...)",
            "required": true,
            "type": "string"
          },
          {
            "name": "identityNumber",
            "in": "path",
            "description": "Số chứng minh thư",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Công ty chứng khoán không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-read"
            ]
          }
        ]
      }
    },
    "/brokers/{brokerId}/job-names": {
      "get": {
        "tags": [
          "Brokers"
        ],
        "summary": "Lấy danh sách công việc.",
        "operationId": "Brokers_GetJobNames",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC,...)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Trading.Brokers.Shinhan.JobNameData"
            }
          },
          "404": {
            "description": "Công ty chứng khoán không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-write"
            ]
          }
        ]
      }
    },
    "/brokers/{brokerId}/job-positions": {
      "get": {
        "tags": [
          "Brokers"
        ],
        "summary": "Lấy danh sách vị trí công việc.",
        "operationId": "Brokers_GetJobPositions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC,...)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Trading.Brokers.Shinhan.JobNameData"
            }
          },
          "404": {
            "description": "Công ty chứng khoán không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-write"
            ]
          }
        ]
      }
    },
    "/brokers/{brokerId}/referrer-info": {
      "get": {
        "tags": [
          "Brokers"
        ],
        "summary": "Lấy thông tin người giới thiệu tại công ty chứng khoán.",
        "operationId": "Brokers_GetReferrerInfo",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC, Shinhan...)",
            "required": true,
            "type": "string"
          },
          {
            "name": "referrerCode",
            "in": "query",
            "description": "Mã người giới thiệu",
            "required": true,
            "type": "string"
          },
          {
            "name": "referrenceCode",
            "in": "query",
            "description": "Mã giới thiệu (mặc định: fireant)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.ReferrerInfo"
            }
          },
          "404": {
            "description": "Công ty chứng khoán không tồn tại"
          },
          "400": {
            "description": "Thông tin người giới thiệu không chính xác"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-write"
            ]
          }
        ]
      }
    },
    "/brokers/{brokerId}/banks": {
      "get": {
        "tags": [
          "Brokers"
        ],
        "summary": "Lấy danh sách ngân hàng.",
        "operationId": "Brokers_GetBanks",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC,...)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Trading.Brokers.Shinhan.JobNameData"
            }
          },
          "404": {
            "description": "Công ty chứng khoán không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-write"
            ]
          }
        ]
      }
    },
    "/brokers/{brokerId}/cif-branches/{branch}": {
      "get": {
        "tags": [
          "Brokers"
        ],
        "summary": "Lấy danh sách ngân hàng.",
        "operationId": "Brokers_GetCIFBranches",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC,...)",
            "required": true,
            "type": "string"
          },
          {
            "name": "branch",
            "in": "path",
            "description": "Id của chi nhánh",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Trading.Brokers.Shinhan.JobNameData"
            }
          },
          "404": {
            "description": "Công ty chứng khoán không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-write"
            ]
          }
        ]
      }
    },
    "/brokers/{brokerId}/kyc-required": {
      "get": {
        "tags": [
          "Brokers"
        ],
        "summary": "Cần KYC trước để có thể giao dịch",
        "operationId": "Brokers_KycRequired",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC,...)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "boolean"
            }
          },
          "404": {
            "description": "Công ty chứng khoán không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-write"
            ]
          }
        ]
      }
    },
    "/brokers/{brokerId}/welcome-link": {
      "get": {
        "tags": [
          "Brokers"
        ],
        "summary": "Lấy welcome link.",
        "operationId": "Brokers_GetWelcomeLink",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC,...)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.WelcomeLink"
            }
          },
          "404": {
            "description": "Công ty chứng khoán không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-write"
            ]
          }
        ]
      }
    },
    "/brokers/{brokerId}/common-banners": {
      "get": {
        "tags": [
          "Brokers"
        ],
        "summary": "Lấy common banners.",
        "operationId": "Brokers_GetBanners",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC,...)",
            "required": true,
            "type": "string"
          },
          {
            "name": "status",
            "in": "query",
            "description": "Trạng thái của banner (optional)",
            "required": false,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại banner (5: banner chính, 6: banner khuyến mại) (optional)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.Banner"
            }
          },
          "404": {
            "description": "Công ty chứng khoán không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-write"
            ]
          }
        ]
      }
    },
    "/brokers/{brokerId}/consent-terms": {
      "get": {
        "tags": [
          "Brokers"
        ],
        "summary": "Lấy bản Điều khoản &amp; điều kiện mở tài khoản đã điền thông tin người dùng (hiện chỉ SSI).\r\nApp PHẢI hiển thị đúng nội dung này; khi gọi mở tài khoản gửi lại renderedHash + consentAccepted = true.",
        "operationId": "Brokers_GetConsentTerms",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: SSI)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Trading.Brokers.SSI.SSIConsentDocument"
            }
          },
          "400": {
            "description": "Người dùng chưa KYC hoặc không tải được điều khoản"
          },
          "404": {
            "description": "Công ty chứng khoán không hỗ trợ"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-write"
            ]
          }
        ]
      }
    },
    "/brokers/SSI/webhook": {
      "post": {
        "tags": [
          "Brokers"
        ],
        "operationId": "Brokers_SSIOrderWebhook",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/brokers/{brokerId}/webhook": {
      "post": {
        "tags": [
          "Brokers"
        ],
        "summary": "Webhook nhận trạng thái từ CTCK.",
        "operationId": "Brokers_BrokerWebhook",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: Shinhan, BSC...)",
            "required": true,
            "type": "string"
          },
          {
            "name": "payload",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.BrokerWebhookData"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/broker-users": {
      "get": {
        "tags": [
          "BrokerUsers"
        ],
        "summary": "Trả về danh sách user chứng khoán đã kết nối với tài khoản FireAnt",
        "operationId": "BrokerUsers_BrokerUsers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Trading.BrokerUser"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-read"
            ]
          }
        ]
      }
    },
    "/broker-users/{userId}": {
      "delete": {
        "tags": [
          "BrokerUsers"
        ],
        "summary": "Xóa user chứng khoán đã kết nối với tài khoản FireAnt",
        "operationId": "BrokerUsers_DeleteBrokerUser",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Trading.BrokerUser"
              }
            }
          },
          "404": {
            "description": "User không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-write"
            ]
          }
        ]
      }
    },
    "/chat/notify": {
      "get": {
        "tags": [
          "Chat"
        ],
        "summary": "Gửi thông báo",
        "operationId": "Chat_Notify",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "api_key",
            "in": "query",
            "description": "API KEY",
            "required": true,
            "type": "string"
          },
          {
            "name": "sender",
            "in": "query",
            "description": "User ID người gửi",
            "required": true,
            "type": "string"
          },
          {
            "name": "receiver",
            "in": "query",
            "description": "User ID người nhận",
            "required": true,
            "type": "string"
          },
          {
            "name": "roomId",
            "in": "query",
            "description": "ID của room",
            "required": true,
            "type": "string"
          },
          {
            "name": "content",
            "in": "query",
            "description": "Nội dung",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        }
      }
    },
    "/chat/images": {
      "post": {
        "tags": [
          "Chat"
        ],
        "summary": "Upload ảnh cho tin nhắn",
        "operationId": "Chat_UpdateImage",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "image",
            "in": "body",
            "description": "Thông tin ảnh cần upload",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Controllers.Api.ChatMessageImageUpload"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/chat/images/{key}": {
      "get": {
        "tags": [
          "Chat"
        ],
        "summary": "Lấy ảnh trong thông điệp",
        "operationId": "Chat_GetChatImage",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "description": "Key của ảnh",
            "required": true,
            "type": "string"
          },
          {
            "name": "width",
            "in": "query",
            "description": "Chiều rộng ảnh (=0 nếu muốn lấy kích thước đầy đủ, mặc định = 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "height",
            "in": "query",
            "description": "Chiều cao ảnh (=0 nếu muốn lấy kích thước đầy đủ, mặc định = 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "404": {
            "description": "Không tìm thấy tài nguyên"
          }
        }
      }
    },
    "/events/search": {
      "get": {
        "tags": [
          "Events"
        ],
        "summary": "Tìm kiếm sự kiện",
        "operationId": "Events_Search",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "description": "Từ khóa tìm kiếm",
            "required": false,
            "type": "string"
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "Sắp xêp theo: 1: ngày KHQ (mặc định), 2: ngày chốt DS, 3: ngày thực hiện",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại sự kiện: 1: Cổ tức bằng tiền, 2: cổ tức bằng cổ phiếu, 3: Phát hành cổ phiếu cho CĐHH, 0: tất cả các loại sự kiện (mặc định) (0 = None, 1 = CashDividend, 2 = StockDiviđen, 3 = RightsIssue)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3
            ]
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Ngày bắt đầu (Mặc địch là Ngày hiện tại)",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Ngày kết thúc (Mặc địch là Ngày hiện tại)",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Institutions.CompanyEvent"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/excel/templates": {
      "get": {
        "tags": [
          "ExcelTemplates"
        ],
        "summary": "Thư viện mẫu cộng đồng của một ứng dụng: mẫu chính thức của FireAnt + mẫu công khai đã được duyệt",
        "description": "Không cần đăng nhập; khi gửi token, isLiked / isOwner được tính theo người dùng.\r\napp: excel (mặc định - không truyền thì chỉ trả mẫu Excel như trước) | word | powerpoint.\r\nsort: popular (mặc định: lượt sử dụng, lượt thích, ngày phát hành) | newest | likes | name.\r\nfeatured = true: chỉ mẫu nổi bật, xếp theo featuredOrder trước.",
        "operationId": "ExcelTemplates_GetTemplates",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "app",
            "in": "query",
            "description": "Ứng dụng: excel (mặc định) | word | powerpoint",
            "required": false,
            "type": "string"
          },
          {
            "name": "categoryCode",
            "in": "query",
            "description": "Mã danh mục (market, financials, valuation...)",
            "required": false,
            "type": "string"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Tìm trong tên / mô tả / tag (tối đa 100 ký tự)",
            "required": false,
            "type": "string"
          },
          {
            "name": "tag",
            "in": "query",
            "description": "Lọc đúng một tag",
            "required": false,
            "type": "string"
          },
          {
            "name": "official",
            "in": "query",
            "description": "true = chỉ mẫu chính thức, false = chỉ mẫu cộng đồng",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "featured",
            "in": "query",
            "description": "true = chỉ mẫu nổi bật",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "sort",
            "in": "query",
            "description": "popular | newest | likes | name",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên (mặc định 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số bản ghi tối đa (mặc định 20, tối đa 100)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplatePagedResult[FireAnt.Api.Models.ExcelTemplates.ExcelTemplateItem]"
            }
          },
          "400": {
            "description": "Tham số không hợp lệ"
          }
        }
      }
    },
    "/excel/templates/categories": {
      "get": {
        "tags": [
          "ExcelTemplates"
        ],
        "summary": "Danh mục mẫu đang sử dụng (dùng chung mọi ứng dụng), kèm số mẫu của ứng dụng trong thư viện",
        "operationId": "ExcelTemplates_GetCategories",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "app",
            "in": "query",
            "description": "Ứng dụng để đếm templateCount: excel (mặc định) | word | powerpoint",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateCategory"
              }
            }
          },
          "400": {
            "description": "app không hợp lệ"
          }
        }
      }
    },
    "/excel/templates/{templateId}": {
      "get": {
        "tags": [
          "ExcelTemplates"
        ],
        "summary": "Chi tiết mẫu kèm tham số và quyền của người dùng hiện tại (canEdit, canUse)",
        "description": "Xem được khi: mẫu trong thư viện, hoặc là chủ sở hữu, được chia sẻ, có token link chia sẻ (mẫu Link / Public), hoặc admin.\r\nKhông xem được trả 404 (không lộ sự tồn tại). canUse = false khi chưa đăng nhập hoặc chưa đủ hạng thành viên (minMembershipLevel).",
        "operationId": "ExcelTemplates_GetTemplate",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "token",
            "in": "query",
            "description": "Token link chia sẻ (tùy chọn)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateDetail"
            }
          },
          "404": {
            "description": "Mẫu không tồn tại hoặc không xem được"
          }
        }
      }
    },
    "/excel/templates/link/{token}": {
      "get": {
        "tags": [
          "ExcelTemplates"
        ],
        "summary": "Chi tiết mẫu mở bằng link chia sẻ ({ExcelTemplateShareBaseUrl}/{token})",
        "description": "Dùng lại token này ở tham số token của content / file / usages / like.",
        "operationId": "ExcelTemplates_GetTemplateByLink",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "description": "Token link chia sẻ (22 ký tự)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateDetail"
            }
          },
          "404": {
            "description": "Link không tồn tại, đã bị hủy hoặc mẫu đã về Riêng tư"
          }
        }
      }
    },
    "/excel/templates/{templateId}/content": {
      "get": {
        "tags": [
          "ExcelTemplates"
        ],
        "summary": "Nội dung tệp mẫu dạng base64 cho Office.js (Excel insertWorksheetsFromBase64 / createWorkbook, Word insertFileFromBase64 /\r\ncreateDocument, PowerPoint insertSlidesFromBase64 / createPresentation)",
        "description": "Yêu cầu xem được mẫu, đã đăng nhập và đủ hạng thành viên (hoặc là chủ sở hữu / admin).\r\nKèm fileFormat (xlsx, xltx, docx, dotx, pptx, potx), app và contentType (MIME) của tệp.\r\nKhông tự ghi nhận sử dụng - add-in gọi POST .../usages sau khi chèn / mở mẫu.",
        "operationId": "ExcelTemplates_GetContent",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "token",
            "in": "query",
            "description": "Token link chia sẻ (tùy chọn)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateContent"
            }
          },
          "401": {
            "description": "Chưa đăng nhập"
          },
          "403": {
            "description": "Chưa đủ hạng thành viên (thông báo nêu gói cần có)"
          },
          "404": {
            "description": "Mẫu không tồn tại hoặc không xem được"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/excel/templates/{templateId}/file": {
      "get": {
        "tags": [
          "ExcelTemplates"
        ],
        "summary": "Tải tệp mẫu (nhị phân, tên tệp theo tên mẫu + đuôi theo fileFormat, Content-Type theo định dạng)",
        "description": "Cùng điều kiện với GET .../content. Không tự ghi nhận sử dụng.",
        "operationId": "ExcelTemplates_DownloadFile",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "token",
            "in": "query",
            "description": "Token link chia sẻ (tùy chọn)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Tệp .xlsx / .xltx / .docx / .dotx / .pptx / .potx",
            "schema": {
              "type": "object"
            }
          },
          "401": {
            "description": "Chưa đăng nhập"
          },
          "403": {
            "description": "Chưa đủ hạng thành viên"
          },
          "404": {
            "description": "Mẫu không tồn tại hoặc không xem được"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/excel/templates/{templateId}/usages": {
      "post": {
        "tags": [
          "ExcelTemplates"
        ],
        "summary": "Ghi nhận một lượt sử dụng mẫu (add-in gọi sau khi chèn / mở / tải)",
        "description": "Chỉ khi được dùng mẫu (canUse). Mọi lượt đều được ghi; usageCount chỉ tăng một lần cho mỗi người dùng / mẫu trong 60 phút.",
        "operationId": "ExcelTemplates_RecordUsage",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "action (1 Insert, 2 Open, 3 Download), platform, appVersion",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateUsageRequest"
            }
          },
          {
            "name": "token",
            "in": "query",
            "description": "Token link chia sẻ (tùy chọn)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "usageCount hiện tại",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateUsageResult"
            }
          },
          "400": {
            "description": "Dữ liệu không hợp lệ"
          },
          "403": {
            "description": "Chưa đủ hạng thành viên"
          },
          "404": {
            "description": "Mẫu không tồn tại hoặc không xem được"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/excel/templates/{templateId}/like": {
      "post": {
        "tags": [
          "ExcelTemplates"
        ],
        "summary": "Thích mẫu",
        "operationId": "ExcelTemplates_Like",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "token",
            "in": "query",
            "description": "Token link chia sẻ (tùy chọn)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Trạng thái thích hiện tại",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateLikeResult"
            }
          },
          "404": {
            "description": "Mẫu không tồn tại hoặc không xem được"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "ExcelTemplates"
        ],
        "summary": "Bỏ thích mẫu",
        "operationId": "ExcelTemplates_Unlike",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "token",
            "in": "query",
            "description": "Token link chia sẻ (tùy chọn)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Trạng thái thích hiện tại",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateLikeResult"
            }
          },
          "404": {
            "description": "Mẫu không tồn tại hoặc không xem được"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/excel/templates": {
      "get": {
        "tags": [
          "ExcelTemplatesAdmin"
        ],
        "summary": "Danh sách mẫu của một ứng dụng (mọi chế độ chia sẻ / trạng thái duyệt), kèm reviewNote, parameters, shareCount",
        "description": "reviewStatus = 1: hàng đợi chờ duyệt, cũ nhất trước. app không truyền = chỉ mẫu Excel (như trước).",
        "operationId": "ExcelTemplatesAdmin_GetTemplates",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "app",
            "in": "query",
            "description": "Ứng dụng: excel (mặc định) | word | powerpoint",
            "required": false,
            "type": "string"
          },
          {
            "name": "reviewStatus",
            "in": "query",
            "description": "0 None, 1 Pending, 2 Approved, 3 Rejected (bỏ trống = tất cả) (0 = None, 1 = Pending, 2 = Approved, 3 = Rejected)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3
            ]
          },
          {
            "name": "official",
            "in": "query",
            "description": "true = chỉ mẫu chính thức, false = chỉ mẫu cộng đồng",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Tìm trong tên / mô tả / tag",
            "required": false,
            "type": "string"
          },
          {
            "name": "ownerUserName",
            "in": "query",
            "description": "Lọc theo chủ sở hữu",
            "required": false,
            "type": "string"
          },
          {
            "name": "includeDeleted",
            "in": "query",
            "description": "Bao gồm mẫu đã xóa (isDeleted = true)",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên (mặc định 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số bản ghi tối đa (mặc định 20, tối đa 200)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplatePagedResult[FireAnt.Api.Models.ExcelTemplates.ExcelTemplateDetail]"
            }
          },
          "403": {
            "description": "Không có quyền"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "ExcelTemplatesAdmin"
        ],
        "summary": "Phát hành mẫu chính thức của FireAnt (multipart/form-data, giống tạo mẫu của người dùng)",
        "description": "Các part: \"metadata\" (JSON ExcelTemplateChangeRequest, bắt buộc name; có thể kèm isFeatured, featuredOrder,\r\nminMembershipLevel), \"file\" (.xlsx, .xltx, .docx, .dotx, .pptx, .potx - app suy ra từ đuôi tệp), \"thumbnail\" (tùy chọn).\r\nMẫu được tạo với isOfficial = true, visibility = 2, reviewStatus = 2, publishedDate = hiện tại; không giới hạn số mẫu.",
        "operationId": "ExcelTemplatesAdmin_CreateOfficialTemplate",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "201": {
            "description": "Tạo thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateDetail"
            }
          },
          "400": {
            "description": "Dữ liệu / tệp không hợp lệ"
          },
          "403": {
            "description": "Không có quyền"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/excel/templates/{templateId}/review": {
      "put": {
        "tags": [
          "ExcelTemplatesAdmin"
        ],
        "summary": "Duyệt / từ chối mẫu công khai",
        "description": "Chỉ mẫu visibility = 2. approved = true: hiện trong thư viện (đặt publishedDate nếu chưa có);\r\napproved = false: bắt buộc note (lý do, chủ sở hữu thấy ở reviewNote).",
        "operationId": "ExcelTemplatesAdmin_Review",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "approved, note",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateReviewRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Chi tiết sau khi duyệt",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateDetail"
            }
          },
          "400": {
            "description": "Mẫu không ở chế độ công khai / thiếu lý do từ chối"
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/excel/templates/{templateId}/flags": {
      "put": {
        "tags": [
          "ExcelTemplatesAdmin"
        ],
        "summary": "Đặt cờ quản trị: chính thức, nổi bật, thứ tự nổi bật, hạng thành viên tối thiểu, danh mục",
        "description": "Trường null = giữ nguyên. Mẫu chính thức luôn hiện trong thư viện và chỉ admin sửa được.",
        "operationId": "ExcelTemplatesAdmin_SetFlags",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "isOfficial, isFeatured, featuredOrder, minMembershipLevel, categoryCode",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateFlagsRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Chi tiết sau cập nhật",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateDetail"
            }
          },
          "400": {
            "description": "Dữ liệu không hợp lệ"
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/excel/templates/{templateId}": {
      "delete": {
        "tags": [
          "ExcelTemplatesAdmin"
        ],
        "summary": "Xóa mẫu bất kỳ (xóa mềm)",
        "operationId": "ExcelTemplatesAdmin_DeleteTemplate",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "templateId đã xóa",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/excel/templates/categories": {
      "get": {
        "tags": [
          "ExcelTemplatesAdmin"
        ],
        "summary": "Mọi danh mục (kể cả đã tắt), kèm số mẫu của ứng dụng trong thư viện",
        "operationId": "ExcelTemplatesAdmin_GetCategories",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "app",
            "in": "query",
            "description": "Ứng dụng để đếm templateCount: excel (mặc định) | word | powerpoint",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateCategory"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "ExcelTemplatesAdmin"
        ],
        "summary": "Thêm / cập nhật danh mục theo code",
        "description": "Body: danh sách ExcelTemplateCategory (code, name, nameEn, description, icon, orderIndex, isActive; bỏ qua categoryId,\r\ntemplateCount). Danh mục không có trong danh sách giữ nguyên; tắt danh mục bằng isActive = false (không xóa).",
        "operationId": "ExcelTemplatesAdmin_SaveCategories",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "categories",
            "in": "body",
            "description": "Danh mục cần thêm / cập nhật",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateCategory"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Mọi danh mục sau cập nhật",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateCategory"
              }
            }
          },
          "400": {
            "description": "Dữ liệu không hợp lệ"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/broker-users/{userId}/accounts/{accountId}/executions": {
      "get": {
        "tags": [
          "Executions"
        ],
        "summary": "Trả về danh sách lệnh khớp trong phiên của 1 mã chứng khoán",
        "operationId": "Executions_Executions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "instrument",
            "in": "query",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "maxCount",
            "in": "query",
            "description": "Số lượng bản ghi tối đa",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Trading.Execution"
              }
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-read"
            ]
          }
        ]
      }
    },
    "/feed/for-you": {
      "get": {
        "tags": [
          "Feed"
        ],
        "summary": "Bảng tin \"Dành cho bạn\" của người dùng hiện tại",
        "description": "Xếp hạng theo: người đang theo dõi, mã quan tâm (watchlist, cảnh báo giá, mã xem gần đây), nhóm đã tham gia,\r\nđộ hot, chất lượng, độ mới (theo giờ thị trường), biến động giá trong phiên. Mỗi bài có feedReason / feedReasonCode.\r\noffset = 0 lấy bảng tin mới nếu bản đang có cũ quá 2 phút; refresh = true luôn xếp hạng lại (kéo để làm mới).\r\nTrang sau cắt từ cùng một bản xếp hạng (tối đa 200 bài) nên không trùng, không sót dù request rơi vào máy chủ nào.",
        "operationId": "Feed_GetForYou",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên (mặc định 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số bản ghi tối đa (mặc định 20, tối đa 100)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "refresh",
            "in": "query",
            "description": "true = xếp hạng lại ngay",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công (danh sách rỗng = hết bảng tin)",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "404": {
            "description": "Tính năng chưa bật cho người dùng này"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/feed/hidden": {
      "post": {
        "tags": [
          "Feed"
        ],
        "summary": "Ẩn một bài khỏi bảng tin",
        "operationId": "Feed_HidePost",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Feed.FeedHideRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/feed/hidden/{postId}": {
      "delete": {
        "tags": [
          "Feed"
        ],
        "summary": "Bỏ ẩn một bài",
        "operationId": "Feed_UnhidePost",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/feed/muted": {
      "post": {
        "tags": [
          "Feed"
        ],
        "summary": "\"Không quan tâm\" một tác giả (type = author, key = Id người dùng) hoặc một mã (type = symbol, key = mã)",
        "operationId": "Feed_Mute",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Feed.FeedMuteRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/feed/muted/{type}/{key}": {
      "delete": {
        "tags": [
          "Feed"
        ],
        "summary": "Bỏ \"Không quan tâm\"",
        "operationId": "Feed_Unmute",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "key",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/feed-settings": {
      "get": {
        "tags": [
          "Feed"
        ],
        "summary": "Cài đặt bảng tin: công tắc cá nhân hoá và danh sách \"không quan tâm\"",
        "operationId": "Feed_GetSettings",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Feed.FeedSettings"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Feed"
        ],
        "summary": "Bật / tắt cá nhân hoá theo thói quen. Tắt: bảng tin chỉ dùng người đang theo dõi, watchlist, cảnh báo giá,\r\nnhóm đã tham gia; lịch sử \"đã xem\" của bảng tin bị xoá.",
        "operationId": "Feed_SaveSettings",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "change",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Feed.FeedSettingsChange"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/feed/health": {
      "get": {
        "tags": [
          "Feed"
        ],
        "summary": "Tình trạng bộ máy bảng tin trên máy chủ đang trả lời (cho cân bằng tải / giám sát)",
        "operationId": "Feed_GetHealth",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Feed.FeedHealth"
            }
          }
        }
      }
    },
    "/fmarket/accounts/is-register": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Check if an account is already registered",
        "operationId": "Fmarket_CheckAccount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.AccountCheckResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/accounts/register-account": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Create new Fmarket account",
        "operationId": "Fmarket_RegisterAccount",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.RegisterAccountExtraInfo"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.RegisterAccountResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/accounts/get-account-info": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Retrieve Fmarket’s account detail",
        "operationId": "Fmarket_GetAccountInfo",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetAccountInformationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetAccountInformationResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/accounts/link-account/create": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Create linked fmarket account",
        "operationId": "Fmarket_CreateLinkAccount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.CreateLinkAccountResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/accounts/link-account/confirm": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Confirm linked fmarket account",
        "operationId": "Fmarket_ConfirmLinkAccount",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ConfirmLinkAccountRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ConfirmLinkAccountResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/accounts/get-access-code": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Get accessCode to login to web",
        "operationId": "Fmarket_GetAccessCode",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetAccessCodeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetAccessCodeResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/accounts/trading-contract-list": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Retrieve Investor’s trading contract list",
        "operationId": "Fmarket_GetTradingContractList",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetTradingContractListRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.TradingContract"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/accounts/esign/create": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Only user have isAllowSign=true in trading contract response can sign",
        "operationId": "Fmarket_CreateSignFmarketContract",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.CreateESignRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.CreateESignResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/accounts/esign/confirm": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Confirm sign",
        "operationId": "Fmarket_ConfirmESign",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ConfirmESignRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ConfirmESignResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/estimate-purchase": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Calculate estimation of volume/fee for purchase order",
        "operationId": "Fmarket_EstimatePurchaseOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.EstimatePurchaseOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.EstimatePurchaseOrderResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/create-purchase-order/request": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Create purchase order",
        "operationId": "Fmarket_CreatePurchaseOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.CreatePurchaseOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.CreatePurchaseOrderResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/v2/orders/create-purchase-order/request": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Create purchase order",
        "operationId": "Fmarket_CreatePurchaseOrderV2",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.CreatePurchaseOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.CreatePurchaseOrderResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/create-purchase-order/confirm": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Confirm purchase order",
        "operationId": "Fmarket_ConfirmPurchaseOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ConfirmPurchaseOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ConfirmPurchaseOrderResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/v2/orders/create-purchase-order/confirm": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Confirm purchase order",
        "operationId": "Fmarket_ConfirmPurchaseOrderV2",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ConfirmPurchaseOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ConfirmPurchaseOrderResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/estimate-sale": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Calculate estimation of amount/fee for sale order",
        "operationId": "Fmarket_EstimateSaleOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.EstimateSaleOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.EstimateSaleOrderResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/create-sale-order/request": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Create sale order",
        "operationId": "Fmarket_CreateSaleOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.CreateSaleOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.CreateSaleOrderResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/create-sale-order/confirm": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Confirm sale order",
        "operationId": "Fmarket_ConfirmSaleOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ConfirmSaleOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ConfirmSaleOrderResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/get-destination-products": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Get list of destination product for convert",
        "operationId": "Fmarket_GetListOfDestinationProduct",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetDestinationProductListRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.DestinationProduct"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/estimate-convert": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Calculate estimation of amount/fee/tax for convert order",
        "operationId": "Fmarket_EstimateConvertOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.EstimateConvertOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.EstimateConvertOrderResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/create-convert-order/request": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Create convert order",
        "operationId": "Fmarket_CreateConvertOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.CreateConvertOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.CreateConvertOrderResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/create-convert-order/confirm": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Confirm convert order",
        "operationId": "Fmarket_ConfirmConvertOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ConfirmConvertOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ConfirmConvertOrderResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/cancel-order": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Cancel order (if supported, please check field: allowed_cancel=true)",
        "operationId": "Fmarket_CancelOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.CancelOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.CancelOrderResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/get-order-detail": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Retrieve order detail",
        "operationId": "Fmarket_GetOrderDetail",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetOrderDetailRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.OrderDetail"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/filter-orders": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Query list of orders",
        "operationId": "Fmarket_FilterOrders",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.FilterOrdersRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.FilterOrdersResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/orders/filter-transactions": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Retrieve transaction list",
        "operationId": "Fmarket_FilterTransactions",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.FilterTransactionsRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.FilterTransactionsResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/assets/filter-asset-funds": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Retrieve asset funds",
        "operationId": "Fmarket_FilterAssetFunds",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.FilterAssetFundsRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.FilterAssetFundsResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/assets/filter-assets": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Retrieve assets",
        "operationId": "Fmarket_FilterAssets",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.FilterAssetsRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.FilterAssetsResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/markets/get-product-detail": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Retrieve Fmarket’s product detail",
        "operationId": "Fmarket_GetProductDetail",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetProductDetailRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductDetail"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/markets/filter-products": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Query list of products",
        "operationId": "Fmarket_FilterProducts",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.FilterProductsRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.FilterProductsResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/markets/issuer-list": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Get list issuers",
        "operationId": "Fmarket_GetIssuers",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetIssuerListRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetIssuerListResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/static/provinces": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Get province list",
        "operationId": "Fmarket_GetProvinces",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetProvincesRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetProvincesResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/static/nationalities": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Get nationality  list",
        "operationId": "Fmarket_GetNationalities",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetNationalitiesRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetNationalitiesResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/static/place-of-issue-id-list": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Get place of issue id list",
        "operationId": "Fmarket_GetPlaceOfIssueIDList",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetPlaceOfIssueIDListRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetPlaceOfIssueIDListResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/static/banks": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Get bank list",
        "operationId": "Fmarket_GetBanks",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetBanksRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetBanksResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/fmarket/static/get-nav-history": {
      "post": {
        "tags": [
          "Fmarket"
        ],
        "summary": "Get Product NAV History",
        "operationId": "Fmarket_GetProductNavHistory",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetProductNavHistoryRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.GetProductNavHistoryResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/hashtags/search": {
      "get": {
        "tags": [
          "HashTags"
        ],
        "summary": "Tìm kiếm chủ đề (hashtag)",
        "operationId": "HashTags_Search",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "keywords",
            "in": "query",
            "description": "Từ khóa tìm kiếm",
            "required": true,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.SymbolItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/hashtags/{hashTagId}/posts": {
      "get": {
        "tags": [
          "HashTags"
        ],
        "summary": "Lấy danh sách bài viết liên quan tới 1 chủ đề",
        "operationId": "HashTags_GetHashTagPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "hashTagId",
            "in": "path",
            "description": "ID của chủ đề",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/icb/{industryCode}/symbols": {
      "get": {
        "tags": [
          "ICB"
        ],
        "summary": "Lấy danh sách mã chứng khoán trong ngành",
        "operationId": "ICB_GetSymbolsInIndustry",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "industryCode",
            "in": "path",
            "description": "Mã ngành",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/icb/{industryCode}/statistics": {
      "get": {
        "tags": [
          "ICB"
        ],
        "summary": "Lấy thống kê dữ liệu thời điểm hiện tại của ngành",
        "operationId": "ICB_GetCurrentIndustryStats",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "industryCode",
            "in": "path",
            "description": "Mã ngành",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Industries.IndustryStatistic"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/icb/statistics": {
      "get": {
        "tags": [
          "ICB"
        ],
        "summary": "Lấy thống kê dữ liệu thời điểm hiện tại của tất cả ngành",
        "operationId": "ICB_GetAllLatestIndustryStatistics",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Industries.IndustryStatistic"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/icb/{industryCode}/financial-data": {
      "get": {
        "tags": [
          "ICB"
        ],
        "summary": "Lấy dữ liệu tài chính  của ngành",
        "operationId": "ICB_GetFinancialData",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "industryCode",
            "in": "path",
            "description": "Mã ngành",
            "required": true,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại dữ liệu (Y: Năm, Q: Quý, A: Tất cả)",
            "required": true,
            "type": "string"
          },
          {
            "name": "count",
            "in": "query",
            "description": "Số lượng dữ liệu",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Finance.FinancialData"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/icb/financial-data": {
      "get": {
        "tags": [
          "ICB"
        ],
        "summary": "Lấy dữ liệu tài chính mới nhất của tất cả ngành",
        "operationId": "ICB_GetAllLatestIndustryFinancialData",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Finance.FinancialData"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/icb/{industryCode}/historical-index": {
      "get": {
        "tags": [
          "ICB"
        ],
        "summary": "Lấy dữ liệu chỉ số  của ngành",
        "operationId": "ICB_GetHistoricalIndustryIndex",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "industryCode",
            "in": "path",
            "description": "Mã ngành",
            "required": true,
            "type": "string"
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Ngày bắt đầu",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Ngày kết thúc",
            "required": true,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Industries.IndustryIndex"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/icb/latest-index": {
      "get": {
        "tags": [
          "ICB"
        ],
        "summary": "Lấy dữ liệu tài chính mới nhất của tất cả ngành",
        "operationId": "ICB_GetAllLatestIndustryIndex",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Industries.IndustryIndex"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/icb": {
      "get": {
        "tags": [
          "ICB"
        ],
        "summary": "Lấy danh sách ngành",
        "operationId": "ICB_GetIndustries",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Industries.ICBIndustry"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/icb/industry-info": {
      "get": {
        "tags": [
          "ICB"
        ],
        "summary": "Lấy thông tin ngành theo danh sách mã chứng khoán",
        "operationId": "ICB_GetIndustryInfo",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbols",
            "in": "query",
            "description": "Danh sách mã chứng khoán, cách nhau bởi dấu phẩy",
            "required": false,
            "type": "string"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Industries.IndustryInfo"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/icb/{industryCode}/rrg": {
      "get": {
        "tags": [
          "ICB"
        ],
        "summary": "Lấy thống kê RRG",
        "operationId": "ICB_GetRRG",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "industryCode",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Ngày bắt đầu",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Ngày kết thúc",
            "required": true,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Statistics.RRGValue"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/individuals/search": {
      "get": {
        "tags": [
          "Individuals"
        ],
        "summary": "Tìm kiếm cá nhân",
        "operationId": "Individuals_Search",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "keywords",
            "in": "query",
            "description": "Từ khóa tìm kiếm",
            "required": true,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Individuals.IndividualItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "individuals-read"
            ]
          }
        ]
      }
    },
    "/individuals/{individualId}/photo": {
      "get": {
        "tags": [
          "Individuals"
        ],
        "summary": "Lấy ảnh một cá nhân",
        "operationId": "Individuals_GetIndividualPhoto",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "individualId",
            "in": "path",
            "description": "ID của cá nhân",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "width",
            "in": "query",
            "description": "Chiều rộng ảnh (=0 nếu muốn lấy kích thước đầy đủ, mặc định = 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "height",
            "in": "query",
            "description": "Chiều cao ảnh (=0 nếu muốn lấy kích thước đầy đủ, mặc định = 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "404": {
            "description": "Không tìm thấy tài nguyên"
          }
        }
      }
    },
    "/individuals/{individualId}/posts": {
      "get": {
        "tags": [
          "Individuals"
        ],
        "summary": "Lấy danh sách bài viết liên quan tới một cá nhân",
        "operationId": "Individuals_GetIndividualPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "individualId",
            "in": "path",
            "description": "ID của cá nhân",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/individuals/{individualId}/profile": {
      "get": {
        "tags": [
          "Individuals"
        ],
        "summary": "Lấy hồ sơ một cá nhân",
        "operationId": "Individuals_GetIndividualProfile",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "individualId",
            "in": "path",
            "description": "ID của cá nhân",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Individuals.IndividualProfile"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/individuals/{individualId}/jobs": {
      "get": {
        "tags": [
          "Individuals"
        ],
        "summary": "Lấy danh sách công việc của một cá nhân",
        "operationId": "Individuals_GetIndividualJobs",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "individualId",
            "in": "path",
            "description": "ID của cá nhân",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Individuals.IndividualJob"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "individuals-read"
            ]
          }
        ]
      }
    },
    "/individuals/{individualId}/assets": {
      "get": {
        "tags": [
          "Individuals"
        ],
        "summary": "Lấy danh sách tài sản của một cá nhân",
        "operationId": "Individuals_GetIndividualAssets",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "individualId",
            "in": "path",
            "description": "ID của cá nhân",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Individuals.IndividualAsset"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "individuals-read"
            ]
          }
        ]
      }
    },
    "/individuals/{individualId}/relations": {
      "get": {
        "tags": [
          "Individuals"
        ],
        "summary": "Lấy danh sách mối quan hệ trong gia đình của một cá nhân",
        "operationId": "Individuals_GetIndividualRelations",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "individualId",
            "in": "path",
            "description": "ID của cá nhân",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Individuals.IndividualRelation"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "individuals-read"
            ]
          }
        ]
      }
    },
    "/individuals/{individualId}/transactions": {
      "get": {
        "tags": [
          "Individuals"
        ],
        "summary": "Lấy danh sách giao dịch mua/bán chứng khoán của một cá nhân",
        "operationId": "Individuals_GetIndividualTransactions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "individualId",
            "in": "path",
            "description": "ID của cá nhân",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "executedOnly",
            "in": "query",
            "description": "Chỉ lấy giao dịch đã thưc hiện",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Institutions.MajorHolderTransaction"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "individuals-read"
            ]
          }
        ]
      }
    },
    "/individuals/richest": {
      "get": {
        "tags": [
          "Individuals"
        ],
        "summary": "Lấy danh sách người giàu trên sàn chứng khoán",
        "operationId": "Individuals_GetRichestIndividuals",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "sex",
            "in": "query",
            "description": "Lọc theo Giới tính (male, female hoặc để trống để lấy tất cả), mặc định lấy tất cả giới tính",
            "required": false,
            "type": "string"
          },
          {
            "name": "industryCode",
            "in": "query",
            "description": "Lọc theo ngành (mã ngành ICB hoặc để trống để lấy tất cả), mặc định lấy tất cả ngành",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Individuals.RichestIndividualItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "individuals-read"
            ]
          }
        ]
      }
    },
    "/individuals/gainers": {
      "get": {
        "tags": [
          "Individuals"
        ],
        "summary": "Lấy danh sách TOP cá nhân tăng tài sản trong ngày trên sàn chứng khoán",
        "operationId": "Individuals_GetTopWinnerRichestIndividuals",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "industryCode",
            "in": "query",
            "description": "Lọc theo ngành (mã ngành ICB hoặc để trống để lấy tất cả), mặc định lấy tất cả ngành",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Individuals.RichestIndividualItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "individuals-read"
            ]
          }
        ]
      }
    },
    "/individuals/losers": {
      "get": {
        "tags": [
          "Individuals"
        ],
        "summary": "Lấy danh sách TOP cá nhân giảm tài sản trong ngày trên sàn chứng khoán",
        "operationId": "Individuals_GetTopLoserRichestIndividuals",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "industryCode",
            "in": "query",
            "description": "Lọc theo ngành (mã ngành ICB hoặc để trống để lấy tất cả), mặc định lấy tất cả ngành",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Individuals.RichestIndividualItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "individuals-read"
            ]
          }
        ]
      }
    },
    "/industries/{industryCode}/historical-stats": {
      "get": {
        "tags": [
          "Industries"
        ],
        "summary": "Lấy thống kê dữ liệu quá khứ của ngành",
        "operationId": "Industries_GetHistoricalIndustryStats",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "industryCode",
            "in": "path",
            "description": "Mã ngành",
            "required": true,
            "type": "string"
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Ngày bắt đầu",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Ngày kết thúc",
            "required": true,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Industries.IndustrySnapshot"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/industries/{industryCode}/current-stats": {
      "get": {
        "tags": [
          "Industries"
        ],
        "summary": "Lấy thống kê dữ liệu thời điểm hiện tại của ngành",
        "operationId": "Industries_GetCurrentIndustryStats",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "industryCode",
            "in": "path",
            "description": "Mã ngành",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Industries.IndustrySnapshot"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/industries/current-stats": {
      "get": {
        "tags": [
          "Industries"
        ],
        "summary": "Lấy thống kê dữ liệu thời điểm hiện tại của tất cả ngành",
        "operationId": "Industries_GetAllCurrentIndustryStats",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Industries.IndustrySnapshot"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/industries": {
      "get": {
        "tags": [
          "Industries"
        ],
        "summary": "Lấy danh sách ngành",
        "operationId": "Industries_GetIndustries",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Industries.ICBIndustry"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/industries/{industryCode}/rrg": {
      "get": {
        "tags": [
          "Industries"
        ],
        "summary": "Lấy thống kê RRG",
        "operationId": "Industries_GetRRG",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "industryCode",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Ngày bắt đầu",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Ngày kết thúc",
            "required": true,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Industries.IndustrySnapshot"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/instruments": {
      "get": {
        "tags": [
          "Instruments"
        ],
        "summary": "Trả danh sách toàn bộ mã chứng khoán",
        "operationId": "Instruments_AllInstruments",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Trading.InstrumentItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        }
      }
    },
    "/broker-users/{userId}/accounts/{accountId}/instruments": {
      "get": {
        "tags": [
          "Instruments"
        ],
        "summary": "Trả danh sách mã chứng khoán tài khoản được phép giao dịch",
        "operationId": "Instruments_Instruments",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Trading.Instrument"
              }
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-read"
            ]
          }
        ]
      }
    },
    "/investopedia/terms": {
      "get": {
        "tags": [
          "Investopedia"
        ],
        "summary": "Lấy danh sách thuật ngữ",
        "operationId": "Investopedia_GetTerms",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "categoryId",
            "in": "query",
            "description": "Lọc theo danh mục",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "startWith",
            "in": "query",
            "description": "Lọc theo chữ cái đầu",
            "required": false,
            "type": "string"
          },
          {
            "name": "isMostRead",
            "in": "query",
            "description": "Lọc theo thuật ngữ nhiều người xem nhất",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "isLastest",
            "in": "query",
            "description": "Lọc theo thuật ngữ mới nhất",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Investopedia.InvestopediaTerm"
              }
            }
          },
          "500": {
            "description": "Lỗi hệ thống"
          }
        },
        "security": [
          {
            "oauth2": [
              "investopedia-read"
            ]
          }
        ]
      }
    },
    "/investopedia/terms/recordCount": {
      "get": {
        "tags": [
          "Investopedia"
        ],
        "summary": "Lấy số lượng thuật ngữ",
        "operationId": "Investopedia_GetTermsCount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "categoryId",
            "in": "query",
            "description": "Lọc theo danh mục",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "startWith",
            "in": "query",
            "description": "Lọc theo chữ cái đầu",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "investopedia-read"
            ]
          }
        ]
      }
    },
    "/investopedia/terms/search": {
      "get": {
        "tags": [
          "Investopedia"
        ],
        "summary": "Tìm kiếm thuật ngữ theo từ khóa",
        "operationId": "Investopedia_SearchTerms",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "keywords",
            "in": "query",
            "description": "Từ khóa",
            "required": true,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Investopedia.InvestopediaTerm"
              }
            }
          },
          "404": {
            "description": "Thuật ngữ không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "investopedia-read"
            ]
          }
        ]
      }
    },
    "/investopedia/terms/keywords/recordCount": {
      "get": {
        "tags": [
          "Investopedia"
        ],
        "summary": "Lấy số lượng thuật ngữ theo từ khóa",
        "operationId": "Investopedia_GetTermsByKeywordsCount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "keywords",
            "in": "query",
            "description": "Từ khóa",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "investopedia-read"
            ]
          }
        ]
      }
    },
    "/investopedia/terms/{termKey}": {
      "get": {
        "tags": [
          "Investopedia"
        ],
        "summary": "Lấy thông tin thuật ngữ theo tên",
        "operationId": "Investopedia_GetTermByName",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "termKey",
            "in": "path",
            "description": "Tên thuật ngữ",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Investopedia.InvestopediaTerm"
              }
            }
          },
          "404": {
            "description": "Thuật ngữ không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "investopedia-read"
            ]
          }
        ]
      }
    },
    "/investopedia/terms/{termId}": {
      "get": {
        "tags": [
          "Investopedia"
        ],
        "summary": "Lấy thông tin thuật ngữ theo ID",
        "operationId": "Investopedia_GetTermById",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "termId",
            "in": "path",
            "description": "ID của thuật ngữ",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Investopedia.InvestopediaTerm"
              }
            }
          },
          "404": {
            "description": "Thuật ngữ không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "investopedia-read"
            ]
          }
        ]
      }
    },
    "/investopedia/terms/categories": {
      "get": {
        "tags": [
          "Investopedia"
        ],
        "summary": "Lấy danh sách danh mục thuật ngữ",
        "operationId": "Investopedia_GetInvestopediaCategories",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Investopedia.InvestopediaCategory"
              }
            }
          },
          "500": {
            "description": "Lỗi hệ thống"
          }
        },
        "security": [
          {
            "oauth2": [
              "investopedia-read"
            ]
          }
        ]
      }
    },
    "/investopedia/terms/categories/{categoryId}": {
      "get": {
        "tags": [
          "Investopedia"
        ],
        "summary": "Lấy thông tin danh mục thuật ngữ",
        "operationId": "Investopedia_GetInvestopediaCategory",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "categoryId",
            "in": "path",
            "description": "ID của danh mục",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Investopedia.InvestopediaCategory"
            }
          },
          "500": {
            "description": "Lỗi hệ thống"
          }
        },
        "security": [
          {
            "oauth2": [
              "investopedia-read"
            ]
          }
        ]
      }
    },
    "/ir/contracts": {
      "get": {
        "tags": [
          "IR"
        ],
        "summary": "Lấy tất cả hợp đồng IR",
        "operationId": "IR_GetAllContracts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Loại hợp đồng (0: Tất cả, 1: Còn hạn, 2: Sắp hết hạn, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.InvestorRelations.IRContract"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/contracts/{symbol}": {
      "get": {
        "tags": [
          "IR"
        ],
        "summary": "Lấy chi tiết hợp đồng IR của 1 mã chứng khoán",
        "operationId": "IR_GetLastContractBySymbol",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.InvestorRelations.IRContractDetailInfo"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/latest-statistics/{symbol}": {
      "get": {
        "tags": [
          "IR"
        ],
        "summary": "Lấy thống kê hoạt động IR của 1 mã chứng khoán",
        "operationId": "IR_GetLatestIRContractStatistics",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.InvestorRelations.IRContractLastStatistics"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/historical-statistics/{symbol}": {
      "get": {
        "tags": [
          "IR"
        ],
        "summary": "Lấy lịch sử hoạt động IR của 1 mã chứng khoán",
        "operationId": "IR_GetHistoricalIRContractStatistics",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "periodType",
            "in": "query",
            "description": "Khoảng thời gian (Day: Ngày, Week: Tuần, Month: Tháng, mặc định là Day)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.InvestorRelations.IRContractHistoricalStatistics"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/post-statistics/{symbol}": {
      "get": {
        "tags": [
          "IR"
        ],
        "summary": "Lấy thống kê hoạt động IR của các bài viết của 1 mã chứng khoán",
        "operationId": "IR_GetIRPostStatisticsBySymbol",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "description": "Từ ngày",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "description": "Đến ngày",
            "required": true,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.InvestorRelations.IRPostStatistics"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/companies": {
      "get": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Danh sách công ty sử dụng dịch vụ",
        "operationId": "IRAdmin_GetCompanies",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": " (0 = Pending, 1 = Active, 2 = Suspended, 3 = Closed)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3
            ]
          },
          {
            "name": "keyword",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "includeDeleted",
            "in": "query",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRCompanyItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Tạo công ty mới",
        "operationId": "IRAdmin_CreateCompany",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanyChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanyDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/companies/{companyId}": {
      "delete": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Xóa mềm công ty",
        "operationId": "IRAdmin_DeleteCompany",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/companies/{companyId}/subscription": {
      "post": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Tạo hoặc cập nhật hợp đồng dịch vụ",
        "operationId": "IRAdmin_SaveSubscription",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "subscriptionId",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRSubscriptionChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanyDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/companies/{companyId}/users": {
      "post": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Thêm hoặc đổi vai trò người dùng của một công ty",
        "operationId": "IRAdmin_SaveCompanyUser",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanyUserChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/tickets": {
      "get": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Hàng đợi yêu cầu hỗ trợ của toàn bộ khách hàng",
        "operationId": "IRAdmin_GetQueue",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": " (0 = New, 1 = Triaged, 2 = InProgress, 3 = WaitingCustomer, 4 = Resolved, 5 = Rejected, 6 = Closed)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3,
              4,
              5,
              6
            ]
          },
          {
            "name": "priority",
            "in": "query",
            "description": " (1 = Low, 2 = Normal, 3 = High, 4 = Urgent)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              1,
              2,
              3,
              4
            ]
          },
          {
            "name": "assignee",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "slaBreached",
            "in": "query",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "keyword",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRTicketItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/tickets/{code}": {
      "get": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Chi tiết yêu cầu kèm ghi chú nội bộ",
        "operationId": "IRAdmin_GetTicket",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/tickets/{code}/assign": {
      "put": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Phân công và đổi mức ưu tiên",
        "operationId": "IRAdmin_AssignTicket",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketAssignRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/tickets/{code}/status": {
      "put": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Chuyển trạng thái yêu cầu",
        "operationId": "IRAdmin_ChangeTicketStatus",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketStatusRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/tickets/{code}/messages": {
      "post": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Gửi tin nhắn hoặc ghi chú nội bộ",
        "operationId": "IRAdmin_AddTicketMessage",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketMessageRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/tickets/{code}/actions": {
      "post": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Ghi nhận hành động xử lý nội dung. Lý do là bắt buộc và bản ghi không xóa được:\r\nđây là hồ sơ cho cả FireAnt và khách hàng.",
        "operationId": "IRAdmin_AddTicketAction",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "code",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketActionRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/sla-dashboard": {
      "get": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Tình hình thực hiện cam kết thời gian",
        "operationId": "IRAdmin_GetSlaDashboard",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "days",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRSlaDashboard"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/companies/{companyId}/official-account/verify": {
      "post": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Xác minh, từ chối hoặc thu hồi Official Account",
        "operationId": "IRAdmin_VerifyOfficialAccount",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "companyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaVerificationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaAccount"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/surveys": {
      "get": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Hàng đợi khảo sát cổ đông chờ duyệt",
        "operationId": "IRAdmin_GetSurveyQueue",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": " (0 = Draft, 1 = PendingReview, 2 = Approved, 3 = Rejected, 4 = Live, 5 = Closed, 6 = Withdrawn)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3,
              4,
              5,
              6
            ]
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRCompanySurveyItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/surveys/{companySurveyId}": {
      "get": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Chi tiết khảo sát kèm câu hỏi, cài đặt hiển thị và hành động sau khảo sát để duyệt",
        "operationId": "IRAdmin_GetSurvey",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanySurveyItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/surveys/{companySurveyId}/review": {
      "post": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Duyệt, từ chối, phát hành hoặc gỡ khảo sát cổ đông.\r\nHạn mức của công ty chỉ bị trừ khi khảo sát được duyệt.",
        "operationId": "IRAdmin_ReviewSurvey",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRSurveyReviewRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanySurveyItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/lexicon": {
      "get": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Từ điển cảm xúc tiếng Việt chuyên ngành chứng khoán",
        "operationId": "IRAdmin_GetLexicon",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "onlyActive",
            "in": "query",
            "required": false,
            "type": "boolean"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRLexiconItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Thêm hoặc sửa một cụm từ trong từ điển",
        "operationId": "IRAdmin_SaveLexicon",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "lexiconId",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "item",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRLexiconItem"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/lexicon/{lexiconId}": {
      "delete": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Xóa một cụm từ khỏi từ điển",
        "operationId": "IRAdmin_DeleteLexicon",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "lexiconId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/mentions/{mentionId}/sentiment": {
      "post": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Gán nhãn cảm xúc thủ công cho một nội dung. Vừa sửa được kết quả sai,\r\nvừa tạo dữ liệu chuẩn để đo độ chính xác của từ điển và mô hình.",
        "operationId": "IRAdmin_SetMentionSentiment",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "mentionId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRSentimentLabelRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/topics/{symbol}": {
      "get": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Trạng thái topic đẩy symbol_&lt;MÃ&gt; của một mã: bao nhiêu thiết bị đang đăng ký\r\nvà lần đồng bộ gần nhất. Chiến dịch chỉ gửi qua topic khi số thiết bị lớn hơn 0.",
        "operationId": "IRAdmin_GetTopicStatus",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/jobs/{job}/run": {
      "post": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Chạy ngay một bước xử lý nền. Đưa vào hàng đợi rồi trả về ngay vì nhiều job chạy\r\nquá thời gian của một request (gọi mô hình ngôn ngữ, FCM). Kết quả xem ở\r\nGET jobs/runs. Các bước này vẫn chạy tự động theo lịch SQL Server Agent.",
        "operationId": "IRAdmin_RunJob",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "job",
            "in": "path",
            "description": "ingest, ai, engagement, hourly, daily, alerts, operations, reminders, sla,\r\n            subscriptions, surveys, oametrics, posts, topics, topics-whatif, retention",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/jobs/runs": {
      "get": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Nhật ký các lượt chạy job gần nhất - cả theo lịch SQL Server Agent lẫn chạy tay.",
        "operationId": "IRAdmin_GetJobRuns",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "job",
            "in": "query",
            "description": "Lọc theo tên job, bỏ trống để lấy tất cả",
            "required": false,
            "type": "string"
          },
          {
            "name": "count",
            "in": "query",
            "description": "Số dòng, tối đa 500",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRJobRunItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/jobs/backfill": {
      "post": {
        "tags": [
          "IRAdmin"
        ],
        "summary": "Dựng lại lịch sử số liệu cho một mã. Chạy nền vì có thể mất vài phút.\r\nLưu ý: các chỉ số về người theo dõi không có số liệu quá khứ vì hệ thống MXH\r\nchỉ lưu trạng thái hiện tại.",
        "operationId": "IRAdmin_Backfill",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "required": true,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "ingestFirst",
            "in": "query",
            "required": false,
            "type": "boolean"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/pages": {
      "get": {
        "tags": [
          "IRAdminPage"
        ],
        "summary": "Danh sách trang IR",
        "operationId": "IRAdminPage_GetPages",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": "0 chưa xuất bản, 1 đang hiện, 2 tạm ẩn, 3 doanh nghiệp tắt (0 = Unpublished, 1 = Published, 2 = Suspended, 3 = Disabled)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3
            ]
          },
          {
            "name": "keyword",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "pendingOnly",
            "in": "query",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRPageInfo]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/pages/review-queue": {
      "get": {
        "tags": [
          "IRAdminPage"
        ],
        "summary": "Phiên bản chờ duyệt, cũ nhất trước",
        "operationId": "IRAdminPage_GetReviewQueue",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageReviewItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/pages/review": {
      "post": {
        "tags": [
          "IRAdminPage"
        ],
        "summary": "Duyệt / từ chối một phiên bản (từ chối cần ghi lý do)",
        "operationId": "IRAdminPage_Review",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageReviewRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/pages/claims": {
      "get": {
        "tags": [
          "IRAdminPage"
        ],
        "summary": "Đề nghị nhận quản lý / mở Trang IR của doanh nghiệp",
        "operationId": "IRAdminPage_GetClaims",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": "0 mới, 1 đã liên hệ, 2 đã ký hợp đồng, 3 từ chối",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRPageClaim]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/pages/claims/{claimId}": {
      "post": {
        "tags": [
          "IRAdminPage"
        ],
        "summary": "Cập nhật xử lý đề nghị nhận quản lý trang",
        "operationId": "IRAdminPage_UpdateClaim",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "claimId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageClaimUpdateRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/pages/{symbol}": {
      "get": {
        "tags": [
          "IRAdminPage"
        ],
        "summary": "Trạng thái trang của một mã (bản nháp, bản đang hiện, bản chờ duyệt)",
        "operationId": "IRAdminPage_GetState",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageState"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/pages/{symbol}/versions": {
      "get": {
        "tags": [
          "IRAdminPage"
        ],
        "summary": "Lịch sử phiên bản",
        "operationId": "IRAdminPage_GetVersions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageVersionItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/pages/{symbol}/versions/{versionId}": {
      "get": {
        "tags": [
          "IRAdminPage"
        ],
        "summary": "Một phiên bản kèm nội dung",
        "operationId": "IRAdminPage_GetVersion",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "versionId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageVersionItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/pages/{symbol}/preview": {
      "post": {
        "tags": [
          "IRAdminPage"
        ],
        "summary": "Dựng gói trang từ một nội dung bất kỳ để xem trước",
        "operationId": "IRAdminPage_Preview",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagePreviewRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageBundle"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/ir/pages/{symbol}/suspend": {
      "post": {
        "tags": [
          "IRAdminPage"
        ],
        "summary": "Tạm ẩn / hiện lại trang (tạm ẩn cần lý do; trong lúc ẩn mã không có Trang IR)",
        "operationId": "IRAdminPage_Suspend",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageSuspendRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/pages/{symbol}/domain": {
      "post": {
        "tags": [
          "IRAdminPage"
        ],
        "summary": "Duyệt tên miền riêng: 2 hoạt động, 3 từ chối, 0 gỡ",
        "operationId": "IRAdminPage_SetDomainStatus",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageDomainRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/ir/pages/{symbol}/import": {
      "post": {
        "tags": [
          "IRAdminPage"
        ],
        "summary": "Tạo / thay trang và xuất bản ngay (chuyển trang IR tĩnh cũ, dựng hộ doanh nghiệp)",
        "operationId": "IRAdminPage_Import",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageImportRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/dashboard": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Tổng quan: chỉ số kỳ này và kỳ trước, chuỗi theo ngày, nội dung nổi bật,\r\ncảnh báo gần đây và tình hình vận hành dịch vụ",
        "operationId": "IRAnalytics_GetDashboard",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "period",
            "in": "query",
            "description": "Khoảng thời gian: 7d, 30d, 90d, ytd (mặc định 30d)",
            "required": false,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "description": "Từ ngày (ghi đè period)",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "description": "Đến ngày",
            "required": false,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRDashboard"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/metrics": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Chuỗi số liệu theo ngày hoặc theo giờ",
        "operationId": "IRAnalytics_GetMetrics",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "granularity",
            "in": "query",
            "description": "day hoặc hour (số liệu giờ chỉ giữ 14 ngày)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/mentions": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Dòng thảo luận về mã, có lọc theo kênh, cảm xúc, mức nghiêm trọng",
        "operationId": "IRAnalytics_GetMentions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "channel",
            "in": "query",
            "description": "1 bài nhà đầu tư, 2 bình luận, 3 tin tức, 4 công bố thông tin, 5 bài trong nhóm, 6 bài OA (1 = Post, 2 = Comment, 3 = News, 4 = Disclosure, 5 = RoomPost, 6 = OfficialAccount)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              1,
              2,
              3,
              4,
              5,
              6
            ]
          },
          {
            "name": "sentiment",
            "in": "query",
            "description": "0 chưa phân loại, 1 tiêu cực, 2 trung tính, 3 tích cực (0 = Unknown, 1 = Negative, 2 = Neutral, 3 = Positive)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3
            ]
          },
          {
            "name": "minSeverity",
            "in": "query",
            "description": "Mức nghiêm trọng tối thiểu (0..3)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "keyword",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "author",
            "in": "query",
            "description": "Mã tài khoản công khai của tác giả (authorId), không phải tên đăng nhập",
            "required": false,
            "type": "string"
          },
          {
            "name": "onlyFlagged",
            "in": "query",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "hasTicket",
            "in": "query",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "sortBy",
            "in": "query",
            "description": "date, engagement hoặc severity",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRMentionItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/mentions/{mentionId}": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Chi tiết một nội dung",
        "operationId": "IRAnalytics_GetMention",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "mentionId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRMentionItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/authors": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Tác giả nhắc đến mã nhiều nhất trong kỳ",
        "operationId": "IRAnalytics_GetTopAuthors",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTopAuthor"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/audience": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Cơ cấu nhà đầu tư đang quan tâm mã. Chỉ trả về nhóm từ 50 người trở lên,\r\nkhông bao giờ lộ danh tính từng người.",
        "operationId": "IRAnalytics_GetAudience",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "date",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAudienceBucket"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/sentiment-coverage": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Độ phủ phân loại cảm xúc: bao nhiêu nội dung đã phân loại và bằng cách nào\r\n(kế thừa tin tức, từ điển, mô hình ngôn ngữ, hay người gán nhãn).",
        "operationId": "IRAnalytics_GetSentimentCoverage",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "days",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRSentimentCoverage"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/share-of-voice": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Tỉ trọng thảo luận so với nhóm mã đối chuẩn",
        "operationId": "IRAnalytics_GetShareOfVoice",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRShareOfVoiceItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/event-comparison": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "So sánh chỉ số trước và sau một mốc sự kiện",
        "operationId": "IRAnalytics_GetEventComparison",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "pivotDate",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "windowDays",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IREventComparison"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/peers": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Nhóm mã đối chuẩn",
        "operationId": "IRAnalytics_GetPeers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPeerItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Đặt lại nhóm mã đối chuẩn",
        "operationId": "IRAnalytics_SavePeers",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPeerSetRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPeerItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/keywords": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Từ khóa giám sát riêng của công ty",
        "operationId": "IRAnalytics_GetKeywords",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRKeywordItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Đặt lại toàn bộ từ khóa giám sát",
        "operationId": "IRAnalytics_SaveKeywords",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRKeywordSetRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRKeywordItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/alert-rules": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Quy tắc cảnh báo tự động",
        "operationId": "IRAnalytics_GetAlertRules",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAlertRuleItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Tạo quy tắc cảnh báo",
        "operationId": "IRAnalytics_CreateAlertRule",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAlertRuleChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAlertRuleItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/alert-rules/{ruleId}": {
      "put": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Sửa quy tắc cảnh báo",
        "operationId": "IRAnalytics_UpdateAlertRule",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "ruleId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAlertRuleChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAlertRuleItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Xóa quy tắc cảnh báo",
        "operationId": "IRAnalytics_DeleteAlertRule",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "ruleId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/alert-events": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Lịch sử cảnh báo đã kích hoạt",
        "operationId": "IRAnalytics_GetAlertEvents",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRAlertEventItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/alert-events/{eventId}/ack": {
      "post": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Xác nhận đã xem cảnh báo",
        "operationId": "IRAnalytics_AckAlertEvent",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/impersonation": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Dấu hiệu tài khoản hoặc nhóm mạo danh công ty",
        "operationId": "IRAnalytics_DetectImpersonation",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRImpersonationItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/export/mentions": {
      "get": {
        "tags": [
          "IRAnalytics"
        ],
        "summary": "Xuất dòng thảo luận ra tệp CSV",
        "operationId": "IRAnalytics_ExportMentions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "sentiment",
            "in": "query",
            "description": " (0 = Unknown, 1 = Negative, 2 = Neutral, 3 = Positive)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3
            ]
          },
          {
            "name": "minSeverity",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/events": {
      "get": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Lịch sự kiện quan hệ nhà đầu tư",
        "operationId": "IREngagement_GetEvents",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "status",
            "in": "query",
            "description": " (0 = Draft, 1 = Published, 2 = Cancelled, 3 = Done)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IREventItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Tạo sự kiện",
        "operationId": "IREngagement_CreateEvent",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IREventChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IREventItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/events/{eventId}": {
      "put": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Sửa sự kiện",
        "operationId": "IREngagement_UpdateEvent",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IREventChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IREventItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Xóa sự kiện",
        "operationId": "IREngagement_DeleteEvent",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/documents": {
      "get": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Thư viện tài liệu IR",
        "operationId": "IREngagement_GetDocuments",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "category",
            "in": "query",
            "description": "1 BCTC, 2 báo cáo thường niên, 3 bản trình bày, 4 quản trị, 5 bản cáo bạch, 6 khác (1 = FinancialReport, 2 = AnnualReport, 3 = Presentation, 4 = Governance, 5 = Prospectus, 6 = Other)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              1,
              2,
              3,
              4,
              5,
              6
            ]
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRDocumentItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Thêm tài liệu",
        "operationId": "IREngagement_CreateDocument",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRDocumentChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRDocumentItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/documents/{documentId}": {
      "put": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Sửa tài liệu",
        "operationId": "IREngagement_UpdateDocument",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "documentId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRDocumentChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRDocumentItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Xóa tài liệu",
        "operationId": "IREngagement_DeleteDocument",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "documentId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/documents/{documentId}/download": {
      "post": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Ghi nhận một lượt tải tài liệu (client gọi khi người dùng tải)",
        "operationId": "IREngagement_TrackDownload",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "documentId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/ir/{symbol}/questions": {
      "get": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Câu hỏi của nhà đầu tư gửi công ty",
        "operationId": "IREngagement_GetQuestions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "status",
            "in": "query",
            "description": " (0 = New, 1 = Answered, 2 = Rejected, 3 = Published)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3
            ]
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRQuestionItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/questions/ask": {
      "post": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Nhà đầu tư gửi câu hỏi cho công ty",
        "operationId": "IREngagement_AskQuestion",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRQuestionRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRQuestionItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/questions/{questionId}/answer": {
      "post": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Công ty trả lời, từ chối hoặc đăng công khai câu trả lời",
        "operationId": "IREngagement_AnswerQuestion",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "questionId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRQuestionAnswerRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRQuestionItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/report-schedules": {
      "get": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Lịch báo cáo tự động",
        "operationId": "IREngagement_GetReportSchedules",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRReportScheduleItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Tạo hoặc sửa lịch báo cáo",
        "operationId": "IREngagement_SaveReportSchedule",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "scheduleId",
            "in": "query",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRReportScheduleRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRReportScheduleItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/reports": {
      "get": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Lịch sử chạy báo cáo",
        "operationId": "IREngagement_GetReportRuns",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRReportRunItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/reports/run": {
      "post": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Chạy báo cáo ngay cho một kỳ",
        "operationId": "IREngagement_RunReport",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "periodStart",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "periodEnd",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRReportRunItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/surveys": {
      "get": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Danh sách khảo sát cổ đông của công ty",
        "operationId": "IREngagement_GetSurveys",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "status",
            "in": "query",
            "description": " (0 = Draft, 1 = PendingReview, 2 = Approved, 3 = Rejected, 4 = Live, 5 = Closed, 6 = Withdrawn)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3,
              4,
              5,
              6
            ]
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRCompanySurveyItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Tạo khảo sát mới. Hệ thống tự gắn khảo sát vào đúng mã của công ty, không cho\r\nbật chế độ chặn màn hình và không cho nhắm đích danh từng nhà đầu tư.",
        "operationId": "IREngagement_CreateSurvey",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanySurveyItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/surveys/{companySurveyId}": {
      "get": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Chi tiết khảo sát kèm bộ câu hỏi",
        "operationId": "IREngagement_GetSurvey",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanySurveyItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Sửa khảo sát khi chưa phát hành",
        "operationId": "IREngagement_UpdateSurvey",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanySurveyItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/surveys/{companySurveyId}/submit": {
      "post": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Trình FireAnt duyệt khảo sát",
        "operationId": "IREngagement_SubmitSurvey",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanySurveyItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/surveys/{companySurveyId}/close": {
      "post": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Đóng khảo sát đang chạy",
        "operationId": "IREngagement_CloseSurvey",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanySurveyItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/surveys/{companySurveyId}/withdraw": {
      "post": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Rút lại khảo sát",
        "operationId": "IREngagement_WithdrawSurvey",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanySurveyItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/surveys/{companySurveyId}/duplicate": {
      "post": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Nhân bản một khảo sát cũ",
        "operationId": "IREngagement_DuplicateSurvey",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanySurveyItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/surveys/{companySurveyId}/statistics": {
      "get": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Thống kê tổng hợp của khảo sát",
        "operationId": "IREngagement_GetSurveyStatistics",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyStatistics"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/surveys/{companySurveyId}/trend": {
      "get": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Chuỗi phản hồi theo ngày",
        "operationId": "IREngagement_GetSurveyTrend",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRSurveyStatsPoint"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/surveys/{companySurveyId}/responses": {
      "get": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Phản hồi khảo sát đã ẩn danh. Công ty đọc được nội dung trả lời nhưng không\r\nbiết ai trả lời: không có tên đăng nhập, địa chỉ IP hay thiết bị.",
        "operationId": "IREngagement_GetSurveyResponses",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRSurveyResponseItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/surveys/{companySurveyId}/questions/{questionId}/text-answers": {
      "get": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Câu trả lời tự luận của một câu hỏi",
        "operationId": "IREngagement_GetSurveyTextAnswers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "questionId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "keyword",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyPagedResult[FireAnt.Api.Models.Surveys.SurveyTextAnswerItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/surveys/{companySurveyId}/invite": {
      "post": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Mời nhà đầu tư tham gia khảo sát qua thông báo đẩy",
        "operationId": "IREngagement_InviteToSurvey",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "title",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "body",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCampaignItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/surveys/{companySurveyId}/export": {
      "get": {
        "tags": [
          "IREngagement"
        ],
        "summary": "Xuất phản hồi khảo sát ra CSV (đã ẩn danh)",
        "operationId": "IREngagement_ExportSurvey",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "companySurveyId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/official-account": {
      "get": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Hồ sơ Official Account",
        "operationId": "IROfficialAccount_GetAccount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaAccount"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Cập nhật hồ sơ Official Account",
        "operationId": "IROfficialAccount_UpdateAccount",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaAccountChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaAccount"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/official-account/claim": {
      "post": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Đăng ký Official Account. Phải đính kèm giấy ủy quyền có dấu công ty;\r\nFireAnt xác minh thủ công trước khi tài khoản được dùng.",
        "operationId": "IROfficialAccount_ClaimAccount",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaAccountChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaAccount"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/oa/posts": {
      "get": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Danh sách bài của Official Account",
        "operationId": "IROfficialAccount_GetPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "status",
            "in": "query",
            "description": "0 nháp, 1 chờ duyệt, 2 đã duyệt, 3 đã lên lịch, 4 đã đăng, 5 bị từ chối, 6 lỗi (0 = Draft, 1 = PendingApproval, 2 = Approved, 3 = Scheduled, 4 = Published, 5 = Rejected, 6 = Failed)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3,
              4,
              5,
              6
            ]
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IROaPostItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Soạn bài mới (trạng thái nháp)",
        "operationId": "IROfficialAccount_CreatePost",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaPostChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaPostItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/oa/posts/{oaPostId}": {
      "get": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Chi tiết bài kèm hiệu quả theo ngày",
        "operationId": "IROfficialAccount_GetPost",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "oaPostId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaPostItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Sửa bài chưa đăng",
        "operationId": "IROfficialAccount_UpdatePost",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "oaPostId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaPostChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaPostItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Xóa bài chưa đăng",
        "operationId": "IROfficialAccount_DeletePost",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "oaPostId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/oa/posts/{oaPostId}/status": {
      "put": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Chuyển trạng thái trong quy trình duyệt: trình duyệt, duyệt, từ chối, hẹn giờ hoặc đăng.\r\nDuyệt và từ chối cần vai trò Quản trị trở lên.",
        "operationId": "IROfficialAccount_ChangePostStatus",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "oaPostId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaPostStatusRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaPostItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/oa/templates": {
      "get": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Mẫu công bố dựng sẵn",
        "operationId": "IROfficialAccount_GetTemplates",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaTemplateItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/oa/comments": {
      "get": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Lịch sử kiểm duyệt bình luận dưới bài của công ty",
        "operationId": "IROfficialAccount_GetCommentActions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "postId",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaCommentActionItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/oa/posts/{postId}/comments": {
      "post": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Ẩn, trả lời, ghim hoặc báo cáo một bình luận dưới bài của công ty",
        "operationId": "IROfficialAccount_ModerateComment",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "postId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaCommentActionRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaCommentActionItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/campaigns": {
      "get": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Danh sách chiến dịch thông báo",
        "operationId": "IROfficialAccount_GetCampaigns",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRCampaignItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Tạo chiến dịch thông báo",
        "operationId": "IROfficialAccount_CreateCampaign",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCampaignChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCampaignItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/campaigns/reach": {
      "get": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Số người thực sự nhận được thông báo. Luôn nhỏ hơn tổng số người theo dõi mã\r\nvì chỉ tính người còn thiết bị hoạt động trong 180 ngày.",
        "operationId": "IROfficialAccount_GetCampaignReach",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "targetType",
            "in": "query",
            "description": " (1 = SymbolFollowers, 2 = OaFollowers, 3 = EventRegistrants)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              1,
              2,
              3
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCampaignReach"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/campaigns/{campaignId}/send": {
      "post": {
        "tags": [
          "IROfficialAccount"
        ],
        "summary": "Gửi chiến dịch thông báo ngay",
        "operationId": "IROfficialAccount_SendCampaign",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "campaignId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCampaignItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page": {
      "get": {
        "tags": [
          "IRPage"
        ],
        "summary": "Trạng thái trang: bản nháp, bản đang hiện, bản chờ duyệt, tính năng gói",
        "operationId": "IRPage_GetState",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageState"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/draft": {
      "put": {
        "tags": [
          "IRPage"
        ],
        "summary": "Lưu bản nháp. Gửi kèm expectedRevision để không ghi đè thay đổi của người khác (409).",
        "operationId": "IRPage_SaveDraft",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageDraftRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageVersionItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/preview": {
      "post": {
        "tags": [
          "IRPage"
        ],
        "summary": "Dựng gói trang từ nội dung chưa lưu để xem trước như nhà đầu tư thấy",
        "operationId": "IRPage_Preview",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagePreviewRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageBundle"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/publish": {
      "post": {
        "tags": [
          "IRPage"
        ],
        "summary": "Xuất bản bản nháp. Lần đầu, khối rủi ro, link ra ngoài mới hoặc tab riêng thì gửi FireAnt duyệt\r\n(outcome = pending_review), còn lại lên trang ngay hoặc theo giờ hẹn.",
        "operationId": "IRPage_Publish",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagePublishRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagePublishResult"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/versions": {
      "get": {
        "tags": [
          "IRPage"
        ],
        "summary": "Lịch sử phiên bản",
        "operationId": "IRPage_GetVersions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageVersionItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/versions/{versionId}": {
      "get": {
        "tags": [
          "IRPage"
        ],
        "summary": "Một phiên bản kèm nội dung",
        "operationId": "IRPage_GetVersion",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "versionId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageVersionItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/versions/{versionId}/restore": {
      "post": {
        "tags": [
          "IRPage"
        ],
        "summary": "Chép nội dung phiên bản cũ vào bản nháp",
        "operationId": "IRPage_Restore",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "versionId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageVersionItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/versions/{versionId}/withdraw": {
      "post": {
        "tags": [
          "IRPage"
        ],
        "summary": "Rút bản đang chờ duyệt / hẹn giờ về bản nháp",
        "operationId": "IRPage_Withdraw",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "versionId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageVersionItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/enabled": {
      "post": {
        "tags": [
          "IRPage"
        ],
        "summary": "Tắt / bật trang đã xuất bản (tắt thì mã không còn Trang IR cho tới khi bật lại)",
        "operationId": "IRPage_SetEnabled",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageEnableRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/domain": {
      "post": {
        "tags": [
          "IRPage"
        ],
        "summary": "Đăng ký tên miền riêng (ví dụ ir.tencongty.com.vn); bỏ trống để gỡ",
        "operationId": "IRPage_RequestDomain",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageDomainRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/media": {
      "get": {
        "tags": [
          "IRPage"
        ],
        "summary": "Thư viện ảnh / PDF của trang",
        "operationId": "IRPage_GetMedia",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "kind",
            "in": "query",
            "description": "1 ảnh, 2 PDF (1 = Image, 2 = Pdf)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              1,
              2
            ]
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRMediaAsset]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "IRPage"
        ],
        "summary": "Tải ảnh (jpg, png, webp, gif tối đa 8 MB) hoặc PDF (tối đa 50 MB) lên thư viện, multipart/form-data\r\nvới một tệp và tuỳ chọn trường altVi, altEn. Trả về tệp kèm ref \"media:&lt;id&gt;\" để gắn vào trang.",
        "operationId": "IRPage_UploadMedia",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRMediaAsset"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/media/{assetId}": {
      "put": {
        "tags": [
          "IRPage"
        ],
        "summary": "Sửa mô tả ảnh (alt)",
        "operationId": "IRPage_UpdateMedia",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRMediaUpdateRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRMediaAsset"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "IRPage"
        ],
        "summary": "Xoá tệp khỏi thư viện (trang đã xuất bản vẫn giữ đường dẫn cũ)",
        "operationId": "IRPage_DeleteMedia",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "assetId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/messages": {
      "get": {
        "tags": [
          "IRPage"
        ],
        "summary": "Tin nhắn từ form liên hệ trên trang",
        "operationId": "IRPage_GetMessages",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "status",
            "in": "query",
            "description": "0 mới, 1 đã đọc, 2 đã trả lời, 3 lưu trữ",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRContactMessagePage"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/messages/{messageId}/status": {
      "post": {
        "tags": [
          "IRPage"
        ],
        "summary": "Đổi trạng thái tin nhắn",
        "operationId": "IRPage_UpdateMessage",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "messageId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRContactStatusRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/stats": {
      "get": {
        "tags": [
          "IRPage"
        ],
        "summary": "Lượt xem theo ngày / nền tảng / tab, người theo dõi, hỏi đáp, lượt tải tài liệu",
        "operationId": "IRPage_GetStats",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageStats"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/checklist": {
      "get": {
        "tags": [
          "IRPage"
        ],
        "summary": "Dữ liệu cho bảng kiểm hoàn thiện trang (tài liệu, hỏi đáp tồn, sự kiện sắp tới, OA)",
        "operationId": "IRPage_GetChecklist",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageChecklistContext"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/ai/translate": {
      "post": {
        "tags": [
          "IRPage"
        ],
        "summary": "Dịch nháp các đoạn chữ sang tiếng Anh (hoặc to = \"vi\") bằng AI; doanh nghiệp duyệt lại trước khi lưu",
        "operationId": "IRPage_Translate",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAiTranslateRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAiTranslateResult"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/page/ai/summary": {
      "post": {
        "tags": [
          "IRPage"
        ],
        "summary": "Bản nháp tóm tắt kết quả kinh doanh một kỳ (khối earnings_summary) bằng AI",
        "operationId": "IRPage_Summarize",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAiSummaryRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAiSummaryResult"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/companies": {
      "get": {
        "tags": [
          "IRPortal"
        ],
        "summary": "Danh sách công ty người dùng có quyền truy cập, kèm vai trò, gói dịch vụ và hạn mức",
        "operationId": "IRPortal_GetMyCompanies",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanyItem"
              }
            }
          },
          "401": {
            "description": "Chưa đăng nhập"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/companies/{symbol}": {
      "get": {
        "tags": [
          "IRPortal"
        ],
        "summary": "Hồ sơ IR của một công ty",
        "operationId": "IRPortal_GetCompany",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanyDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "IRPortal"
        ],
        "summary": "Cập nhật hồ sơ IR (vai trò Quản trị trở lên)",
        "operationId": "IRPortal_UpdateCompany",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanyChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanyDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/users": {
      "get": {
        "tags": [
          "IRPortal"
        ],
        "summary": "Người dùng trong workspace của công ty",
        "operationId": "IRPortal_GetUsers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanyUserItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "IRPortal"
        ],
        "summary": "Thêm người dùng hoặc đổi vai trò",
        "operationId": "IRPortal_SaveUser",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanyUserChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/users/{userName}": {
      "delete": {
        "tags": [
          "IRPortal"
        ],
        "summary": "Gỡ người dùng khỏi workspace",
        "operationId": "IRPortal_RemoveUser",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "userName",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/invitations": {
      "get": {
        "tags": [
          "IRPortal"
        ],
        "summary": "Danh sách lời mời",
        "operationId": "IRPortal_GetInvitations",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "status",
            "in": "query",
            "description": " (0 = Pending, 1 = Accepted, 2 = Revoked, 3 = Expired)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRInvitationItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "IRPortal"
        ],
        "summary": "Mời người dùng vào workspace",
        "operationId": "IRPortal_CreateInvitation",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRInvitationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRInvitationItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/invitations/{invitationId}": {
      "delete": {
        "tags": [
          "IRPortal"
        ],
        "summary": "Thu hồi lời mời",
        "operationId": "IRPortal_RevokeInvitation",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "invitationId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/invitations/{token}": {
      "get": {
        "tags": [
          "IRPortal"
        ],
        "summary": "Xem thông tin lời mời theo mã",
        "operationId": "IRPortal_GetInvitation",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRInvitationItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/invitations/{token}/accept": {
      "post": {
        "tags": [
          "IRPortal"
        ],
        "summary": "Chấp nhận lời mời tham gia workspace",
        "operationId": "IRPortal_AcceptInvitation",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "token",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanyItem"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/quota": {
      "get": {
        "tags": [
          "IRPortal"
        ],
        "summary": "Hạn mức của gói dịch vụ đã dùng trong kỳ",
        "operationId": "IRPortal_GetQuota",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRQuotaItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/audit": {
      "get": {
        "tags": [
          "IRPortal"
        ],
        "summary": "Nhật ký thao tác trong workspace",
        "operationId": "IRPortal_GetAuditLogs",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "userName",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "action",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRAuditLogItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/public/{symbol}/page": {
      "get": {
        "tags": [
          "IRPublicPage"
        ],
        "summary": "Gói trang IR: tài liệu trang + dữ liệu FireAnt các khối cần + số liệu sống + media + tính năng.\r\nChỉ mã có trang chính thức đang xuất bản từ IR Portal; mã khác (kể cả trang bị tạm ẩn / tắt) trả 404.",
        "operationId": "IRPublicPage_GetPage",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "vi (mặc định) hoặc en",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageBundle"
            }
          }
        }
      }
    },
    "/ir/public/{symbol}/summary": {
      "get": {
        "tags": [
          "IRPublicPage"
        ],
        "summary": "Tóm tắt cho tab / nút \"Quan hệ cổ đông\" trên trang mã chứng khoán",
        "operationId": "IRPublicPage_GetSummary",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageSummary"
            }
          }
        }
      }
    },
    "/ir/public/pages": {
      "get": {
        "tags": [
          "IRPublicPage"
        ],
        "summary": "Danh sách trang chính thức đang hiện (sitemap của IR Site)",
        "operationId": "IRPublicPage_GetPages",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPublicPageListItem"
              }
            }
          }
        }
      }
    },
    "/ir/public/domain": {
      "get": {
        "tags": [
          "IRPublicPage"
        ],
        "summary": "Tên miền riêng đã duyệt → mã chứng khoán (IR Site dùng khi nhận request theo tên miền)",
        "operationId": "IRPublicPage_GetByDomain",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "host",
            "in": "query",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/ir/public/{symbol}/questions": {
      "get": {
        "tags": [
          "IRPublicPage"
        ],
        "summary": "Câu hỏi công khai (đã trả lời và đang chờ), sắp theo quan tâm hoặc mới nhất",
        "operationId": "IRPublicPage_GetQuestions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "sort",
            "in": "query",
            "description": "hot | new",
            "required": false,
            "type": "string"
          },
          {
            "name": "context",
            "in": "query",
            "description": "Chủ đề, ví dụ agm:2027",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "count",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRBundleQuestions"
            }
          }
        }
      },
      "post": {
        "tags": [
          "IRPublicPage"
        ],
        "summary": "Đặt câu hỏi cho doanh nghiệp (có thể ẩn danh với doanh nghiệp)",
        "operationId": "IRPublicPage_Ask",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPublicAskRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRBundleQuestion"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/public/{symbol}/track": {
      "post": {
        "tags": [
          "IRPublicPage"
        ],
        "summary": "Ghi nhận lượt xem (client gửi firstOfDay = true ở lần mở đầu tiên trong ngày)",
        "operationId": "IRPublicPage_Track",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTrackRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/ir/public/{symbol}/me": {
      "get": {
        "tags": [
          "IRPublicPage"
        ],
        "summary": "Trạng thái của người xem: đang theo dõi, câu đã bình chọn, sự kiện đã đăng ký, câu hỏi của tôi",
        "operationId": "IRPublicPage_GetViewerState",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRViewerState"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/public/questions/{questionId}/vote": {
      "post": {
        "tags": [
          "IRPublicPage"
        ],
        "summary": "\"Tôi cũng muốn biết\": bình chọn / bỏ bình chọn một câu hỏi",
        "operationId": "IRPublicPage_Vote",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "questionId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRVoteRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRVoteResult"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/public/{symbol}/follow": {
      "post": {
        "tags": [
          "IRPublicPage"
        ],
        "summary": "Theo dõi / bỏ theo dõi trang, chọn loại thông báo",
        "operationId": "IRPublicPage_Follow",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRFollowRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRFollowResult"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/public/events/{eventId}/register": {
      "post": {
        "tags": [
          "IRPublicPage"
        ],
        "summary": "Đăng ký / huỷ đăng ký tham dự sự kiện",
        "operationId": "IRPublicPage_RegisterEvent",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "eventId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IREventRegisterRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IREventRegisterResult"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/public/{symbol}/contact": {
      "post": {
        "tags": [
          "IRPublicPage"
        ],
        "summary": "Gửi tin nhắn cho bộ phận IR của doanh nghiệp",
        "operationId": "IRPublicPage_Contact",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRContactRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/public/{symbol}/claim": {
      "post": {
        "tags": [
          "IRPublicPage"
        ],
        "summary": "Doanh nghiệp đề nghị mở / nhận quản lý Trang IR (FireAnt liên hệ xác minh)",
        "operationId": "IRPublicPage_Claim",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageClaimRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/tickets": {
      "get": {
        "tags": [
          "IRSupport"
        ],
        "summary": "Danh sách yêu cầu hỗ trợ của công ty",
        "operationId": "IRSupport_GetTickets",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "status",
            "in": "query",
            "description": "0 mới, 1 đã phân loại, 2 đang xử lý, 3 chờ công ty, 4 đã xử lý, 5 từ chối, 6 đã đóng (0 = New, 1 = Triaged, 2 = InProgress, 3 = WaitingCustomer, 4 = Resolved, 5 = Rejected, 6 = Closed)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3,
              4,
              5,
              6
            ]
          },
          {
            "name": "onlyOpen",
            "in": "query",
            "description": "Chỉ lấy yêu cầu chưa kết thúc",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "type",
            "in": "query",
            "description": " (1 = NegativeContent, 2 = Rumor, 3 = Impersonation, 4 = DataCorrection, 5 = OaSupport, 6 = Advertising, 7 = Other)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              1,
              2,
              3,
              4,
              5,
              6,
              7
            ]
          },
          {
            "name": "keyword",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRTicketItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "IRSupport"
        ],
        "summary": "Tạo yêu cầu hỗ trợ",
        "operationId": "IRSupport_CreateTicket",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/tickets/{code}": {
      "get": {
        "tags": [
          "IRSupport"
        ],
        "summary": "Chi tiết yêu cầu kèm bằng chứng, trao đổi và nhật ký hành động",
        "operationId": "IRSupport_GetTicket",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "code",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/tickets/from-mention/{mentionId}": {
      "post": {
        "tags": [
          "IRSupport"
        ],
        "summary": "Báo cáo một nội dung chỉ bằng một thao tác từ dòng thảo luận.\r\nNội dung được đóng băng làm bằng chứng nên vẫn còn nguyên nếu tác giả sửa hoặc xóa bài.",
        "operationId": "IRSupport_CreateTicketFromMention",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "mentionId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64"
          },
          {
            "name": "type",
            "in": "query",
            "description": "1 nội dung tiêu cực, 2 tin đồn, 3 mạo danh, 4 sai dữ liệu (1 = NegativeContent, 2 = Rumor, 3 = Impersonation, 4 = DataCorrection, 5 = OaSupport, 6 = Advertising, 7 = Other)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              1,
              2,
              3,
              4,
              5,
              6,
              7
            ]
          },
          {
            "name": "priority",
            "in": "query",
            "description": "1 thấp, 2 trung bình, 3 cao, 4 khẩn (1 = Low, 2 = Normal, 3 = High, 4 = Urgent)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              1,
              2,
              3,
              4
            ]
          },
          {
            "name": "description",
            "in": "body",
            "required": false,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/tickets/{code}/messages": {
      "post": {
        "tags": [
          "IRSupport"
        ],
        "summary": "Gửi tin nhắn trong yêu cầu hỗ trợ",
        "operationId": "IRSupport_AddMessage",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "code",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketMessageRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/tickets/{code}/close": {
      "post": {
        "tags": [
          "IRSupport"
        ],
        "summary": "Đóng yêu cầu",
        "operationId": "IRSupport_CloseTicket",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "code",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/tickets/{code}/reopen": {
      "post": {
        "tags": [
          "IRSupport"
        ],
        "summary": "Mở lại yêu cầu đã đóng",
        "operationId": "IRSupport_ReopenTicket",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "code",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/ir/{symbol}/tickets/{code}/rate": {
      "post": {
        "tags": [
          "IRSupport"
        ],
        "summary": "Đánh giá chất lượng xử lý",
        "operationId": "IRSupport_RateTicket",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "code",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketRatingRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/macro-data/types": {
      "get": {
        "tags": [
          "Macro"
        ],
        "summary": "Lấy danh sách các loại dữ liệu vĩ mô",
        "operationId": "Macro_GetMacroIndicatorTypes",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Macro.MacroIndicatorType"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-data/{type}/info": {
      "get": {
        "tags": [
          "Macro"
        ],
        "summary": "Lấy dữ liệu vĩ mô theo loại",
        "operationId": "Macro_GetMacroIndicatorInfo",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Macro.MacroIndicatorInfo"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/info": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Tổng quan kho dữ liệu: phiên bản dữ liệu (tăng sau mỗi lượt nạp), lần nạp gần nhất, số nguồn / chỉ tiêu / chuỗi / quan sát",
        "operationId": "MacroEconomic_GetInfo",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Tổng quan kho",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroDataInfo"
            }
          },
          "503": {
            "description": "Máy chủ chưa cấu hình kết nối kho dữ liệu vĩ mô"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/dictionary": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Từ điển mã -&gt; nhãn vi/en: tần suất, giai đoạn công bố, cách cộng dồn, loại giá, thước đo, đơn vị, thương mại,\r\nchỉ số tự tính, khái niệm, bộ phân loại, trạng thái giá trị",
        "operationId": "MacroEconomic_GetDictionary",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroDictionary"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/sources": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Danh sách nguồn dữ liệu kèm số chỉ tiêu, số chuỗi, khoảng thời gian và lần nạp gần nhất",
        "operationId": "MacroEconomic_GetSources",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroSource"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/indicators": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Danh sách chỉ tiêu (lọc theo nguồn, từ khoá)",
        "operationId": "MacroEconomic_GetIndicators",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "source",
            "in": "query",
            "description": "Mã nguồn (nso, customs, sbv, imf, imf_weo, worldbank, vietcombank, treasury, mard, petrolimex, usda)",
            "required": false,
            "type": "string"
          },
          {
            "name": "search",
            "in": "query",
            "description": "Từ khoá trên mã / tên chỉ tiêu / tên nguồn (không dấu hoặc có dấu)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Chỉ tiêu, theo nguồn",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroIndicator"
              }
            }
          },
          "400": {
            "description": "Tham số không hợp lệ"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/indicators/{source}/{indicator}": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Chi tiết chỉ tiêu: thống kê theo tần suất, các thước đo và giá trị của từng chiều lọc (dùng để dựng bộ lọc cho GET series)",
        "operationId": "MacroEconomic_GetIndicator",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "source",
            "in": "path",
            "description": "Mã nguồn",
            "required": true,
            "type": "string"
          },
          {
            "name": "indicator",
            "in": "path",
            "description": "Mã chỉ tiêu (cpi, gdp, export...)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Chi tiết chỉ tiêu",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroIndicatorDetail"
            }
          },
          "404": {
            "description": "Không có chỉ tiêu này (hoặc đã bị tắt)"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/indicators/{source}/{indicator}/items": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Cây mục (item) của chỉ tiêu: ngành GDP, nhóm hàng CPI, mặt hàng xuất nhập khẩu, tỉnh thành...",
        "operationId": "MacroEconomic_GetIndicatorItems",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "source",
            "in": "path",
            "description": "Mã nguồn",
            "required": true,
            "type": "string"
          },
          {
            "name": "indicator",
            "in": "path",
            "description": "Mã chỉ tiêu",
            "required": true,
            "type": "string"
          },
          {
            "name": "parent",
            "in": "query",
            "description": "Chỉ lấy con trực tiếp của mục này (\"none\" = chỉ mục gốc); bỏ trống = toàn bộ cây",
            "required": false,
            "type": "string"
          },
          {
            "name": "search",
            "in": "query",
            "description": "Từ khoá trên mã / tên mục",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Mục, cấp thấp trước",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroIndicatorItem"
              }
            }
          },
          "404": {
            "description": "Không có chỉ tiêu này"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/areas": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Địa bàn / quốc gia / khu vực - giá trị cho tham số area, partner của GET series",
        "operationId": "MacroEconomic_GetAreas",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Loại: world | wregion | wsubregion | egroup | nation | country | province",
            "required": false,
            "type": "string"
          },
          {
            "name": "search",
            "in": "query",
            "description": "Từ khoá trên mã / tên",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroArea"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/updates": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Dữ liệu mới cập nhật: kỳ mới nhất về kho của từng bộ dữ liệu (nguồn × chỉ tiêu × tần suất), mới về trước",
        "operationId": "MacroEconomic_GetUpdates",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "since",
            "in": "query",
            "description": "Chỉ lấy kỳ về kho từ ngày này",
            "required": false,
            "type": "string"
          },
          {
            "name": "days",
            "in": "query",
            "description": "Hoặc: trong N ngày gần đây (1 - 3650), dùng khi không có since",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "source",
            "in": "query",
            "description": "Mã nguồn",
            "required": false,
            "type": "string"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số dòng tối đa (mặc định 50, tối đa 500)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroDataUpdate"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/series": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Tìm chuỗi số liệu theo các chiều và từ khoá, kèm giá trị mới nhất / kỳ trước của từng chuỗi",
        "description": "Mọi tham số tuỳ chọn. Giá trị lọc lấy từ GET indicators/{source}/{indicator} (measures, dimensions) và GET items, areas.\r\n\"none\" ở item, parentItem, priceBasis, basePeriod, area, partner, concept, tradeFlow, tradeScope, tradeBasis = chiều đó trống\r\n(vd. partner=none: chuỗi tổng, không theo đối tác). search: mọi từ phải khớp nhãn của chuỗi (chỉ tiêu, mục, mục cha, thước đo,\r\nđơn vị, địa bàn, đối tác, khái niệm); từ có dấu so phân biệt dấu (\"dầu\" khác \"đầu\"), từ không dấu so bỏ dấu.\r\nLọc theo các chiều (không từ khoá) nhanh (dưới 0,3 giây). Có search thì lần đầu mất 2,5 - 4 giây trên máy chủ hiện tại\r\n(kể cả khi đã có source), các lần sau lấy từ cache; client nên debounce ô tìm kiếm.",
        "operationId": "MacroEconomic_SearchSeries",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "source",
            "in": "query",
            "description": "Mã nguồn (nso, customs, sbv, imf...)",
            "required": false,
            "type": "string"
          },
          {
            "name": "indicator",
            "in": "query",
            "description": "Mã chỉ tiêu (cpi, gdp, export...)",
            "required": false,
            "type": "string"
          },
          {
            "name": "item",
            "in": "query",
            "description": "Mã mục",
            "required": false,
            "type": "string"
          },
          {
            "name": "parentItem",
            "in": "query",
            "description": "Mã mục cha (\"none\" = chỉ mục gốc)",
            "required": false,
            "type": "string"
          },
          {
            "name": "measure",
            "in": "query",
            "description": "Mã thước đo theo cột nguồn",
            "required": false,
            "type": "string"
          },
          {
            "name": "measureRole",
            "in": "query",
            "description": "Vai trò thước đo (level, index_yoy, yoy, mom...)",
            "required": false,
            "type": "string"
          },
          {
            "name": "measureClass",
            "in": "query",
            "description": "Loại thước đo: level | index | rate | share",
            "required": false,
            "type": "string"
          },
          {
            "name": "unit",
            "in": "query",
            "description": "Mã đơn vị",
            "required": false,
            "type": "string"
          },
          {
            "name": "frequency",
            "in": "query",
            "description": "Tần suất: A | MY | H | Q | M | SM | D",
            "required": false,
            "type": "string"
          },
          {
            "name": "timeAggregation",
            "in": "query",
            "description": "Cách cộng dồn: period | month | quarter | year | ytd | point_in_time...",
            "required": false,
            "type": "string"
          },
          {
            "name": "priceBasis",
            "in": "query",
            "description": "Loại giá: current | constant",
            "required": false,
            "type": "string"
          },
          {
            "name": "basePeriod",
            "in": "query",
            "description": "Kỳ gốc (2019, 2024...)",
            "required": false,
            "type": "string"
          },
          {
            "name": "area",
            "in": "query",
            "description": "Mã địa bàn (VN, mã tỉnh, mã nước...)",
            "required": false,
            "type": "string"
          },
          {
            "name": "partner",
            "in": "query",
            "description": "Mã đối tác (nước / khu vực)",
            "required": false,
            "type": "string"
          },
          {
            "name": "concept",
            "in": "query",
            "description": "Mã khái niệm",
            "required": false,
            "type": "string"
          },
          {
            "name": "tradeFlow",
            "in": "query",
            "description": "Dòng thương mại: export | import | balance",
            "required": false,
            "type": "string"
          },
          {
            "name": "tradeScope",
            "in": "query",
            "description": "Phạm vi thương mại: total | fdi | domestic | province",
            "required": false,
            "type": "string"
          },
          {
            "name": "tradeBasis",
            "in": "query",
            "description": "Điều kiện giá: fob | cif",
            "required": false,
            "type": "string"
          },
          {
            "name": "seasonallyAdjusted",
            "in": "query",
            "description": "Hiệu chỉnh mùa vụ: true | false",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "activeSince",
            "in": "query",
            "description": "Chỉ chuỗi còn số liệu từ ngày này (ẩn chuỗi đã ngừng cập nhật)",
            "required": false,
            "type": "string"
          },
          {
            "name": "search",
            "in": "query",
            "description": "Từ khoá (tối đa 100 ký tự)",
            "required": false,
            "type": "string"
          },
          {
            "name": "orderBy",
            "in": "query",
            "description": "default (nguồn, chỉ tiêu, cấp mục, kỳ cuối mới trước) | latest (kỳ cuối mới nhất trước) | name (tên mục)",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bắt đầu (mặc định 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số chuỗi mỗi trang (mặc định 50, tối đa 200)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "{ total, offset, limit, items: [chuỗi kèm latest] }",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroSeriesPagedResult"
            }
          },
          "400": {
            "description": "Tham số không hợp lệ"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/series/batch": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Metadata của nhiều chuỗi theo id / uid (giữ thứ tự gửi lên, bỏ qua khoá không tồn tại)",
        "operationId": "MacroEconomic_GetSeriesList",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "ids",
            "in": "query",
            "description": "Danh sách id hoặc uid, phân cách dấu phẩy (tối đa 100)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroSeries"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/series/{key}": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Metadata một chuỗi kèm giá trị mới nhất",
        "operationId": "MacroEconomic_GetSeries",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "description": "ID chuỗi hoặc uid (64 ký tự hex)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "404": {
            "description": "Không có chuỗi này (hoặc đã bị tắt)"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/series/{key}/data": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Quan sát hiện hành của một chuỗi (bản công bố mới nhất của mỗi kỳ), kỳ tăng dần, kèm metadata chuỗi",
        "operationId": "MacroEconomic_GetSeriesData",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "description": "ID chuỗi hoặc uid",
            "required": true,
            "type": "string"
          },
          {
            "name": "from",
            "in": "query",
            "description": "Từ kỳ (yyyy, yyyy-MM, yyyy-MM-dd) - lấy kỳ kết thúc từ ngày này",
            "required": false,
            "type": "string"
          },
          {
            "name": "to",
            "in": "query",
            "description": "Đến kỳ (yyyy = hết năm, yyyy-MM = hết tháng, yyyy-MM-dd)",
            "required": false,
            "type": "string"
          },
          {
            "name": "latest",
            "in": "query",
            "description": "Chỉ lấy N kỳ mới nhất (1 - 10000)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "includeMissing",
            "in": "query",
            "description": "Trả cả kỳ không có số (value null, status missing / suppressed)",
            "required": false,
            "type": "boolean"
          }
        ],
        "responses": {
          "404": {
            "description": "Không có chuỗi này"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/series/{key}/vintages": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Lịch sử điều chỉnh của một chuỗi: mọi bản công bố (ước tính, sơ bộ, chính thức...) của từng kỳ",
        "operationId": "MacroEconomic_GetVintages",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "description": "ID chuỗi hoặc uid",
            "required": true,
            "type": "string"
          },
          {
            "name": "from",
            "in": "query",
            "description": "Từ kỳ",
            "required": false,
            "type": "string"
          },
          {
            "name": "to",
            "in": "query",
            "description": "Đến kỳ",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "404": {
            "description": "Không có chuỗi này"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/series/{key}/derived": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Chỉ số kho tự tính của một chuỗi (tăng trưởng so cùng kỳ / kỳ trước - hiện có cho xuất, nhập khẩu tháng của Hải quan)",
        "operationId": "MacroEconomic_GetDerived",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "key",
            "in": "path",
            "description": "ID chuỗi hoặc uid",
            "required": true,
            "type": "string"
          },
          {
            "name": "metric",
            "in": "query",
            "description": "yoy_pct | mom_pct | qoq_pct (bỏ trống = tất cả)",
            "required": false,
            "type": "string"
          },
          {
            "name": "from",
            "in": "query",
            "description": "Từ kỳ",
            "required": false,
            "type": "string"
          },
          {
            "name": "to",
            "in": "query",
            "description": "Đến kỳ",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "404": {
            "description": "Không có chuỗi này"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/data": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Quan sát của nhiều chuỗi trong một lần gọi (biểu đồ so sánh, Excel), giữ thứ tự gửi lên, bỏ qua khoá không tồn tại",
        "operationId": "MacroEconomic_GetData",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "series",
            "in": "query",
            "description": "Danh sách id hoặc uid, phân cách dấu phẩy (tối đa 50)",
            "required": true,
            "type": "string"
          },
          {
            "name": "from",
            "in": "query",
            "description": "Từ kỳ",
            "required": false,
            "type": "string"
          },
          {
            "name": "to",
            "in": "query",
            "description": "Đến kỳ",
            "required": false,
            "type": "string"
          },
          {
            "name": "latest",
            "in": "query",
            "description": "Chỉ lấy N kỳ mới nhất của mỗi chuỗi",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "includeMissing",
            "in": "query",
            "description": "Trả cả kỳ không có số",
            "required": false,
            "type": "boolean"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroSeriesData"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/events": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Sự kiện vĩ mô (chính sách tiền tệ, lạm phát, địa chính trị, hàng hoá...), mới trước, kèm kênh tác động",
        "operationId": "MacroEconomic_GetEvents",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "description": "Từ ngày (yyyy, yyyy-MM, yyyy-MM-dd)",
            "required": false,
            "type": "string"
          },
          {
            "name": "to",
            "in": "query",
            "description": "Đến ngày",
            "required": false,
            "type": "string"
          },
          {
            "name": "category",
            "in": "query",
            "description": "Mã nhóm sự kiện (xem events/categories)",
            "required": false,
            "type": "string"
          },
          {
            "name": "scope",
            "in": "query",
            "description": "Phạm vi: global | vietnam",
            "required": false,
            "type": "string"
          },
          {
            "name": "exposure",
            "in": "query",
            "description": "Mức ảnh hưởng tới Việt Nam: high | medium | low",
            "required": false,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại: policy | data | shock | structural",
            "required": false,
            "type": "string"
          },
          {
            "name": "channel",
            "in": "query",
            "description": "Kênh tác động (inflation, usd, rates, energy...)",
            "required": false,
            "type": "string"
          },
          {
            "name": "minImpact",
            "in": "query",
            "description": "Điểm tác động tối thiểu (1 - 5)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "search",
            "in": "query",
            "description": "Từ khoá trong tiêu đề / tóm tắt",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bắt đầu (mặc định 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số sự kiện mỗi trang (mặc định 20, tối đa 100)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "{ total, offset, limit, items }",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroEventPagedResult"
            }
          },
          "400": {
            "description": "Tham số không hợp lệ"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/events/categories": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Nhóm sự kiện (kèm định nghĩa, cơ chế truyền dẫn tới Việt Nam) và kênh tác động",
        "operationId": "MacroEconomic_GetEventCategories",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroEventCategories"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/events/by-uid": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Chi tiết sự kiện theo uid (uid có dấu \":\" nên truyền qua query string)",
        "operationId": "MacroEconomic_GetEventByUid",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "uid",
            "in": "query",
            "description": "Mã ổn định của sự kiện, vd. 2026-09-21:ftse-vietnam-upgrade-effective",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "404": {
            "description": "Không có sự kiện này"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/events/{id}": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Chi tiết sự kiện: kênh tác động, nguồn tham khảo, sự kiện cha / con",
        "operationId": "MacroEconomic_GetEvent",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID sự kiện",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "404": {
            "description": "Không có sự kiện này"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/omo/auctions": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Kết quả các phiên đấu thầu OMO theo kỳ hạn (khối lượng tỷ đồng, lãi suất %/năm)",
        "operationId": "MacroEconomic_GetOmoAuctions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "description": "Từ ngày",
            "required": false,
            "type": "string"
          },
          {
            "name": "to",
            "in": "query",
            "description": "Đến ngày",
            "required": false,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại giao dịch (mua_ky_han)",
            "required": false,
            "type": "string"
          },
          {
            "name": "tenor",
            "in": "query",
            "description": "Kỳ hạn (ngày)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroOmoAuction"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/omo/positions": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Trạng thái OMO theo ngày lịch: bơm mới, đáo hạn, bơm ròng, dư nợ cuối ngày, luỹ kế, lãi suất bình quân sổ dư nợ",
        "operationId": "MacroEconomic_GetOmoPositions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "description": "Từ ngày",
            "required": false,
            "type": "string"
          },
          {
            "name": "to",
            "in": "query",
            "description": "Đến ngày (có thể là ngày tương lai để xem lịch đáo hạn)",
            "required": false,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại giao dịch",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroOmoPosition"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/omo/positions/by-tenor": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Trạng thái OMO theo ngày × kỳ hạn (dư nợ đang nằm ở kỳ hạn nào)",
        "operationId": "MacroEconomic_GetOmoPositionsByTenor",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "from",
            "in": "query",
            "description": "Từ ngày",
            "required": false,
            "type": "string"
          },
          {
            "name": "to",
            "in": "query",
            "description": "Đến ngày",
            "required": false,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại giao dịch",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroOmoTenorPosition"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/macro-economic/omo/maturity-ladder": {
      "get": {
        "tags": [
          "MacroEconomic"
        ],
        "summary": "Bậc thang đáo hạn: tại một ngày, khối lượng đang lưu hành sẽ đến hạn vào những ngày nào",
        "operationId": "MacroEconomic_GetOmoLadder",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "date",
            "in": "query",
            "description": "Ngày xem (mặc định hôm nay)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroOmoLadderItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/me/push-tokens": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Đăng ký token để push",
        "operationId": "Me_RegisterPushToken",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.PushTokenUpdateRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/recent-symbols": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy các mã chứng khoán gần đây mà user đã xem",
        "operationId": "Me_GetRecentSymbols",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "anonymousUserID",
            "in": "query",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Cập nhật các mã chứng khoán gần đây mà user đã xem",
        "operationId": "Me_UpdateRecentSymbols",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.RecentSymbolsUpdateRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/web-pushs": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Gửi web push",
        "operationId": "Me_SendPush",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "message",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.WebPushMessage"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/web-pushs-topic": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Gửi web push tới topic",
        "operationId": "Me_SendPushToTopic",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "message",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.WebPushMessage"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/push-topic-subscribers": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Đăng ký push topic",
        "operationId": "Me_SubscribeToTopic",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "subscription",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.WebPushTopicSubscription"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/push-topic-unsubscribers": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Bỏ đăng ký push topic",
        "operationId": "Me_UnsubscribeToTopic",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "subscription",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.WebPushTopicSubscription"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/emails": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Gửi email",
        "operationId": "Me_SendEmail",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "message",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.EmailMessage"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/fbtoken": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy token để xác thực, dùng các dịch vụ lưu trữ trên Firebase",
        "operationId": "Me_GetFirebaseToken",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/phone-number": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy số điện thoại của user",
        "operationId": "Me_GetPhoneNumber",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserPhoneNumber"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Cập nhật số điện thoại của user",
        "operationId": "Me_UpdateUserPhoneNumber",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.AddPhoneNumberRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.AddPhoneNumberResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/phone-number/verify": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Xác thực số điện thoại của user",
        "operationId": "Me_VerifyUserPhoneNumber",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.PhoneNumberVerificationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.PhoneNumberVerificationResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/profile": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy hồ sơ của 1 user",
        "operationId": "Me_GetUserProfile",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserProfile"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Cập nhật hồ sơ của 1 user",
        "operationId": "Me_UpdateUserProfile",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserProfileUpdateRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserProfile"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/settings": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy các thiết lập hiện tại của user",
        "operationId": "Me_GetUserSettings",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserSettings"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Cập nhật các thiết lập của user",
        "operationId": "Me_UpdateUserSettings",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "settings",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserSettings"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserSettings"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/purchased-items": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy thông tin các sản phẩm người dùng đã mua",
        "operationId": "Me_GetPurchasedItems",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.PurchasedItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/account": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy thông tin tổng hợp tài khoản của user",
        "operationId": "Me_GetUserAccount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserAccount"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/password": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Kiểm tra tài khoản đã đặt mật khẩu chưa",
        "operationId": "Me_HasPassword",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "boolean"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Thay đổi mật khẩu",
        "operationId": "Me_ChangePassword",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.ChangePasswordRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "boolean"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Đặt mật khẩu",
        "operationId": "Me_SetPassword",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.SetPasswordRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "boolean"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/avatar": {
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Thay đổi avatar",
        "operationId": "Me_UpdateAvatar",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UpdateAvatarRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "boolean"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/authentic": {
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Đăng ký chính chủ",
        "operationId": "Me_UpdateUserAuthentic",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/extra-info": {
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Cập nhật thông tin bổ sung cho user",
        "operationId": "Me_UpdateUserExtraInfo",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserExtraInfoUpdateRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/posts/stream": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách bài viết được hiển thị cho user",
        "operationId": "Me_GetStreamPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/posts": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách bài viết của user",
        "operationId": "Me_GetPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/blocked-users": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách người dùng bạn đang block",
        "operationId": "Me_GetBlockedUsers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Block 1 user",
        "operationId": "Me_BlockUser",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "blockedUserId",
            "in": "body",
            "description": "Id của user cần block",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/blocked-users/{blockedUserId}": {
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Unblock 1 user",
        "operationId": "Me_UnblockUser",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "blockedUserId",
            "in": "path",
            "description": "Id của user cần unblock",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/followers": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách người đang theo dõi bạn",
        "operationId": "Me_GetFollowers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/following": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách người dùng mà bạn đang theo dõi",
        "operationId": "Me_GetFollowing",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Theo dõi 1 user",
        "operationId": "Me_FollowUser",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "followedUserId",
            "in": "body",
            "description": "Id của user cần theo dõi",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/following/{followedUserId}": {
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Bỏ theo dõi 1 user",
        "operationId": "Me_UnfollowUser",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "followedUserId",
            "in": "path",
            "description": "Id của user cần theo dõi",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/hashtags": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách hashtag đang theo dõi",
        "operationId": "Me_GetUserHashTags",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.HashTag"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Theo dõi 1 hashtag",
        "operationId": "Me_FollowHashTag",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "hashTagId",
            "in": "query",
            "description": "Id của hashtag cần theo dõi",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/hashtags/{hashTagId}": {
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Bỏ theo dõi 1 hashtag",
        "operationId": "Me_UnfollowHashTag",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "hashTagId",
            "in": "path",
            "description": "Id của user cần bỏ theo dõi",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/notifications/new": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy số lượng thông báo mới",
        "operationId": "Me_GetNewNotificationCount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Reset lại số lượng thông báo mới",
        "operationId": "Me_ResetNewNotificationCount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/notifications": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách thông báo",
        "operationId": "Me_GetNotifications",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Notification.UserNotification"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Xóa hết thông báo",
        "operationId": "Me_ClearNotifications",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/notifications/unread/{notificationId}": {
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Đánh dấu 1 thông báo là đã đọc",
        "operationId": "Me_MarkNotificationAsRead",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "notificationId",
            "in": "path",
            "description": "ID của thông báo",
            "required": true,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/notifications/unread": {
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Đánh dấu tất cả thông báo là đã đọc",
        "operationId": "Me_MarkAllNotificationsAsRead",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/watchlists/{watchlistID}/posts": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy bài viết của watchlist",
        "operationId": "Me_GetWatchlistPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "watchlistID",
            "in": "path",
            "description": "ID của watchlist",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/watchlists": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách watchlist",
        "operationId": "Me_GetWatchlists",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Watchlists.Watchlist"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Tạo watchlist",
        "operationId": "Me_CreateWatchlist",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "watchlist",
            "in": "body",
            "description": "Thông tin watchlist",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Watchlists.Watchlist"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Watchlists.Watchlist"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/watchlists/{watchlistId}": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy watchlist",
        "operationId": "Me_GetWatchlist",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "watchlistId",
            "in": "path",
            "description": "ID của watchlist",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Watchlists.Watchlist"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Cập nhật watchlist",
        "operationId": "Me_UpdateWatchlist",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "watchlistId",
            "in": "path",
            "description": "Id của watchlist",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "watchlist",
            "in": "body",
            "description": "Thông tin watchlist",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Watchlists.Watchlist"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Watchlists.Watchlist"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Xóa watchlist",
        "operationId": "Me_DeleteWatchlist",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "watchlistId",
            "in": "path",
            "description": "Id của watchlist",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/watchlists/orders": {
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Cập nhật thứ tự hiển thị watchlist",
        "operationId": "Me_UpdateWatchlistOrders",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "orders",
            "in": "body",
            "description": "Thứ tự các watchlist",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Watchlists.WatchlistOrders"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/chart-templates": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách mẫu biểu đồ",
        "operationId": "Me_GetChartTemplates",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Chart.ChartTemplate"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Tạo mẫu biểu đồ",
        "operationId": "Me_CreateChartTemplate",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "template",
            "in": "body",
            "description": "Thông tin mẫu biểu đồ",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Chart.ChartTemplate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Chart.ChartTemplate"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/following-chart-templates": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách mẫu biểu đồ được chia sẻ",
        "operationId": "Me_GetFollowingChartTemplates",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "keywords",
            "in": "query",
            "description": "Từ khóa tìm kiếm",
            "required": true,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Chart.ChartTemplate"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/fireant-chart-templates": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách mẫu biểu đồ của FireAnt",
        "operationId": "Me_GetFireAntChartTemplates",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Chart.ChartTemplate"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/chart-templates/{templateID}": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy nội dung mẫu biểu đồ",
        "operationId": "Me_GetChartTemplateContent",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateID",
            "in": "path",
            "description": "ID mẫu biểu đồ",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Chart.ChartTemplate"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Lưu mẫu biểu đồ",
        "operationId": "Me_SaveChartTemplate",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateID",
            "in": "path",
            "description": "Id của mẫu biểu đồ",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "template",
            "in": "body",
            "description": "Thông tin mẫu biểu đồ",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Chart.ChartTemplate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Chart.ChartTemplate"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Xóa mẫu biểu đồ",
        "operationId": "Me_DeleteChartTemplate",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateID",
            "in": "path",
            "description": "Id của mẫu biểu đồ",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Me"
        ],
        "summary": "Thay đổi thông tin mẫu biểu đồ",
        "operationId": "Me_UpdateChartTemplate",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateID",
            "in": "path",
            "description": "Id của mẫu biểu đồ",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "template",
            "in": "body",
            "description": "Thông tin mẫu biểu đồ",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Chart.ChartTemplate"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Chart.ChartTemplate"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/membership": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy thông tin hội viên đã đăng ký",
        "operationId": "Me_GetUserMembership",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "noCache",
            "in": "query",
            "required": false,
            "type": "boolean"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserMembership"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/alerts/notifications": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách thông báo",
        "operationId": "Me_GetAlertNotifications",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "definitionId",
            "in": "query",
            "description": "Id của cảnh báo",
            "required": false,
            "type": "string"
          },
          {
            "name": "symbol",
            "in": "query",
            "description": "Mã chứng khoán",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Alerts.AlertNotification"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Cập nhật thông báo",
        "operationId": "Me_UpdateAlertNotifications",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "notifications",
            "in": "body",
            "description": "Danh sách thông báo",
            "required": true,
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Alerts.AlertNotification"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/alerts": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách cảnh báo",
        "operationId": "Me_GetAlertRegistrations",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Alerts.AlertRegistration"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Thêm đăng ký nhận cảnh báo",
        "operationId": "Me_AddAlertRegistration",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "registration",
            "in": "body",
            "description": "Thông tin đăng ký nhận cảnh báo",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Alerts.AlertRegistration"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Alerts.AlertRegistration"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/alerts/{id}": {
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Cập nhật đăng ký cảnh báo",
        "operationId": "Me_UpdateAlertRegistration",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Id của cảnh báo",
            "required": true,
            "type": "string"
          },
          {
            "name": "registration",
            "in": "body",
            "description": "Thông tin đăng ký nhận cảnh báo",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Alerts.AlertRegistration"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Alerts.AlertRegistration"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Xóa đăng ký nhận cảnh báo",
        "operationId": "Me_DeleteAlertRegistration",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Id của cảnh báo",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/mobile-alerts": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách cảnh báo điện thoại",
        "operationId": "Me_GetMobileAlerts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Alerts.MobileAlertRegistration"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Thêm đăng ký nhận cảnh báo điện thoại",
        "operationId": "Me_CreateMobileAlert",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "registration",
            "in": "body",
            "description": "Thông tin đăng ký nhận cảnh báo",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Alerts.MobileAlertRegistration"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Alerts.MobileAlertRegistration"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/mobile-alerts/{symbol}": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy cảnh báo điện thoại với 1 mã chứng khoán",
        "operationId": "Me_GetMobileAlert",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Alerts.MobileAlertRegistration"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Xóa đăng ký nhận cảnh báo điện thoại",
        "operationId": "Me_DeleteMobileAlert",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/fireant-screeners": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách bộ lọc mẫu của FireAnt",
        "operationId": "Me_GetFireAntScreeners",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Screeners.Screener"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/screeners": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách bộ lọc",
        "operationId": "Me_GetScreeners",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Screeners.Screener"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Thêm bộ lọc mới",
        "operationId": "Me_AddScreener",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "screener",
            "in": "body",
            "description": "Thông tin bộ lọc",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Screeners.Screener"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Screeners.Screener"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/screeners/filter": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Thực hiện lọc dựa trên điều kiện json",
        "operationId": "Me_Filter",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "condition",
            "in": "query",
            "description": "Điều kiện lọc",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Screeners.Screener"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/screeners/{id}": {
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Cập nhật bộ lọc",
        "operationId": "Me_UpdateScreener",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Id của bộ lọc",
            "required": true,
            "type": "string"
          },
          {
            "name": "screener",
            "in": "body",
            "description": "Thông tin bộ lọc",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Screeners.Screener"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Screeners.Screener"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Xóa bộ lọc",
        "operationId": "Me_DeleteScreener",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Id của bộ lọc",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/workspaces": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách workspace",
        "operationId": "Me_GetWorkspaces",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Workspaces.Workspace"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Thêm workspace mới",
        "operationId": "Me_AddWorkspace",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "workspace",
            "in": "body",
            "description": "Thông tin workspace",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Workspaces.Workspace"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Workspaces.Workspace"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/workspaces/{id}": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy trạng thái workspace",
        "operationId": "Me_GetWorkspaceState",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Workspaces.Workspace"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Cập nhật bộ lọc",
        "operationId": "Me_UpdateWorkspace",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Id của bộ lọc",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "workspace",
            "in": "body",
            "description": "Thông tin workspace",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Workspaces.Workspace"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Workspaces.Workspace"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Xóa workspace",
        "operationId": "Me_DeleteWorkspace",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "Id của workspace",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/room-invitations/{invitationId}": {
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Ra quyết định với lời mời tham gia nhóm",
        "operationId": "Me_UpdateInvitation",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "invitationId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "action",
            "in": "body",
            "description": "Quyết định với lời mời tham gia nhóm",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomInvitationAction"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Xóa lời mời tham gia nhóm",
        "operationId": "Me_DeleteInvitation",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "invitationId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/me/permissions/create-room": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Kiểm tra quyền tạo nhóm của người dùng",
        "operationId": "Me_GetCreateRoomPermission",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/rooms": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách nhóm đang tham gia",
        "operationId": "Me_GetRooms",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Rooms.Room"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/rooms/{roomId}": {
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Rởi khỏi nhóm",
        "operationId": "Me_LeaveRoom",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id của nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Rooms.Room"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/rooms/{roomId}/nonmember-users": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Danh sách gợi ý người chưa phải thành viên nhóm",
        "operationId": "Me_GetNonMemberUsers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id của nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "keywords",
            "in": "query",
            "description": "Từ khóa tìm kiếm (null để lấy tất)",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/verify-identity": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Xác thực danh tính (KYC)",
        "operationId": "Me_VerifyIdentity",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Tài liệu xác minh người dùng",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserIdentityVerificationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserIdentityVerificationResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/broker-user/{brokerId}/link": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Link tài khoản đã có tại công ty chứng khoán.",
        "operationId": "Me_LinkBrokerUser",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC,...)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/broker-user/{brokerId}/suggest-account-number": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Gợi ý số tài khoản tại công ty chứng khoán.",
        "operationId": "Me_SuggestAccountNumber",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC, Shinhan...)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Trading.SuggestAccountNumber"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/broker-user/{brokerId}/check-suggest-number": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Kiểm tra số tài khoản có thể chọn tại công ty chứng khoán.",
        "operationId": "Me_CheckSuggestNumber",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC, Shinhan,...)",
            "required": true,
            "type": "string"
          },
          {
            "name": "checkSuggestNumberRequest",
            "in": "body",
            "description": "Thông tin số tài khoản cần kiểm tra",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.CheckSuggestAccountNumberRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "boolean"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/broker-user/{brokerId}/econtract": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy thông tin hợp đồng điện tử mở tài khoản tại CTCK.",
        "operationId": "Me_GetEContractInformation",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC, Shinhan,...)",
            "required": true,
            "type": "string"
          },
          {
            "name": "accountNumber",
            "in": "query",
            "description": "Số tài khoản ứng với hợp đồng",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.EContractInformation"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/broker-user/{brokerId}/send-otp": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Gửi mã OTP xác thực email.",
        "operationId": "Me_SendOtpEmail",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC, Shinhan...)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "boolean"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/broker-user/{brokerId}/verify-otp": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Xác thực email bằng OTP.",
        "operationId": "Me_VerifyOtp",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC, Shinhan...)",
            "required": true,
            "type": "string"
          },
          {
            "name": "otpDataRequest",
            "in": "body",
            "description": "Thông OTP cần kiểm tra",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.VerifyOtpDataRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "boolean"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/broker-user/{brokerId}": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy trạng thái tài khoản tại công ty chứng khoán.",
        "operationId": "Me_GetBrokerUserStatus",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC,...)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.BrokerUserStatus"
            }
          },
          "404": {
            "description": "Dữ liệu không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Tạo tài khoản tại công ty chứng khoán.",
        "operationId": "Me_CreateBrokerUser",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "brokerId",
            "in": "path",
            "description": "Id của công ty chứng khoán (VD: BSC,...)",
            "required": true,
            "type": "string"
          },
          {
            "name": "data",
            "in": "body",
            "description": "Form thông tin khách hàng",
            "required": true,
            "schema": {
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.OpenAccountResult"
            }
          },
          "404": {
            "description": "Công ty chứng khoán không tồn tại"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/money-account": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy thông tin tài khoản tiền của người dùng",
        "operationId": "Me_GetAccount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Money.Account"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/money-transactions": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách giao dịch tiền",
        "operationId": "Me_GetTransactions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Money.Transaction"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Tạo giao dịch tiền",
        "operationId": "Me_CreateTransaction",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Money.CreateTransactionRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Money.Transaction"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/banks": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách ngân hàng được hỗ trợ",
        "operationId": "Me_GetBanks",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Money.Bank"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/bank-accounts": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách tài khoản ngân hàng",
        "operationId": "Me_GetBankAccounts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Money.BankAccount"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Thêm tài khoản ngân hàng",
        "operationId": "Me_AddBankAccount",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Money.AddBankAccountRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Money.BankAccount"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/bank-accounts/lookup-name": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Tra cứu tên tài khoản ngân hàng",
        "operationId": "Me_LookupBankAccountName",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Money.LookupBankAccountNameRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/bank-accounts/{bankAccountId}": {
      "delete": {
        "tags": [
          "Me"
        ],
        "summary": "Xóa tài khoản ngân hàng",
        "operationId": "Me_RemoveBankAccount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "bankAccountId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/mxv/account": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy thông tin tài khoản hàng hóa MXV",
        "operationId": "Me_GetMXVAccount",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.InvestorAccount"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/mxv/orders": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách lệnh giao dịch hàng hóa MXV",
        "operationId": "Me_GetMXVOrders",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": "Danh sách trạng thái lệnh (VD: WORKING,FILLED)",
            "required": true,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.Order"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/mxv/positions": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy danh sách vị thế mở hàng hóa MXV",
        "operationId": "Me_GetMXVAccountPositions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.AccountPosition"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/mxv/account-request": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Lấy yêu cầu tạo tài khoản giao dịch hàng hóa MXV",
        "operationId": "Me_GetMXVAccountRequest",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.AccountRequest"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Yêu cầu tạo tài khoản giao dịch hàng hóa MXV",
        "operationId": "Me_CreateMXVAccountRequest",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.AccountRequestExtraInfo"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.AccountRequest"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/pin-code": {
      "put": {
        "tags": [
          "Me"
        ],
        "summary": "Đổi pin code",
        "operationId": "Me_ChangePinCode",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.ChangePinCodeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/request-sms-otp": {
      "get": {
        "tags": [
          "Me"
        ],
        "summary": "Yêu cầu gửi mã OTP qua SMS",
        "operationId": "Me_RequestSmsOTP",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/fmarket-account": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Tạo tài khoản Fmarket",
        "operationId": "Me_CreateFMarketAccount",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.RegisterAccountExtraInfo"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/fmarket-account-confirmation": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Xác nhận liên kết tài khoản Fmarket",
        "operationId": "Me_ConfirmLinkFmarketAccount",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserVerificationInfo"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/upload-file": {
      "post": {
        "tags": [
          "Me"
        ],
        "summary": "Upload file",
        "operationId": "Me_UploadFile",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/monitoring/status": {
      "get": {
        "tags": [
          "Monitoring"
        ],
        "summary": "Kiểm tra trạng thái API",
        "operationId": "Monitoring_Status",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        }
      }
    },
    "/mxv/brokers": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Lấy danh sách Môi giới",
        "operationId": "MXV_GetBrokers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVBrokerInfo"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/collaborators": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Lấy danh sách Cộng tác viên",
        "operationId": "MXV_GetCollaborators",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVCollaboratorInfo"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/account": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Lấy thông tin chi tiết tài khoản MXV",
        "operationId": "MXV_GetAccountDetail",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "accountType",
            "in": "query",
            "description": " (0 = FUTURE, 1 = NANO, 2 = MXV)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVInvestorDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Tạo tài khoản MXV (Future, Nano, MXV)",
        "operationId": "MXV_CreateMXVAccount",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.CreateMXVAccountRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVCreateAccountResponse"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/account/status": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Lấy trạng thái tài khoản MXV (Future, Nano, MXV)",
        "operationId": "MXV_GetMXVAccountStatus",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVInvestorAccountStatus"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/account/margin-status": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Lấy trạng thái ký quỹ hiện tại",
        "operationId": "MXV_GetMarginStatus",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "accountType",
            "in": "query",
            "description": "Loại tài khoản (0 = FUTURE, 1 = NANO, 2 = MXV)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVMarginStatus"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/account/margin-transactions": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Lấy lịch sử nộp rút ký quỹ",
        "operationId": "MXV_GetMarginTransactions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": "Trạng thái (Bắt buộc): PENDING_FOR_MEMBER, PENDING_LEVEL1, PENDING_LEVEL2, PENDING_FOR_BANK, APPROVED, REJECTED. Có thể truyền nhiều giá trị cách nhau bởi dấu phẩy",
            "required": true,
            "type": "string"
          },
          {
            "name": "accountType",
            "in": "query",
            "description": "Loại tài khoản (Optional) (0 = FUTURE, 1 = NANO, 2 = MXV)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng bản ghi tối đa (mặc định: 100)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bắt đầu (mặc định: 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVMarginTransaction"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/account/deposit-request": {
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Yêu cầu nạp tiền vào tài khoản MXV",
        "operationId": "MXV_DepositRequest",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVDepositRequest"
            }
          },
          {
            "name": "accountType",
            "in": "query",
            "description": " (0 = FUTURE, 1 = NANO, 2 = MXV)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/account/withdraw-request": {
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Yêu cầu rút tiền từ tài khoản MXV",
        "operationId": "MXV_WithdrawRequest",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVWithdrawRequest"
            }
          },
          {
            "name": "accountType",
            "in": "query",
            "description": " (0 = FUTURE, 1 = NANO, 2 = MXV)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/account/transfer-money-request": {
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Yêu cầu chuyển tiền giữa các tài khoản Future, Nano, MXV",
        "operationId": "MXV_TransferMoneyRequest",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVTransferMoneyRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "object"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/account/money-requests": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Lấy lịch sử yêu cầu nạp/rút/chuyển tiền của người dùng",
        "operationId": "MXV_GetMoneyRequests",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "accountType",
            "in": "query",
            "description": "Loại tài khoản (Optional) (0 = FUTURE, 1 = NANO, 2 = MXV)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng bản ghi tối đa (mặc định: 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bắt đầu (mặc định: 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVMoneyRequestItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/market/commodities": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Quản lý hàng hoá",
        "operationId": "MXV_GetCommodities",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVCommodityInfo"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/market/commodities/{commodityCode}": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Chi tiết hàng hoá",
        "operationId": "MXV_GetCommodityDetail",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "commodityCode",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVCommodityInfo"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/market/contracts": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Quản lý hợp đồng",
        "operationId": "MXV_GetContracts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "subType",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVContractInfo"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/market/contracts/{contractCode}": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Chi tiết hợp đồng",
        "operationId": "MXV_GetContractDetail",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "contractCode",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVContractInfo"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/positions": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Danh sách trạng thái mở",
        "operationId": "MXV_GetPositionsOpen",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "accountType",
            "in": "query",
            "description": " (0 = FUTURE, 1 = NANO, 2 = MXV)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          },
          {
            "name": "sortBy",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVOpenPosition"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/positions/settle": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Danh sách tất toán",
        "operationId": "MXV_GetPositionsSettle",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "accountType",
            "in": "query",
            "description": " (0 = FUTURE, 1 = NANO, 2 = MXV)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "sortBy",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVSettlePosition"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/transactions": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Danh sách giao dịch",
        "operationId": "MXV_GetTrades",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "accountType",
            "in": "query",
            "description": " (0 = FUTURE, 1 = NANO, 2 = MXV)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "sortBy",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVTradeInfo"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/orders": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Danh sách lệnh",
        "operationId": "MXV_GetOrders",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "accountType",
            "in": "query",
            "description": " (0 = FUTURE, 1 = NANO, 2 = MXV)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "sortBy",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVOrderInfo"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Đặt lệnh mới",
        "operationId": "MXV_PlaceOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVNewOrderRequest"
            }
          },
          {
            "name": "accountType",
            "in": "query",
            "description": " (0 = FUTURE, 1 = NANO, 2 = MXV)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVOrderResponse"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/orders/{clientOrderId}": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Chi tiết lệnh",
        "operationId": "MXV_GetOrderDetail",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "clientOrderId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVOrderInfo"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "MXV"
        ],
        "summary": "Sửa lệnh",
        "operationId": "MXV_ReplaceOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "clientOrderId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVReplaceOrderRequest"
            }
          },
          {
            "name": "accountType",
            "in": "query",
            "description": " (0 = FUTURE, 1 = NANO, 2 = MXV)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVOrderResponse"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "MXV"
        ],
        "summary": "Hủy lệnh",
        "operationId": "MXV_CancelOrder",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "clientOrderId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "side",
            "in": "query",
            "required": true,
            "type": "string"
          },
          {
            "name": "orderId",
            "in": "query",
            "required": true,
            "type": "string"
          },
          {
            "name": "accountType",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVOrderResponse"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/traceability/product": {
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Truy xuất nguồn gốc sản phẩm vật chất",
        "operationId": "MXV_GetProductTraceability",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVProductTraceabilityRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Trả về thông tin sản phẩm",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalDeliveryResponse[FireAnt.Api.Models.MXV.MXVTraceabilityProduct]"
            }
          },
          "400": {
            "description": "Thiếu dữ liệu hoặc chưa có tài khoản MXV"
          },
          "404": {
            "description": "Không tìm thấy sản phẩm"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/physical-delivery/register": {
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Đăng ký giao hàng vật chất (bên bán)",
        "operationId": "MXV_PhysicalDeliveryRegister",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.PhysicalDeliveryRegisterRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalDeliveryResponse[FireAnt.Api.Models.MXV.MXVPhysicalDeliveryPayload]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/physical-delivery/cancel": {
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Huỷ đăng ký giao hàng vật chất",
        "operationId": "MXV_PhysicalDeliveryCancel",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.PhysicalCancelRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalDeliveryResponse[FireAnt.Api.Models.MXV.MXVPhysicalDeliveryPayload]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/physical-receive/register": {
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Đăng ký nhận hàng vật chất (bên mua)",
        "operationId": "MXV_PhysicalReceiveRegister",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.PhysicalReceiveRegisterRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalDeliveryResponse[FireAnt.Api.Models.MXV.MXVPhysicalDeliveryPayload]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/physical-receive/cancel": {
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Huỷ đăng ký nhận hàng vật chất",
        "operationId": "MXV_PhysicalReceiveCancel",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.PhysicalCancelRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalDeliveryResponse[FireAnt.Api.Models.MXV.MXVPhysicalDeliveryPayload]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/physical-delivery/deposit": {
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Đăng ký lưu ký hàng vật chất vào kho (bên bán)",
        "operationId": "MXV_PhysicalDeliveryDeposit",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.PhysicalDeliveryDepositRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalDeliveryResponse[FireAnt.Api.Models.MXV.MXVPhysicalDeliveryPayload]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/physical-delivery/cancel-deposit": {
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Huỷ đăng ký lưu ký hàng vật chất",
        "operationId": "MXV_PhysicalCancelDeposit",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.PhysicalCancelRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalDeliveryResponse[FireAnt.Api.Models.MXV.MXVPhysicalDeliveryPayload]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/physical-delivery/designated": {
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Xác nhận giao hàng vật chất chỉ định (bên bán)",
        "operationId": "MXV_PhysicalDeliveryDesignated",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.PhysicalDeliveryDesignatedRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalDeliveryResponse[FireAnt.Api.Models.MXV.MXVPhysicalDeliveryPayload]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/physical-receive/designated": {
      "post": {
        "tags": [
          "MXV"
        ],
        "summary": "Xác nhận nhận hàng vật chất chỉ định (bên mua)",
        "operationId": "MXV_PhysicalReceiveDesignated",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.PhysicalReceiveDesignatedRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalDeliveryResponse[FireAnt.Api.Models.MXV.MXVPhysicalDeliveryPayload]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/mxv/physical-delivery/history": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Lấy danh sách đăng ký giao/nhận hàng vật chất",
        "operationId": "MXV_GetPhysicalDeliveryHistory",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "status",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "contract",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "toDate",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalDeliveryRecord"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/physical-delivery/history/detail": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Lấy thông tin chi tiết đăng ký giao/nhận hàng vật chất",
        "operationId": "MXV_GetPhysicalDeliveryDetail",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "refConfirmationCode",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "refRequestCode",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalDeliveryRecord"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/physical-delivery/registrations": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Truy vấn trạng thái đăng ký giao/nhận hàng vật chất",
        "operationId": "MXV_GetPhysicalRegistrations",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "refConfirmationCode",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "refRequestCode",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "refTransactionDate",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalRegistrationStatus"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/physical-delivery/deposit-registrations": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Truy vấn trạng thái đăng ký lưu ký vật chất",
        "operationId": "MXV_GetDepositRegistrations",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "refConfirmationCode",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "refDeliveryCode",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "refRequestCode",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "refTransactionDate",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVDepositRegistrationStatus"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/mxv/physical-delivery/transactions": {
      "get": {
        "tags": [
          "MXV"
        ],
        "summary": "Truy vấn trạng thái nhận hàng vật chất tại kho",
        "operationId": "MXV_GetPhysicalTransactions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "refConfirmationCode",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "refPairingCode",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "refRequestCode",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "refTransactionDate",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalTransactionStatus"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/excel/templates": {
      "get": {
        "tags": [
          "MyExcelTemplates"
        ],
        "summary": "Mẫu của tôi thuộc một ứng dụng (mọi chế độ chia sẻ, mới cập nhật trước)",
        "operationId": "MyExcelTemplates_GetMyTemplates",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "app",
            "in": "query",
            "description": "Ứng dụng: excel (mặc định - không truyền thì chỉ trả mẫu Excel như trước) | word | powerpoint",
            "required": false,
            "type": "string"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Tìm trong tên / mô tả / tag",
            "required": false,
            "type": "string"
          },
          {
            "name": "visibility",
            "in": "query",
            "description": "Lọc chế độ chia sẻ: 0 Private, 1 Link, 2 Public (0 = Private, 1 = Link, 2 = Public)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2
            ]
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên (mặc định 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số bản ghi tối đa (mặc định 20, tối đa 100)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplatePagedResult[FireAnt.Api.Models.ExcelTemplates.ExcelTemplateItem]"
            }
          },
          "400": {
            "description": "Tham số không hợp lệ"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "MyExcelTemplates"
        ],
        "summary": "Tạo mẫu từ workbook / tài liệu / bản trình bày (multipart/form-data)",
        "description": "Các part: \"metadata\" (JSON ExcelTemplateChangeRequest, bắt buộc name), \"file\" (tệp không macro, tối đa\r\nExcelTemplateMaxFileSizeKb; tên tệp phải có đuôi .xlsx, .xltx, .docx, .dotx, .pptx hoặc .potx - app / fileFormat suy ra\r\ntừ đuôi tệp, nội dung phải đúng định dạng đó), \"thumbnail\" (tùy chọn, PNG / JPEG / WebP ≤ 1024 KB).\r\nvisibility = 2 (Public) cần admin duyệt trước khi hiện trong thư viện; visibility = 1 (Link) tự tạo link chia sẻ.\r\nMỗi người tối đa ExcelTemplateMaxPerUser mẫu (chưa xóa).",
        "operationId": "MyExcelTemplates_CreateTemplate",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "201": {
            "description": "Tạo thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateDetail"
            }
          },
          "400": {
            "description": "Dữ liệu / tệp không hợp lệ, vượt giới hạn"
          },
          "413": {
            "description": "Dữ liệu tải lên quá lớn"
          },
          "415": {
            "description": "Không phải multipart/form-data"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/excel/templates/shared": {
      "get": {
        "tags": [
          "MyExcelTemplates"
        ],
        "summary": "Mẫu thuộc một ứng dụng người khác chia sẻ trực tiếp cho tôi (mới chia sẻ trước)",
        "operationId": "MyExcelTemplates_GetSharedWithMe",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "app",
            "in": "query",
            "description": "Ứng dụng: excel (mặc định) | word | powerpoint",
            "required": false,
            "type": "string"
          },
          {
            "name": "q",
            "in": "query",
            "description": "Tìm trong tên / mô tả / tag",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên (mặc định 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số bản ghi tối đa (mặc định 20, tối đa 100)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplatePagedResult[FireAnt.Api.Models.ExcelTemplates.ExcelTemplateItem]"
            }
          },
          "400": {
            "description": "Tham số không hợp lệ"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/me/excel/templates/{templateId}": {
      "get": {
        "tags": [
          "MyExcelTemplates"
        ],
        "summary": "Chi tiết mẫu của tôi (kèm reviewNote, shareUrl)",
        "operationId": "MyExcelTemplates_GetMyTemplate",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateDetail"
            }
          },
          "404": {
            "description": "Không tồn tại hoặc không phải mẫu của bạn"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "MyExcelTemplates"
        ],
        "summary": "Cập nhật thông tin mẫu",
        "description": "Trường null = giữ nguyên; chuỗi / mảng rỗng = xóa (trừ name). Mẫu công khai (không chính thức): đổi tên / mô tả\r\nđưa mẫu về chờ duyệt. visibility 0 / 1 đưa reviewStatus về 0; visibility 2 cần duyệt. Mẫu chính thức chỉ admin sửa.",
        "operationId": "MyExcelTemplates_UpdateTemplate",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin cập nhật",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateDetail"
            }
          },
          "400": {
            "description": "Dữ liệu không hợp lệ"
          },
          "403": {
            "description": "Không có quyền sửa"
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "MyExcelTemplates"
        ],
        "summary": "Xóa mẫu (xóa mềm; mẫu chính thức chỉ admin xóa)",
        "operationId": "MyExcelTemplates_DeleteTemplate",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "templateId đã xóa",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "403": {
            "description": "Không có quyền xóa"
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/excel/templates/{templateId}/file": {
      "put": {
        "tags": [
          "MyExcelTemplates"
        ],
        "summary": "Thay tệp mẫu và/hoặc ảnh xem trước (multipart/form-data)",
        "description": "Các part: \"file\" (tệp mẫu cùng ứng dụng với mẫu: Excel .xlsx / .xltx, Word .docx / .dotx, PowerPoint .pptx / .potx)\r\nvà/hoặc \"thumbnail\" (ít nhất một), \"changeNote\" (text, tùy chọn, ≤ 500 ký tự).\r\nGửi file: version + 1, phiên bản cũ được giữ lại. Mẫu công khai (không chính thức): thay tệp / ảnh đưa mẫu về chờ duyệt.",
        "operationId": "MyExcelTemplates_ReplaceFile",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateDetail"
            }
          },
          "400": {
            "description": "Tệp không hợp lệ"
          },
          "403": {
            "description": "Không có quyền sửa"
          },
          "404": {
            "description": "Không tồn tại"
          },
          "409": {
            "description": "Mẫu vừa được cập nhật ở phiên khác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/excel/templates/{templateId}/shares": {
      "get": {
        "tags": [
          "MyExcelTemplates"
        ],
        "summary": "Danh sách người dùng được chia sẻ mẫu",
        "operationId": "MyExcelTemplates_GetShares",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateShareItem"
              }
            }
          },
          "403": {
            "description": "Không có quyền"
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "MyExcelTemplates"
        ],
        "summary": "Chia sẻ mẫu cho người dùng (theo tên đăng nhập)",
        "description": "Tên đăng nhập phải tồn tại, không gồm chính bạn / chủ sở hữu; người đã được chia sẻ bị bỏ qua.\r\nMỗi mẫu tối đa ExcelTemplateMaxSharesPerTemplate người (mặc định 100).",
        "operationId": "MyExcelTemplates_AddShares",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "userNames",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateShareRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Toàn bộ danh sách chia sẻ",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateShareItem"
              }
            }
          },
          "400": {
            "description": "Tên không tồn tại / tự chia sẻ / vượt giới hạn"
          },
          "403": {
            "description": "Không có quyền"
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/excel/templates/{templateId}/shares/{userName}": {
      "delete": {
        "tags": [
          "MyExcelTemplates"
        ],
        "summary": "Bỏ chia sẻ mẫu với một người dùng",
        "operationId": "MyExcelTemplates_RemoveShare",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "userName",
            "in": "path",
            "description": "Tên đăng nhập",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Danh sách chia sẻ còn lại",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateShareItem"
              }
            }
          },
          "403": {
            "description": "Không có quyền"
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/me/excel/templates/{templateId}/link": {
      "post": {
        "tags": [
          "MyExcelTemplates"
        ],
        "summary": "Tạo (hoặc tạo lại) link chia sẻ",
        "description": "Token 128-bit mới, link cũ mất hiệu lực. Mẫu Riêng tư chuyển sang Link (visibility = 1).",
        "operationId": "MyExcelTemplates_CreateShareLink",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "token, url",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateLinkResult"
            }
          },
          "403": {
            "description": "Không có quyền"
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "MyExcelTemplates"
        ],
        "summary": "Hủy link chia sẻ",
        "description": "Mẫu Link (visibility = 1) trở về Riêng tư (0); mẫu Public giữ nguyên chế độ.",
        "operationId": "MyExcelTemplates_DeleteShareLink",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "templateId",
            "in": "path",
            "description": "ID mẫu",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "templateId",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "403": {
            "description": "Không có quyền"
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/office/links": {
      "get": {
        "tags": [
          "OfficeLinks"
        ],
        "summary": "Liên kết của tôi (không kèm payload), mới publish trước",
        "operationId": "OfficeLinks_GetLinks",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "search",
            "in": "query",
            "description": "Tìm trong tên / tài liệu nguồn (tối đa 100 ký tự)",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên (mặc định 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số bản ghi tối đa (mặc định 20, tối đa 100)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "{ total, items: [{ id, name, kind, sourceApp, sourceDocument, sourceRef, version, createdAt, updatedAt }] }",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.OfficeLinks.OfficeLinkPagedResult"
            }
          },
          "400": {
            "description": "Tham số không hợp lệ"
          },
          "401": {
            "description": "Chưa đăng nhập"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "OfficeLinks"
        ],
        "summary": "Tạo liên kết (publish lần đầu từ add-in Excel)",
        "description": "Body JSON: { name (bắt buộc, ≤ 200), kind (bắt buộc: table | chart | value), sourceApp (excel - mặc định | word | powerpoint),\r\nsourceDocument (≤ 260), sourceRef (vd. \"Sheet1!A1:F12\" hoặc tên biểu đồ, ≤ 200), payload (bắt buộc, JSON object\r\n≤ OfficeLinkMaxPayloadKb) }. Server sinh id (22 ký tự), version = 1. Mỗi người tối đa OfficeLinkMaxPerUser liên kết.",
        "operationId": "OfficeLinks_CreateLink",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "201": {
            "description": "Liên kết vừa tạo (không kèm payload)",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.OfficeLinks.OfficeLinkItem"
            }
          },
          "400": {
            "description": "Dữ liệu không hợp lệ / vượt giới hạn"
          },
          "401": {
            "description": "Chưa đăng nhập"
          },
          "413": {
            "description": "Dữ liệu gửi lên quá lớn"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/office/links/{id}": {
      "get": {
        "tags": [
          "OfficeLinks"
        ],
        "summary": "Một liên kết của tôi kèm snapshot mới nhất (payload là JSON object, không phải chuỗi)",
        "operationId": "OfficeLinks_GetLink",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID liên kết (22 ký tự)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Liên kết kèm payload",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.OfficeLinks.OfficeLinkDetail"
            }
          },
          "401": {
            "description": "Chưa đăng nhập"
          },
          "404": {
            "description": "Không tồn tại, đã xóa hoặc không phải liên kết của bạn"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "OfficeLinks"
        ],
        "summary": "Publish phiên bản mới của liên kết (version + 1)",
        "description": "Body JSON cùng dạng với POST: payload bắt buộc; name, kind, sourceApp, sourceDocument, sourceRef tùy chọn\r\n(null / không gửi = giữ nguyên; sourceDocument / sourceRef \"\" = xóa).",
        "operationId": "OfficeLinks_UpdateLink",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID liên kết",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Liên kết sau cập nhật (không kèm payload)",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.OfficeLinks.OfficeLinkItem"
            }
          },
          "400": {
            "description": "Dữ liệu không hợp lệ"
          },
          "401": {
            "description": "Chưa đăng nhập"
          },
          "404": {
            "description": "Không tồn tại, đã xóa hoặc không phải liên kết của bạn"
          },
          "413": {
            "description": "Dữ liệu gửi lên quá lớn"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "OfficeLinks"
        ],
        "summary": "Xóa liên kết (xóa mềm)",
        "operationId": "OfficeLinks_DeleteLink",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "description": "ID liên kết",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Đã xóa",
            "schema": {
              "type": "object"
            }
          },
          "401": {
            "description": "Chưa đăng nhập"
          },
          "404": {
            "description": "Không tồn tại, đã xóa hoặc không phải liên kết của bạn"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/broker-users/{userId}/accounts/{accountId}/orders": {
      "get": {
        "tags": [
          "Orders"
        ],
        "summary": "Trả về danh sách lệnh đặt trong phiên",
        "operationId": "Orders_Orders",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Trading.Order"
              }
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Orders"
        ],
        "summary": "Đặt lệnh",
        "operationId": "Orders_CreateOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "order",
            "in": "body",
            "description": "Thông tin lệnh đặt",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.CreateOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      }
    },
    "/broker-users/{userId}/accounts/{accountId}/orders/otp": {
      "post": {
        "tags": [
          "Orders"
        ],
        "summary": "Yêu cầu gửi OTP đặt lệnh",
        "operationId": "Orders_SendOtp",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "boolean"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      }
    },
    "/broker-users/{userId}/accounts/{accountId}/orders/{orderId}": {
      "put": {
        "tags": [
          "Orders"
        ],
        "summary": "Sửa lệnh",
        "operationId": "Orders_EditOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "orderId",
            "in": "path",
            "description": "Id của lệnh",
            "required": true,
            "type": "string"
          },
          {
            "name": "order",
            "in": "body",
            "description": "Thông tin sửa lệnh",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.EditOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Orders"
        ],
        "summary": "Hủy lệnh",
        "operationId": "Orders_DeleteOrder",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "orderId",
            "in": "path",
            "description": "Id của lệnh",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      }
    },
    "/broker-users/{userId}/accounts/{accountId}/orderHistory": {
      "get": {
        "tags": [
          "OrdersHistory"
        ],
        "summary": "Trả về lịch sử đặt lệnh của tài khoản",
        "operationId": "OrdersHistory_OrderHistory",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "maxCount",
            "in": "query",
            "description": "Số lượng bản ghi tối đa",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Trading.Order"
              }
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-read"
            ]
          }
        ]
      }
    },
    "/v2/broker-users/{userId}/accounts/{accountId}/orders": {
      "get": {
        "tags": [
          "OrdersV2"
        ],
        "summary": "Trả về danh sách lệnh đặt trong phiên",
        "operationId": "OrdersV2_Orders",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Trading.Order"
              }
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "OrdersV2"
        ],
        "summary": "Đặt lệnh",
        "operationId": "OrdersV2_CreateOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "order",
            "in": "body",
            "description": "Thông tin lệnh đặt",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.CreateOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      }
    },
    "/v2/broker-users/{userId}/accounts/{accountId}/orders/otp-required": {
      "get": {
        "tags": [
          "OrdersV2"
        ],
        "summary": "Cần OTP để giao dịch",
        "operationId": "OrdersV2_OtpRequired",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "boolean"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      }
    },
    "/v2/broker-users/{userId}/accounts/{accountId}/orders/otp": {
      "post": {
        "tags": [
          "OrdersV2"
        ],
        "summary": "Yêu cầu gửi OTP đặt lệnh",
        "operationId": "OrdersV2_SendOtp",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "boolean"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      }
    },
    "/v2/broker-users/{userId}/accounts/{accountId}/orders/{orderId}": {
      "put": {
        "tags": [
          "OrdersV2"
        ],
        "summary": "Sửa lệnh",
        "operationId": "OrdersV2_EditOrder",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "orderId",
            "in": "path",
            "description": "Id của lệnh",
            "required": true,
            "type": "string"
          },
          {
            "name": "order",
            "in": "body",
            "description": "Thông tin sửa lệnh",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Trading.EditOrderRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "OrdersV2"
        ],
        "summary": "Hủy lệnh",
        "operationId": "OrdersV2_DeleteOrder",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "orderId",
            "in": "path",
            "description": "Id của lệnh",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      }
    },
    "/otp/time": {
      "get": {
        "tags": [
          "Otp"
        ],
        "summary": "Lấy giờ máy chủ OTP",
        "operationId": "Otp_RequestSmsOTP",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/otp/sms-otp": {
      "get": {
        "tags": [
          "Otp"
        ],
        "summary": "Yêu cầu gửi mã OTP qua SMS",
        "operationId": "Otp_RequestSmsOtp",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/otp/smart-otp": {
      "get": {
        "tags": [
          "Otp"
        ],
        "summary": "Lấy thông tin đăng ký Smart Otp",
        "operationId": "Otp_GetSmartOtpInfo",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Otp"
        ],
        "summary": "Đăng ký Smart OTP",
        "operationId": "Otp_RegisterSmartOtp",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.RegisterSmartOTPRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/broker-users/{userId}/accounts/{accountId}/positions": {
      "get": {
        "tags": [
          "Positions"
        ],
        "summary": "Trả về vị thế mở của tài khoản",
        "operationId": "Positions_Positions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Trading.Position"
              }
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-read"
            ]
          }
        ]
      }
    },
    "/broker-users/{userId}/accounts/{accountId}/positions/{positionId}": {
      "delete": {
        "tags": [
          "Positions"
        ],
        "summary": "Đóng vị thế",
        "operationId": "Positions_ClosePosition",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "positionId",
            "in": "path",
            "description": "Id của vị thế",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      }
    },
    "/v2/broker-users/{userId}/accounts/{accountId}/positions": {
      "get": {
        "tags": [
          "PositionsV2"
        ],
        "summary": "Trả về vị thế mở của tài khoản",
        "operationId": "PositionsV2_Positions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Trading.Position"
              }
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "accounts-read"
            ]
          }
        ]
      }
    },
    "/v2/broker-users/{userId}/accounts/{accountId}/positions/{positionId}": {
      "delete": {
        "tags": [
          "PositionsV2"
        ],
        "summary": "Đóng vị thế",
        "operationId": "PositionsV2_ClosePosition",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user đã kết nối vào tài khoản FireAnt",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "description": "Id tài khoản tại công ty chứng khoán của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "positionId",
            "in": "path",
            "description": "Id của vị thế",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User không tồn tại"
          },
          "403": {
            "description": "Lỗi kết nối tài khoản liên kết tại công ty chứng khoán. Cần liên kết lại tài khoản giao dịch"
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      }
    },
    "/posts/groups": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách nhóm bài viết",
        "operationId": "Posts_GetPostGroups",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.PostGroup"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/experts": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách chuyên gia",
        "operationId": "Posts_GetExperts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/sources": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách nguồn tin",
        "operationId": "Posts_GetPostSources",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.PostSource"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/feed": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy news feed của người dùng",
        "operationId": "Posts_GetNewsFeed",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách bài viết",
        "operationId": "Posts_GetPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "query",
            "description": "Lọc theo chứng khoán được tag trong bài viết",
            "required": false,
            "type": "string"
          },
          {
            "name": "userId",
            "in": "query",
            "description": "Lọc theo tác giả bài viết",
            "required": false,
            "type": "string"
          },
          {
            "name": "individualId",
            "in": "query",
            "description": "Lọc theo nhân vật được tag trong bài viết",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "hashTagId",
            "in": "query",
            "description": "Lọc theo chủ đề được tag trong bài viết",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "groupID",
            "in": "query",
            "description": "Lọc theo nhóm bài viết",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Posts"
        ],
        "summary": "Đăng bài viết",
        "operationId": "Posts_InsertPost",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin bài viết",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Posts.PostChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/posts/popular": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách bài viết phổ biến",
        "operationId": "Posts_GetPopularPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/livestream": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách livestream",
        "operationId": "Posts_GetLivestreamPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/video": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách bài viết video",
        "operationId": "Posts_GetVideoPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/video/top": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách video tiêu điểm",
        "operationId": "Posts_GetTopVideos",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "videoType",
            "in": "query",
            "description": "Loại video (0: Video ngắn, 1: Video dài, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/emagazine": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách bài viết emagazine",
        "operationId": "Posts_GetEmagazinePosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/infographic": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách bài viết infographic",
        "operationId": "Posts_GetInfographicPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/individuals": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách bài viết có đề cập tới các cá nhân",
        "operationId": "Posts_GetIndividualRelatedPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/expert-ideas": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách bài viết nhận định chuyên gia",
        "operationId": "Posts_GetExpertIdeas",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/{postId}/related-posts": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách bài viết liên quan tới 1 bài viết",
        "operationId": "Posts_GetRelatedPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "Id của bài viết",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/{postId}/replies": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách bình luận của 1 bài viết",
        "operationId": "Posts_GetReplies",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "Id của bài viết",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/{postId}/replies/{replyPostId}/index": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy thứ tự của 1 bình luận trong danh sách bình luận của 1 bài viết",
        "operationId": "Posts_GetReplyPostIndex",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "Id của bài viết",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "replyPostId",
            "in": "path",
            "description": "Id của bài viết bình luận",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/{postId}/likes": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách người thích 1 bài viết",
        "operationId": "Posts_GetLikes",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "Id của bài viết",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Posts"
        ],
        "summary": "Thích bài viết",
        "operationId": "Posts_LikePost",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "ID bài viết",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Posts"
        ],
        "summary": "Bỏ thích bài viết",
        "operationId": "Posts_UnlikePost",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "Id bài viết",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/posts/{postId}": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy nội dung bài viết",
        "operationId": "Posts_GetPost",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "ID bài viết",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Posts"
        ],
        "summary": "Sửa bài viết",
        "operationId": "Posts_UpdatePost",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "Id bài viết",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin bài viết",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Posts.PostChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Posts"
        ],
        "summary": "Xóa bài viết",
        "operationId": "Posts_DeletePost",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "Id bài viết",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/posts/livestream-permission": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Kiểm tra quyền livestream",
        "operationId": "Posts_HasLivestreamPermission",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/kyc-required": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Kiểm tra người dùng có cần KYC khi đăng bài không",
        "operationId": "Posts_HasPostPermission",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/posts/{postId}/livestream/start": {
      "put": {
        "tags": [
          "Posts"
        ],
        "summary": "Bắt đầu livestream",
        "operationId": "Posts_StartLivestream",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "Id bài viết",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/posts/{postId}/livestream/stop": {
      "put": {
        "tags": [
          "Posts"
        ],
        "summary": "Kết thúc livestream",
        "operationId": "Posts_StopLivestream",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "Id bài viết",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/posts/images/{imageId}": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy ảnh trong bài viết",
        "operationId": "Posts_GetPostImage",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "imageId",
            "in": "path",
            "description": "ID ảnh",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "width",
            "in": "query",
            "description": "Chiều rộng ảnh (=0 nếu muốn lấy kích thước đầy đủ, mặc định = 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "height",
            "in": "query",
            "description": "Chiều cao ảnh (=0 nếu muốn lấy kích thước đầy đủ, mặc định = 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "404": {
            "description": "Không tìm thấy tài nguyên"
          }
        }
      }
    },
    "/posts/{postId}/abuse-reports": {
      "post": {
        "tags": [
          "Posts"
        ],
        "summary": "Báo cáo xấu bài viết",
        "operationId": "Posts_ReportAbuse",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "postId",
            "in": "path",
            "description": "ID bài viết",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/posts/link-detail": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy preview của liên kết",
        "operationId": "Posts_GetLinkPreview",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "url",
            "in": "query",
            "description": "Liên kết",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Posts.LinkPreview"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/posts/detected-symbols": {
      "post": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách mã chứng khoán trong nội dung bài viết của liên kết",
        "operationId": "Posts_GetSymbols",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Yêu cầu",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Posts.PostSymbolsRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/posts/popular-symbols/{period}": {
      "get": {
        "tags": [
          "Posts"
        ],
        "summary": "Lấy danh sách mã chứng khoán được chia sẻ nhiều",
        "operationId": "Posts_GetPopularSymbols",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "period",
            "in": "path",
            "description": "Giai đoạn (today: Hôm nay, weekly: Trong tuần, monthly: Trong tháng)",
            "required": true,
            "type": "string"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.PopularSymbol"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/reports/{reportID}": {
      "get": {
        "tags": [
          "Reports"
        ],
        "summary": "Thông tin về 1 báo cáo",
        "operationId": "Reports_GetReport",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "reportID",
            "in": "path",
            "description": "ID của báo cáo",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Reports.ReportInfo"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/reports/search": {
      "get": {
        "tags": [
          "Reports"
        ],
        "summary": "Tìm kiếm báo cáo",
        "operationId": "Reports_Search",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "description": "Thời gian bắt đầu",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Thời gian kết thúc",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "categoryID",
            "in": "query",
            "description": "Danh mục báo cáo (bỏ qua nếu muốn tìm tất cả)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "sourceID",
            "in": "query",
            "description": "Nguồn báo cáo (bỏ qua nếu muốn tìm tất cả)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "sectorID",
            "in": "query",
            "description": "Lĩnh vực báo cáo (bỏ qua nếu muốn tìm tất cả)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "symbol",
            "in": "query",
            "description": "Mã chứng khoán (bỏ qua nếu muốn tìm tất cả)",
            "required": false,
            "type": "string"
          },
          {
            "name": "keywords",
            "in": "query",
            "description": "Từ khóa tìm kiếm",
            "required": false,
            "type": "string"
          },
          {
            "name": "ranking",
            "in": "query",
            "description": "Xếp hạng",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Reports.SearchReportResult"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/reports/counts": {
      "get": {
        "tags": [
          "Reports"
        ],
        "operationId": "Reports_CountByCategory",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "startDate",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "endDate",
            "in": "query",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "sourceID",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "sectorID",
            "in": "query",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "symbol",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Reports.ReportCategoryCount"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/reports/categories": {
      "get": {
        "tags": [
          "Reports"
        ],
        "summary": "Danh sách danh mục báo cáo",
        "operationId": "Reports_GetCategories",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Reports.CategoryInfo"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/reports/sources": {
      "get": {
        "tags": [
          "Reports"
        ],
        "summary": "Danh sách nguồn báo cáo",
        "operationId": "Reports_GetSources",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Reports.SourceInfo"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/rooms/{roomId}": {
      "get": {
        "tags": [
          "Rooms"
        ],
        "summary": "Lấy thông tin về room",
        "operationId": "Rooms_GetRoom",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomDetail"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "Rooms"
        ],
        "summary": "Cập nhật thông tin nhóm",
        "operationId": "Rooms_UpdateRoomInfo",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "info",
            "in": "body",
            "description": "Thông tin room",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomUpdateRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomDetail"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Rooms"
        ],
        "summary": "Xóa nhóm",
        "operationId": "Rooms_DeleteRoom",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/rooms/top/popular": {
      "get": {
        "tags": [
          "Rooms"
        ],
        "summary": "Lấy danh sách nhóm phổ biến",
        "operationId": "Rooms_GetPopularRooms",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Rooms.Room"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/rooms/top/featured": {
      "get": {
        "tags": [
          "Rooms"
        ],
        "summary": "Lấy danh sách nhóm đặc sắc",
        "operationId": "Rooms_GetFeaturedRooms",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Rooms.Room"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/rooms/top/recommended": {
      "get": {
        "tags": [
          "Rooms"
        ],
        "summary": "Lấy danh sách nhóm được khuyến nghị",
        "operationId": "Rooms_GetRecommendedRooms",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Rooms.Room"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/rooms": {
      "post": {
        "tags": [
          "Rooms"
        ],
        "summary": "Tạo room",
        "operationId": "Rooms_CreateRoom",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin room",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomCreationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomDetail"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/rooms/{roomId}/cover-image": {
      "put": {
        "tags": [
          "Rooms"
        ],
        "summary": "Thay đổi ảnh đại diện nhóm",
        "operationId": "Rooms_UpdateRoomCoverImage",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "coverImage",
            "in": "body",
            "description": "Thiết lập nhóm",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomCoverImageUpdateRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/rooms/{roomId}/invitations": {
      "post": {
        "tags": [
          "Rooms"
        ],
        "summary": "Gửi lời mời",
        "operationId": "Rooms_Invite",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin người được mời",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomInvitationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/rooms/{roomId}/requests": {
      "get": {
        "tags": [
          "Rooms"
        ],
        "summary": "Lấy danh sách các yêu cầu tham giá nhóm đang chờ",
        "operationId": "Rooms_GetPendingRequests",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomPendingRequest"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Rooms"
        ],
        "summary": "Gửi yêu cầu tham gia nhóm",
        "operationId": "Rooms_SendRequest",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/rooms/{roomId}/requests/{requestId}": {
      "put": {
        "tags": [
          "Rooms"
        ],
        "summary": "Duyệt yêu cầu tham gia nhóm",
        "operationId": "Rooms_UpdateRequest",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "requestId",
            "in": "path",
            "description": "Id của yêu cầu",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "action",
            "in": "body",
            "description": "Quyết định với yêu cầu tham gia nhóm",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomRequestAction"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Rooms"
        ],
        "summary": "Xóa yêu cầu tham gia nhóm",
        "operationId": "Rooms_DeleteRequest",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "requestId",
            "in": "path",
            "description": "Id của yêu cầu",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/rooms/{roomId}/members/{userId}/role": {
      "put": {
        "tags": [
          "Rooms"
        ],
        "summary": "Gán quyền cho thành viên",
        "operationId": "Rooms_AssignRole",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "userId",
            "in": "path",
            "description": "Id của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Quyền cần gán",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomAssignmentRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/rooms/{roomId}/members": {
      "get": {
        "tags": [
          "Rooms"
        ],
        "summary": "Lấy danh sách thành viên nhóm",
        "operationId": "Rooms_GetMembers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "keywords",
            "in": "query",
            "description": "Từ khóa tìm kiếm (null để lấy tất)",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomMember"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/rooms/{roomId}/members/{userId}": {
      "get": {
        "tags": [
          "Rooms"
        ],
        "summary": "Lấy thông tin thành viên trong nhóm",
        "operationId": "Rooms_GetMembers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "userId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomMember"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "Rooms"
        ],
        "summary": "Xóa thành viên khỏi nhóm",
        "operationId": "Rooms_RemoveMember",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "userId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/rooms/{roomId}/blocked-users": {
      "get": {
        "tags": [
          "Rooms"
        ],
        "summary": "Lấy danh sách người dùng bị chặn",
        "operationId": "Rooms_GetBlockedUsers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "Rooms"
        ],
        "summary": "Chặn người dùng",
        "operationId": "Rooms_BlockUser",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Người dùng bị chặn",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomBlockedUser"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/rooms/{roomId}/blocked-users/{userId}": {
      "delete": {
        "tags": [
          "Rooms"
        ],
        "summary": "Bỏ chặn người dùng",
        "operationId": "Rooms_UnblockUser",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "userId",
            "in": "path",
            "description": "Id người dùng đang bị chặn",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/rooms/{roomId}/posts": {
      "get": {
        "tags": [
          "Rooms"
        ],
        "summary": "Lấy danh sách bài viết trong nhóm",
        "operationId": "Rooms_GetPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/rooms/{roomId}/sticky-posts": {
      "get": {
        "tags": [
          "Rooms"
        ],
        "summary": "Lấy danh sách bài viết đính trong nhóm",
        "operationId": "Rooms_GetStickyPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/rooms/{roomId}/posts/{postId}/sticky": {
      "put": {
        "tags": [
          "Rooms"
        ],
        "summary": "Cập nhật trạng thái đính cho bài viết trong nhóm",
        "operationId": "Rooms_UpdateSticky",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "roomId",
            "in": "path",
            "description": "Id nhóm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "postId",
            "in": "path",
            "description": "Id của bài viết",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "action",
            "in": "body",
            "description": "Trạng thái đính",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomStickyPostAction"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-write"
            ]
          }
        ]
      }
    },
    "/search": {
      "get": {
        "tags": [
          "Search"
        ],
        "summary": "Tìm kiếm",
        "operationId": "Search_Search",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "keywords",
            "in": "query",
            "description": "Từ khóa tìm kiếm",
            "required": true,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại kết quả trả về (symbol, individual, hashtag, user, room, post). Mặc định là \"symbol\"",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.SearchItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "search"
            ]
          }
        ]
      }
    },
    "/search/exact": {
      "get": {
        "tags": [
          "Search"
        ],
        "summary": "Tìm kiếm chính xác",
        "operationId": "Search_SearchExact",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "keywords",
            "in": "query",
            "description": "Từ khóa tìm kiếm",
            "required": true,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại kết quả trả về (symbol, individual, hashtag, user, room, post, news). Mặc định là \"symbol\"",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "search"
            ]
          }
        ]
      }
    },
    "/v2/broker-users/{userId}/accounts/{accountId}/orders/two-fa": {
      "get": {
        "tags": [
          "SSITwoFA"
        ],
        "operationId": "SSITwoFA_GetTwoFAInfo",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Trading.Brokers.SSI.SSITwoFAInfo"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      }
    },
    "/v2/broker-users/{userId}/accounts/{accountId}/orders/two-fa/approvals": {
      "post": {
        "tags": [
          "SSITwoFA"
        ],
        "operationId": "SSITwoFA_CreateApproval",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Trading.Brokers.SSI.SSITwoFAApprovalRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Trading.Brokers.SSI.SSITwoFAApproval"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      }
    },
    "/v2/broker-users/{userId}/accounts/{accountId}/orders/two-fa/approvals/status": {
      "post": {
        "tags": [
          "SSITwoFA"
        ],
        "operationId": "SSITwoFA_GetApprovalStatus",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "accountId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "request",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Trading.Brokers.SSI.SSITwoFAApprovalStatusRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "schema": {
              "$ref": "#/definitions/FireAnt.Trading.Brokers.SSI.SSITwoFAApprovalStatus"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "orders-write"
            ]
          }
        ]
      }
    },
    "/surveys": {
      "get": {
        "tags": [
          "Surveys"
        ],
        "summary": "Danh sách khảo sát đang hiệu lực và phù hợp với người dùng hiện tại",
        "description": "Quy tắc đối tượng của khảo sát được đánh giá theo: tài khoản (hạng thành viên, eKYC, role, tên đăng nhập)\r\nvà các tham số client gửi lên (platform, appVersion, targetAudience).",
        "operationId": "Surveys_GetSurveys",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "platform",
            "in": "query",
            "description": "Nền tảng: ios | android | web",
            "required": false,
            "type": "string"
          },
          {
            "name": "appVersion",
            "in": "query",
            "description": "Phiên bản ứng dụng (x.y.z)",
            "required": false,
            "type": "string"
          },
          {
            "name": "targetAudience",
            "in": "query",
            "description": "Tag tự do (nhóm đối tượng) - tùy chọn",
            "required": false,
            "type": "string"
          },
          {
            "name": "onlyUnanswered",
            "in": "query",
            "description": "true = chỉ lấy khảo sát chưa trả lời",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "excludeDismissed",
            "in": "query",
            "description": "true = bỏ khảo sát người dùng đã \"Để sau\" / \"Không quan tâm\" (mặc định false: vẫn trả, kèm isDismissed)",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "targetType",
            "in": "query",
            "description": "Lọc theo đối tượng gắn kèm: post, symbol, room, user... (đi cùng targetKey)",
            "required": false,
            "type": "string"
          },
          {
            "name": "targetKey",
            "in": "query",
            "description": "Khóa đối tượng: postId, mã CK, roomId...",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên (mặc định 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số bản ghi tối đa (mặc định 20, tối đa 200)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyPagedResult[FireAnt.Api.Models.Surveys.SurveyItem]"
            }
          },
          "401": {
            "description": "Chưa đăng nhập"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/surveys/target/{targetType}/{targetKey}": {
      "get": {
        "tags": [
          "Surveys"
        ],
        "summary": "Khảo sát đang mở gắn với một đối tượng cụ thể (bài viết, mã chứng khoán, hội nhóm...)",
        "description": "Dùng cho trang chi tiết của đối tượng (ví dụ trang mã FPT gọi /surveys/target/symbol/FPT, bài viết gọi /surveys/target/post/40203799).\r\nĐã lọc theo quy tắc đối tượng người dùng; khách chưa đăng nhập truyền anonymousId và chỉ nhận khảo sát ẩn danh hoặc showToGuests.\r\nLoại chuẩn: post, symbol, room, user, event, article, url. Thứ tự: bản nháp đang làm, priority, sắp hết hạn, mới publish.",
        "operationId": "Surveys_GetSurveysForTarget",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "targetType",
            "in": "path",
            "description": "Loại đối tượng (chữ thường)",
            "required": true,
            "type": "string"
          },
          {
            "name": "targetKey",
            "in": "path",
            "description": "Khóa đối tượng (mã CK không phân biệt hoa thường)",
            "required": true,
            "type": "string"
          },
          {
            "name": "anonymousId",
            "in": "query",
            "description": "Định danh khách ẩn danh (khi chưa đăng nhập)",
            "required": false,
            "type": "string"
          },
          {
            "name": "platform",
            "in": "query",
            "description": "Nền tảng: ios | android | web",
            "required": false,
            "type": "string"
          },
          {
            "name": "appVersion",
            "in": "query",
            "description": "Phiên bản ứng dụng (x.y.z)",
            "required": false,
            "type": "string"
          },
          {
            "name": "targetAudience",
            "in": "query",
            "description": "Tag tự do",
            "required": false,
            "type": "string"
          },
          {
            "name": "onlyUnanswered",
            "in": "query",
            "description": "true = chỉ lấy khảo sát chưa trả lời",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "excludeDismissed",
            "in": "query",
            "description": "true = bỏ khảo sát đã bỏ qua",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số bản ghi tối đa (mặc định 5)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Danh sách khảo sát (rỗng nếu không có)",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyPagedResult[FireAnt.Api.Models.Surveys.SurveyItem]"
            }
          }
        }
      }
    },
    "/surveys/next": {
      "get": {
        "tags": [
          "Surveys"
        ],
        "summary": "Khảo sát duy nhất nên mời người dùng làm lúc này (banner / bottom sheet)",
        "description": "Server chọn theo quy tắc: đang hiệu lực, đúng đối tượng, displayMode Banner (1) hoặc Prompt (2),\r\nchưa trả lời, chưa bỏ qua (Để sau còn hạn / Không quan tâm). Thứ tự ưu tiên: đang có bản nháp (hasDraft) -&gt;\r\npriority cao -&gt; sắp hết hạn -&gt; mới publish. Client dùng displayMode để quyết định hiện banner hay bottom sheet,\r\ndismissible để hiện nút \"Để sau\" / \"Không quan tâm\". Khách chưa đăng nhập truyền anonymousId: nhận khảo sát ẩn danh\r\nhoặc khảo sát yêu cầu đăng nhập có showToGuests = true (client hiện \"Đăng nhập để tham gia\" khi isAnonymous = false).",
        "operationId": "Surveys_GetNextSurvey",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "anonymousId",
            "in": "query",
            "description": "Định danh khách ẩn danh (khi chưa đăng nhập)",
            "required": false,
            "type": "string"
          },
          {
            "name": "platform",
            "in": "query",
            "description": "Nền tảng: ios | android | web",
            "required": false,
            "type": "string"
          },
          {
            "name": "appVersion",
            "in": "query",
            "description": "Phiên bản ứng dụng (x.y.z)",
            "required": false,
            "type": "string"
          },
          {
            "name": "targetAudience",
            "in": "query",
            "description": "Tag tự do",
            "required": false,
            "type": "string"
          },
          {
            "name": "targetType",
            "in": "query",
            "description": "Tùy chọn: chọn khảo sát cho đối tượng cụ thể (post, symbol, room...). Không truyền = lời mời chung, loại khảo sát có gắn đối tượng",
            "required": false,
            "type": "string"
          },
          {
            "name": "targetKey",
            "in": "query",
            "description": "Khóa đối tượng đi cùng targetType",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Khảo sát nên hiển thị",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyItem"
            }
          },
          "204": {
            "description": "Không có khảo sát nào cần mời",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyItem"
            }
          },
          "401": {
            "description": "Chưa đăng nhập và không có anonymousId"
          }
        }
      }
    },
    "/surveys/{surveyId}/dismiss": {
      "post": {
        "tags": [
          "Surveys"
        ],
        "summary": "Bỏ qua khảo sát: \"Để sau\" (ẩn snoozeDays ngày) hoặc \"Không quan tâm\" (permanent = true, ẩn hẳn)",
        "description": "Chỉ áp dụng cho khảo sát có dismissible = true. Khảo sát bị ẩn khỏi GET /surveys/next và GET /surveys?excludeDismissed=true. Bấm nhiều lần sẽ gia hạn thời gian ẩn.",
        "operationId": "Surveys_DismissSurvey",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "anonymousId, platform, permanent",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyDismissRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Trạng thái bỏ qua hiện tại",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyDismissalItem"
            }
          },
          "400": {
            "description": "Khảo sát không cho phép bỏ qua"
          },
          "401": {
            "description": "Chưa đăng nhập và không có anonymousId"
          },
          "404": {
            "description": "Khảo sát không tồn tại hoặc không còn hiệu lực"
          }
        }
      },
      "delete": {
        "tags": [
          "Surveys"
        ],
        "summary": "Hiện lại khảo sát đã bỏ qua (người dùng đổi ý / mở lại từ trang Khảo sát)",
        "operationId": "Surveys_ClearDismissal",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "anonymousId",
            "in": "query",
            "description": "Định danh khách ẩn danh (khi chưa đăng nhập)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          }
        }
      }
    },
    "/surveys/{surveyId}": {
      "get": {
        "tags": [
          "Surveys"
        ],
        "summary": "Chi tiết khảo sát kèm câu hỏi, lựa chọn và điều kiện rẽ nhánh",
        "description": "Câu hỏi loại Section dùng để chia nhóm / ngắt trang. Mỗi câu hỏi có thể có conditions:\r\nclient chỉ hiển thị câu hỏi khi các điều kiện (kết hợp theo conditionLogic) thỏa trên câu trả lời của câu nguồn.\r\nLựa chọn của câu hỏi có randomizeOptions đã được xáo thứ tự.\r\nKhảo sát cho phép ẩn danh có thể gọi không cần token (truyền anonymousId để tính hasResponded / hasDraft).\r\nKhảo sát yêu cầu đăng nhập nhưng showToGuests = true cũng đọc được khi chưa đăng nhập (chỉ xem; lưu nháp / gửi trả 401).\r\nTrả 403 nếu người dùng không thuộc đối tượng của khảo sát.",
        "operationId": "Surveys_GetSurvey",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "anonymousId",
            "in": "query",
            "description": "Định danh khách ẩn danh (tùy chọn)",
            "required": false,
            "type": "string"
          },
          {
            "name": "platform",
            "in": "query",
            "description": "Nền tảng: ios | android | web",
            "required": false,
            "type": "string"
          },
          {
            "name": "appVersion",
            "in": "query",
            "description": "Phiên bản ứng dụng",
            "required": false,
            "type": "string"
          },
          {
            "name": "targetAudience",
            "in": "query",
            "description": "Tag tự do",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyDetail"
            }
          },
          "401": {
            "description": "Khảo sát yêu cầu đăng nhập"
          },
          "403": {
            "description": "Không thuộc đối tượng khảo sát"
          },
          "404": {
            "description": "Khảo sát không tồn tại hoặc chưa publish"
          }
        }
      }
    },
    "/surveys/{surveyId}/responses": {
      "post": {
        "tags": [
          "Surveys"
        ],
        "summary": "Gửi phản hồi khảo sát (hoàn thành)",
        "description": "Mỗi phần tử trong answers tương ứng một câu hỏi. Tùy loại câu hỏi:\r\nSingleChoice/Dropdown/MultipleChoice: optionIds (+ otherText nếu chọn \"Khác\");\r\nText: text; Rating/Number/Slider: number; YesNo: boolValue; Date: date; DateRange: date + dateTo;\r\nMatrix: matrix[] (rowOptionId + columnOptionId hoặc number); Ranking: rankedOptionIds;\r\nFileUpload: fileUrls (từ endpoint files); Symbol: symbols.\r\nCâu trả lời của câu hỏi bị ẩn bởi điều kiện rẽ nhánh sẽ bị bỏ qua. Bản nháp đang có (nếu có) được chuyển thành hoàn thành.",
        "operationId": "Surveys_SubmitResponse",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Nội dung phản hồi",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyResponseRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Ghi nhận thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveySubmitResult"
            }
          },
          "400": {
            "description": "Dữ liệu không hợp lệ / khảo sát không nhận phản hồi"
          },
          "401": {
            "description": "Khảo sát yêu cầu đăng nhập"
          },
          "403": {
            "description": "Không thuộc đối tượng khảo sát"
          },
          "404": {
            "description": "Khảo sát không tồn tại"
          },
          "409": {
            "description": "Đã trả lời khảo sát này"
          }
        }
      }
    },
    "/surveys/{surveyId}/draft": {
      "get": {
        "tags": [
          "Surveys"
        ],
        "summary": "Bản nháp hiện tại của người dùng (kèm câu trả lời đã lưu)",
        "operationId": "Surveys_GetDraft",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "anonymousId",
            "in": "query",
            "description": "Định danh khách ẩn danh (khi không đăng nhập)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyResponseItem"
            }
          },
          "204": {
            "description": "Không có bản nháp",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyResponseItem"
            }
          }
        }
      },
      "put": {
        "tags": [
          "Surveys"
        ],
        "summary": "Lưu tiến độ trả lời (bản nháp) - mỗi người một bản nháp cho mỗi khảo sát",
        "description": "Gửi toàn bộ câu trả lời hiện có (ghi đè bản nháp cũ). Chỉ kiểm tra kiểu dữ liệu, không bắt buộc câu hỏi.\r\nKhi gọi POST responses, bản nháp sẽ được chuyển thành phản hồi hoàn thành.",
        "operationId": "Surveys_SaveDraft",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Câu trả lời hiện có",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyResponseRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Đã lưu nháp (responseId của bản nháp)",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveySubmitResult"
            }
          },
          "400": {
            "description": "Dữ liệu không hợp lệ / khảo sát không nhận phản hồi"
          },
          "409": {
            "description": "Đã hoàn thành khảo sát này"
          }
        }
      },
      "delete": {
        "tags": [
          "Surveys"
        ],
        "summary": "Xóa bản nháp của người dùng",
        "operationId": "Surveys_DeleteDraft",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "anonymousId",
            "in": "query",
            "description": "Định danh khách ẩn danh (khi không đăng nhập)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          }
        }
      }
    },
    "/surveys/{surveyId}/files": {
      "post": {
        "tags": [
          "Surveys"
        ],
        "summary": "Tải tệp lên cho câu hỏi loại FileUpload (multipart/form-data, có thể nhiều tệp)",
        "description": "Đuôi tệp và dung lượng được kiểm tra theo cấu hình của câu hỏi. URL trả về dùng trong answers[].fileUrls khi gửi phản hồi.",
        "operationId": "Surveys_UploadFiles",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "questionId",
            "in": "query",
            "description": "ID câu hỏi loại FileUpload",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "201": {
            "description": "Danh sách tệp đã lưu",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyFileUploadResult"
              }
            }
          },
          "400": {
            "description": "Tệp không hợp lệ"
          },
          "415": {
            "description": "Không phải multipart/form-data"
          }
        }
      }
    },
    "/surveys/{surveyId}/my-response": {
      "get": {
        "tags": [
          "Surveys"
        ],
        "summary": "Phản hồi hoàn thành gần nhất của người dùng hiện tại cho khảo sát",
        "operationId": "Surveys_GetMyResponse",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "anonymousId",
            "in": "query",
            "description": "Định danh khách ẩn danh (khi không đăng nhập)",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyResponseItem"
            }
          },
          "204": {
            "description": "Chưa trả lời khảo sát này",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyResponseItem"
            }
          }
        }
      }
    },
    "/surveys/{surveyId}/results": {
      "get": {
        "tags": [
          "Surveys"
        ],
        "summary": "Kết quả tổng hợp của khảo sát (chỉ khi khảo sát bật showResults)",
        "operationId": "Surveys_GetResults",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyStatistics"
            }
          },
          "403": {
            "description": "Khảo sát không công khai kết quả"
          },
          "404": {
            "description": "Khảo sát không tồn tại"
          }
        }
      }
    },
    "/surveys/{surveyId}/view": {
      "post": {
        "tags": [
          "Surveys"
        ],
        "summary": "Ghi nhận một lượt xem khảo sát (mở khảo sát / hiện thẻ mời) - dùng tính tỷ lệ bắt đầu trong thống kê",
        "description": "Chỉ đếm khi khảo sát đang chạy. Client nên gọi tối đa 1 lần mỗi phiên cho mỗi khảo sát.",
        "operationId": "Surveys_TrackView",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "platform: ios | android | web",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyViewRequest"
            }
          }
        ],
        "responses": {
          "204": {
            "description": "Đã ghi nhận",
            "schema": {
              "type": "object"
            }
          }
        }
      }
    },
    "/admin/surveys": {
      "get": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Danh sách khảo sát (mọi trạng thái)",
        "operationId": "SurveysAdmin_GetSurveys",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "status",
            "in": "query",
            "description": "Lọc theo trạng thái: 0 Draft, 1 Published, 2 Closed, 3 Archived (bỏ trống = tất cả) (0 = Draft, 1 = Published, 2 = Closed, 3 = Archived)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1,
              2,
              3
            ]
          },
          {
            "name": "keyword",
            "in": "query",
            "description": "Tìm theo tiêu đề / mã / mô tả",
            "required": false,
            "type": "string"
          },
          {
            "name": "includeDeleted",
            "in": "query",
            "description": "Bao gồm khảo sát đã xóa",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên (mặc định 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số bản ghi tối đa (mặc định 20, tối đa 500)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyPagedResult[FireAnt.Api.Models.Surveys.SurveyItem]"
            }
          },
          "403": {
            "description": "Không có quyền"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Tạo khảo sát mới (trạng thái Draft)",
        "operationId": "SurveysAdmin_CreateSurvey",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin khảo sát kèm câu hỏi, lựa chọn, điều kiện rẽ nhánh, quy tắc đối tượng",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyChangeRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Tạo thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyDetail"
            }
          },
          "400": {
            "description": "Dữ liệu không hợp lệ"
          },
          "409": {
            "description": "Mã khảo sát đã tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/surveys/{surveyId}": {
      "get": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Chi tiết khảo sát kèm câu hỏi, điều kiện rẽ nhánh, quy tắc đối tượng (mọi trạng thái)",
        "operationId": "SurveysAdmin_GetSurvey",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyDetail"
            }
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "put": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Cập nhật khảo sát",
        "description": "questions = null: giữ nguyên bộ câu hỏi; khác null: thay thế toàn bộ (chỉ khi khảo sát chưa có phản hồi hoàn thành).\r\naudienceRules = null: giữ nguyên; khác null: thay thế toàn bộ (được phép bất kỳ lúc nào).",
        "operationId": "SurveysAdmin_UpdateSurvey",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Thông tin cập nhật",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyDetail"
            }
          },
          "400": {
            "description": "Dữ liệu không hợp lệ / khảo sát đã có phản hồi"
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Xóa khảo sát (xóa mềm, giữ lại dữ liệu phản hồi, hủy thông báo chờ gửi)",
        "operationId": "SurveysAdmin_DeleteSurvey",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int32",
              "type": "integer"
            }
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/surveys/{surveyId}/status": {
      "put": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Thay đổi trạng thái khảo sát (publish / đóng / lưu trữ / về nháp)",
        "operationId": "SurveysAdmin_ChangeStatus",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Trạng thái mới",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyStatusChangeRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyDetail"
            }
          },
          "400": {
            "description": "Chuyển trạng thái không hợp lệ"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/surveys/{surveyId}/duplicate": {
      "post": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Nhân bản khảo sát thành bản nháp mới (câu hỏi, điều kiện, quy tắc đối tượng; không sao chép phản hồi)",
        "operationId": "SurveysAdmin_DuplicateSurvey",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát nguồn",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "201": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyDetail"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/surveys/{surveyId}/statistics": {
      "get": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Thống kê tổng hợp (chỉ phản hồi hoàn thành): theo câu hỏi, lựa chọn, phân phối điểm, ô ma trận, mã CK",
        "operationId": "SurveysAdmin_GetStatistics",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyStatistics"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/surveys/{surveyId}/responses": {
      "get": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Danh sách phản hồi của khảo sát",
        "operationId": "SurveysAdmin_GetResponses",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "userName",
            "in": "query",
            "description": "Lọc theo người trả lời",
            "required": false,
            "type": "string"
          },
          {
            "name": "fromDate",
            "in": "query",
            "description": "Từ thời điểm gửi",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "toDate",
            "in": "query",
            "description": "Đến thời điểm gửi",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "platform",
            "in": "query",
            "description": "Lọc theo nền tảng (ios/android/web)",
            "required": false,
            "type": "string"
          },
          {
            "name": "responseStatus",
            "in": "query",
            "description": "Trạng thái: 1 Completed (mặc định), 0 Draft; bỏ trống và truyền all=true để lấy tất cả (0 = Draft, 1 = Completed)",
            "required": false,
            "type": "integer",
            "format": "int32",
            "enum": [
              0,
              1
            ]
          },
          {
            "name": "all",
            "in": "query",
            "description": "true = lấy cả bản nháp và hoàn thành",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "includeAnswers",
            "in": "query",
            "description": "Kèm câu trả lời chi tiết (mặc định true)",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số bản ghi tối đa (mặc định 50, tối đa 1000)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyPagedResult[FireAnt.Api.Models.Surveys.SurveyResponseItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/surveys/{surveyId}/responses/{responseId}": {
      "get": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Chi tiết một phản hồi (hoàn thành hoặc nháp)",
        "operationId": "SurveysAdmin_GetResponse",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "responseId",
            "in": "path",
            "description": "ID phản hồi",
            "required": true,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyResponseItem"
            }
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Xóa một phản hồi (xóa cứng, kèm câu trả lời)",
        "operationId": "SurveysAdmin_DeleteResponse",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "responseId",
            "in": "path",
            "description": "ID phản hồi",
            "required": true,
            "type": "integer",
            "format": "int64"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "format": "int64",
              "type": "integer"
            }
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/surveys/{surveyId}/questions/{questionId}/text-answers": {
      "get": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Duyệt các câu trả lời dạng text của một câu hỏi (tự luận, \"Khác\", mã CK, URL tệp)",
        "operationId": "SurveysAdmin_GetTextAnswers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "questionId",
            "in": "path",
            "description": "ID câu hỏi",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "keyword",
            "in": "query",
            "description": "Tìm trong nội dung trả lời",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số bản ghi tối đa (mặc định 50, tối đa 1000)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "optionId",
            "in": "query",
            "description": "FillInBlank: chỉ lấy câu trả lời của một ô trống (optionId của ô)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyPagedResult[FireAnt.Api.Models.Surveys.SurveyTextAnswerItem]"
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/surveys/assets": {
      "post": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Tải ảnh dùng trong nội dung khảo sát: ảnh bìa, ảnh lựa chọn, ảnh câu hotspot (multipart/form-data, có thể nhiều ảnh)",
        "description": "jpg, png, webp tối đa 5 MB; gif tối đa 3 MB (giữ nguyên ảnh động). Ảnh jpg/png lớn hơn 1600px được thu nhỏ và xoay đúng chiều theo EXIF.",
        "operationId": "SurveysAdmin_UploadAssets",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "responses": {
          "201": {
            "description": "Danh sách ảnh đã lưu (url, width, height)",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyAssetUploadResult"
              }
            }
          },
          "400": {
            "description": "Ảnh không hợp lệ"
          },
          "415": {
            "description": "Không phải multipart/form-data"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/surveys/{surveyId}/export": {
      "get": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Xuất toàn bộ phản hồi hoàn thành ra file CSV (UTF-8, mở được bằng Excel)",
        "operationId": "SurveysAdmin_ExportResponses",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "File CSV",
            "schema": {
              "type": "object"
            }
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      }
    },
    "/admin/surveys/{surveyId}/notifications": {
      "get": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Danh sách thông báo của khảo sát",
        "operationId": "SurveysAdmin_GetNotifications",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyNotificationItem"
              }
            }
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "post": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Tạo thông báo push cho khảo sát: gửi ngay hoặc lên lịch (Hangfire)",
        "description": "type = 1 Publish: giới thiệu khảo sát; type = 2 Reminder: nhắc người có bản nháp / trong danh sách chưa hoàn thành.\r\nNgười nhận: userNames chỉ định, hoặc quy tắc đối tượng UserName của khảo sát, hoặc topic FCM (gửi hàng loạt).\r\nNgười đã hoàn thành luôn bị loại trừ (trừ khi gửi theo topic).",
        "operationId": "SurveysAdmin_CreateNotification",
        "consumes": [
          "application/json",
          "text/json"
        ],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "request",
            "in": "body",
            "description": "Nội dung thông báo",
            "required": true,
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyNotificationRequest"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Đã tạo và lên lịch",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyNotificationItem"
            }
          },
          "400": {
            "description": "Dữ liệu không hợp lệ"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/surveys/{surveyId}/notifications/{notificationId}": {
      "get": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Chi tiết một thông báo (trạng thái, số người nhận, số đã gửi, lỗi)",
        "operationId": "SurveysAdmin_GetNotification",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "notificationId",
            "in": "path",
            "description": "ID thông báo",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyNotificationItem"
            }
          },
          "404": {
            "description": "Không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-read"
            ]
          }
        ]
      },
      "delete": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Hủy thông báo đang chờ gửi (xóa job Hangfire)",
        "operationId": "SurveysAdmin_CancelNotification",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "notificationId",
            "in": "path",
            "description": "ID thông báo",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Đã hủy",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyNotificationItem"
            }
          },
          "400": {
            "description": "Thông báo không ở trạng thái chờ"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/admin/surveys/{surveyId}/notifications/{notificationId}/resend": {
      "post": {
        "tags": [
          "SurveysAdmin"
        ],
        "summary": "Gửi lại thông báo đã lỗi hoặc đã hủy (gửi ngay)",
        "operationId": "SurveysAdmin_ResendNotification",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "surveyId",
            "in": "path",
            "description": "ID khảo sát",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "notificationId",
            "in": "path",
            "description": "ID thông báo",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Đã đưa vào hàng đợi",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyNotificationItem"
            }
          },
          "400": {
            "description": "Trạng thái không cho phép gửi lại"
          }
        },
        "security": [
          {
            "oauth2": [
              "user-data-write"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Thông tin mã chứng khoán",
        "operationId": "Symbols_GetSymbol",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.SymbolItem"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/search": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Tìm kiếm mã chứng khoán",
        "operationId": "Symbols_Search",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "keywords",
            "in": "query",
            "description": "Từ khóa tìm kiếm",
            "required": true,
            "type": "string"
          },
          {
            "name": "exchange",
            "in": "query",
            "description": "Sàn (HSX, HNX, UPCOM hoặc bỏ trống nếu tìm trên tất cả các sàn)",
            "required": false,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại chứng khoán (stock, futures, warrant, index, fund, bond)",
            "required": false,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.SymbolItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/movers": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "TOP cổ phiếu biến động",
        "operationId": "Symbols_GetTopMovers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "exchange",
            "in": "query",
            "description": "Sàn (HSX, HNX, UPCOM hoặc bỏ trống nếu tìm trên tất cả các sàn)",
            "required": false,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại chứng khoán (stock, warrant, crypto...)",
            "required": false,
            "type": "string"
          },
          {
            "name": "topType",
            "in": "query",
            "description": "Loại TOP (Actives, Gainers, Losers)",
            "required": false,
            "type": "string"
          },
          {
            "name": "count",
            "in": "query",
            "description": "Số lượng bản ghi",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/proprietary-trading-value": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "TOP cổ phiếu được tự doanh mua/bán",
        "operationId": "Symbols_ProprietaryTradingNetValue",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "exchange",
            "in": "query",
            "description": "Sàn (HSX, HNX, UPCOM hoặc bỏ trống nếu tìm trên tất cả các sàn)",
            "required": false,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại (Deal, Putthrough, Total)",
            "required": false,
            "type": "string"
          },
          {
            "name": "topType",
            "in": "query",
            "description": "Loại top (Buy, Sell, BuySell)",
            "required": false,
            "type": "string"
          },
          {
            "name": "count",
            "in": "query",
            "description": "Số lượng bản ghi",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.SymbolValueItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/contribute-to-index": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "TOP mã chứng khoán đóng góp vào index",
        "operationId": "Symbols_TopContributeToIndex",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "exchange",
            "in": "query",
            "description": "Sàn (HSX, HNX, UPCOM)",
            "required": false,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại top (1: Đóng góp tăng index, 2: Đóng góp giảm index)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "count",
            "in": "query",
            "description": "Số lượng bản ghi",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.SymbolValueItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/posts": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy danh sách bài viết liên quan tới Mã chứng khoán",
        "operationId": "Symbols_GetSymbolPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/rooms": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy danh sách nhóm liên quan tới Mã chứng khoán",
        "operationId": "Symbols_GetSymbolRooms",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Rooms.Room"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/historical-quotes": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy giá quá khứ của Mã chứng khoán",
        "operationId": "Symbols_GetHistoricalQuotes",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Ngày bắt đầu",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Ngày kết thúc",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Quote.HistoricalQuote"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/financial-reports": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy báo cáo tài chính tóm tắt của doanh nghiệp",
        "operationId": "Symbols_GetSummaryFinancialReports",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại báo cáo (BS: Cân đối kế toán, IS: Kết quả SXKD)",
            "required": true,
            "type": "string"
          },
          {
            "name": "period",
            "in": "query",
            "description": "Giai đoạn (Q: Quý, Y: Năm)",
            "required": false,
            "type": "string"
          },
          {
            "name": "compact",
            "in": "query",
            "description": "Rút gọn (Chỉ lấy chỉ tiêu quan trọng, mặc định = 1)",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Mặc địch là 5)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Finance.SummaryFinancialReports"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/full-financial-reports": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy báo cáo tài chính đầy đủ của doanh nghiệp",
        "operationId": "Symbols_GetFinancialReports",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại báo cáo (1: Cân đối kế toán, 2: Kết quả SXKD, 3: Lưu chuyển tiền tệ trực tiếp, 4: Lưu chuyển tiền tệ gián tiếp)",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "year",
            "in": "query",
            "description": "Năm lấy báo cáo",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "quarter",
            "in": "query",
            "description": "Quý lấy báo cáo",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Mặc địch là 5)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Finance.FinancialReportRow"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/financial-indicators": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy chỉ tiêu tài chính của doanh nghiệp",
        "operationId": "Symbols_GetFinancialIndicators",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Finance.FinancialIndicator"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/fundamental": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy thông tin cơ bản, quan trọng của 1 Mã chứng khoán",
        "operationId": "Symbols_GetSymbolFundamental",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Institutions.Fundamental"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/profile": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy hồ sơ công ty",
        "operationId": "Symbols_GetInstitutionProfile",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán (với tổ chức đã niêm yết)/ID của tổ chức",
            "required": true,
            "type": "string"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Institutions.CompanyInfo"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/subsidiaries": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy danh sách công ty con/liên kết của 1 tổ chức",
        "operationId": "Symbols_GetSubCompanies",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán (với tổ chức đã niêm yết)/ID của tổ chức",
            "required": true,
            "type": "string"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Institutions.SubCompanyInfo"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/holders": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy danh sách cổ đông lớn của 1 tổ chức",
        "operationId": "Symbols_GetMajorHolders",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán (với tổ chức đã niêm yết)/ID của tổ chức",
            "required": true,
            "type": "string"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Institutions.MajorHolder"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/officers": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy danh sách ban lãnh đạo của 1 tổ chức",
        "operationId": "Symbols_GetOfficers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán (với tổ chức đã niêm yết)/ID của tổ chức",
            "required": true,
            "type": "string"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Institutions.CompanyOfficer"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/holder-transactions": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy danh sách giao dịch (Mua/Bán) của các cổ đông lớn (với cổ phiếu của tổ chức)",
        "operationId": "Symbols_GetMajorHolderTransactions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán (với tổ chức đã niêm yết)/ID của tổ chức",
            "required": true,
            "type": "string"
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Từ ngày",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Đến ngày",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "executedOnly",
            "in": "query",
            "description": "Chỉ lấy giao dịch đã thưc hiện",
            "required": false,
            "type": "boolean"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Institutions.MajorHolderTransaction"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/timescale-marks": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy các mốc sự kiện theo thời gian (Báo cáo tài chính, Cổ tức,...)",
        "operationId": "Symbols_GetTimescaleMarks",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán (với tổ chức đã niêm yết)/ID của tổ chức",
            "required": true,
            "type": "string"
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Từ ngày",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Đến ngày",
            "required": true,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Institutions.TimescaleMark"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/transactions": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy danh sách giao dịch (Mua/Bán) của tổ chức",
        "operationId": "Symbols_GetTransactions",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán (với tổ chức đã niêm yết)/ID của tổ chức",
            "required": true,
            "type": "string"
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Từ ngày",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Đến ngày",
            "required": false,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Institutions.MajorHolderTransaction"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/transactions/{transactionID}": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy chi tiết 1 giao dịch",
        "operationId": "Symbols_GetTransaction",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "transactionID",
            "in": "path",
            "description": "ID giao dịch",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Institutions.MajorHolderTransaction"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/dividends": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy thống kê cổ tức hàng năm",
        "operationId": "Symbols_GetDividends",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "count",
            "in": "query",
            "description": "Số lượng",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Institutions.EquityDividend"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/rrg": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy thống kê RRG",
        "operationId": "Symbols_GetRRG",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "startDate",
            "in": "query",
            "description": "Ngày bắt đầu",
            "required": true,
            "type": "string",
            "format": "date-time"
          },
          {
            "name": "endDate",
            "in": "query",
            "description": "Ngày kết thúc",
            "required": true,
            "type": "string",
            "format": "date-time"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Statistics.RRGValue"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/estimated-price": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy thông tin định giá",
        "operationId": "Symbols_GetEstimatedPrice",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Statistics.EstimatedPrice"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/commodity-contract": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy thông tin chi tiết hợp đồng tương lai hàng hóa phái sinh",
        "operationId": "Symbols_GetCommodityContractInfo",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã hàng hóa CQG",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Commodities.ContractInfo"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/commodities/{category}": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy danh sách hợp đồng tương lai hàng hóa phái sinh theo danh mục",
        "operationId": "Symbols_GetCommoditiesByCategory",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "category",
            "in": "path",
            "description": "Nhóm hàng hóa (Metals: Kim loại, Enegies: Năng lượng, Grains: Nông sản, Softs: Nguyên liệu công nghiệp).",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Commodities.ContractInfo"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/warrant-info": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy thông tin chi tiết chứng quyền có đảm bảo",
        "operationId": "Symbols_GetWarrantInfo",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng quyền",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Warrant.WarrantInfo"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/crypto-info": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy thông tin chi tiết crypto",
        "operationId": "Symbols_GetCryptoInfo",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã crypto",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Crypto.CryptoInfo"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/financial-data": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy thông tin tài chính đầy đủ của doanh nghiệp",
        "operationId": "Symbols_GetFullFinancialData",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại dữ liệu (Y: Theo năm, Q: Theo quý)",
            "required": true,
            "type": "string"
          },
          {
            "name": "count",
            "in": "query",
            "description": "Số lượng kỳ",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Finance.FinancialData"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/all-financial-data": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy thông tin tài chính đầy đủ của tất cả doanh nghiệp",
        "operationId": "Symbols_GetAllFinancialData",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "type",
            "in": "query",
            "description": "Loại dữ liệu (Y: Theo năm, Q: Theo quý)",
            "required": true,
            "type": "string"
          },
          {
            "name": "count",
            "in": "query",
            "description": "Số lượng kỳ",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Finance.FinancialData"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/financial-data-by-period": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy thông tin tài chính đầy đủ của doanh nghiệp theo kỳ báo cáo",
        "operationId": "Symbols_GetFinancialData",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "year",
            "in": "query",
            "description": "Năm",
            "required": true,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "quarter",
            "in": "query",
            "description": "Quý (1 =&gt; 4: Để lấy báo cáo quý, 0: Để lấy báo cáo năm)",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Finance.FinancialData"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/dynamic-financial-data": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy thông tin tài chính động để so sánh giữa các doanh nghiệp",
        "operationId": "Symbols_GetDynamicFinancialData",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbols",
            "in": "query",
            "description": "Danh sách mã chứng khoán",
            "required": true,
            "type": "string"
          },
          {
            "name": "indicators",
            "in": "query",
            "description": "Danh sách các chỉ tiêu tài chính",
            "required": true,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại dữ liệu (Y: Theo năm, Q: Theo quý)",
            "required": true,
            "type": "string"
          },
          {
            "name": "count",
            "in": "query",
            "description": "Số lượng kỳ",
            "required": true,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/bonds": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy danh sách trái phiếu do công ty phát hành",
        "operationId": "Symbols_GetSymbolBonds",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán của công ty (tổ chức phát hành)",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Bonds.BondListItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/bonds/{bondCode}": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy chi tiết một trái phiếu cụ thể do công ty phát hành",
        "operationId": "Symbols_GetSymbolBondDetail",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán của công ty (tổ chức phát hành)",
            "required": true,
            "type": "string"
          },
          {
            "name": "bondCode",
            "in": "path",
            "description": "Mã trái phiếu",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Bonds.BondDetailViewModel"
            }
          },
          "404": {
            "description": "Không tìm thấy mã trái phiếu"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/symbols/{symbol}/bonds/{bondCode}/cashflow": {
      "get": {
        "tags": [
          "Symbols"
        ],
        "summary": "Lấy lịch dòng tiền tương lai của một trái phiếu cụ thể",
        "operationId": "Symbols_GetSymbolBondCashFlow",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "symbol",
            "in": "path",
            "description": "Mã chứng khoán của công ty (tổ chức phát hành)",
            "required": true,
            "type": "string"
          },
          {
            "name": "bondCode",
            "in": "path",
            "description": "Mã trái phiếu",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Bonds.CashFlowJson"
              }
            }
          },
          "404": {
            "description": "Không tìm thấy mã trái phiếu"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/users/{userId}/profile": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Lấy hồ sơ của 1 user",
        "operationId": "Users_GetUserProfile",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "ID của user",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Users.UserProfile"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "404": {
            "description": "User không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "users-read"
            ]
          }
        ]
      }
    },
    "/users/{userId}/avatar": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Lấy ảnh đại diện của 1 user",
        "operationId": "Users_GetUserAvatar",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "ID của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "width",
            "in": "query",
            "description": "Chiều rộng ảnh (=0 nếu muốn lấy kích thước đầy đủ, mặc định = 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "height",
            "in": "query",
            "description": "Chiều cao ảnh (=0 nếu muốn lấy kích thước đầy đủ, mặc định = 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "object"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "404": {
            "description": "User không tồn tại"
          }
        }
      }
    },
    "/users/active": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Lấy danh sách người dùng tích cực",
        "operationId": "Users_GetMostActive",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "period",
            "in": "query",
            "description": "Khoảng thời gian thống kê (0: 1 tuần, 1: 1 tháng, 2: 1 năm, 3: tất cả, mặc định là 1 tháng)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "404": {
            "description": "User không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "users-read"
            ]
          }
        ]
      }
    },
    "/users/most-followed": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Lấy danh sách người dùng được theo dõi nhiều",
        "operationId": "Users_GetMostFollowed",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "404": {
            "description": "User không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "users-read"
            ]
          }
        ]
      }
    },
    "/users/{userId}/followers": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Lấy danh sách người đang theo dõi 1 user",
        "operationId": "Users_GetFollowers",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "ID của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "404": {
            "description": "User không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "users-read"
            ]
          }
        ]
      }
    },
    "/users/{userId}/following": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Lấy danh sách người dùng mà 1 user đang theo dõi",
        "operationId": "Users_GetFollowing",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "ID của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "404": {
            "description": "User không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "users-read"
            ]
          }
        ]
      }
    },
    "/users/{userId}/symbols": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Lấy danh sách mã chứng khoán quan tâm của 1 user",
        "operationId": "Users_GetUserSymbols",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "ID của user",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "404": {
            "description": "User không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "symbols-read"
            ]
          }
        ]
      }
    },
    "/users/{userId}/posts": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Lấy danh sách bài viết của 1 user",
        "operationId": "Users_GetUserPosts",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "ID của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "404": {
            "description": "User không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/users/{userId}/videos": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Lấy danh sách videos của 1 user",
        "operationId": "Users_GetUserVideos",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "ID của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "type",
            "in": "query",
            "description": "Loại bài viết (0: Bài viết mạng xã hội, 1: Tin tức, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "videoType",
            "in": "query",
            "description": "Loại bài viết (0: Video ngắn, 1: Video dài, mặc định là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "lang",
            "in": "query",
            "description": "Ngôn ngữ dữ liệu (tuỳ chọn). Mặc định tiếng Việt; en = tiếng Anh, phần chưa có bản dịch trả tiếng Việt. (vi, en)",
            "required": false,
            "type": "string",
            "enum": [
              "vi",
              "en"
            ]
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "$ref": "#/definitions/FireAnt.Api.Models.Posts.Post"
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          },
          "404": {
            "description": "User không tồn tại"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    },
    "/users/{userId}/rooms": {
      "get": {
        "tags": [
          "Users"
        ],
        "summary": "Lấy danh sách nhóm đang tham gia của 1 user",
        "operationId": "Users_GetRooms",
        "consumes": [],
        "produces": [
          "application/json",
          "text/json"
        ],
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "description": "ID của user",
            "required": true,
            "type": "string"
          },
          {
            "name": "offset",
            "in": "query",
            "description": "Vị trí bản ghi đầu tiên lấy về (Dùng để phân trang, mặc địch là 0)",
            "required": false,
            "type": "integer",
            "format": "int32"
          },
          {
            "name": "limit",
            "in": "query",
            "description": "Số lượng tối đa bản ghi lấy về (Dùng để phân trang, mặc địch là 20)",
            "required": false,
            "type": "integer",
            "format": "int32"
          }
        ],
        "responses": {
          "200": {
            "description": "Thành công",
            "schema": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FireAnt.Api.Models.Rooms.Room"
              }
            }
          },
          "400": {
            "description": "Có lỗi khi thực hiện thao tác"
          }
        },
        "security": [
          {
            "oauth2": [
              "posts-read"
            ]
          }
        ]
      }
    }
  },
  "definitions": {
    "FireAnt.Api.Models.Academy.Subject": {
      "type": "object",
      "properties": {
        "subjectId": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Academy.Course": {
      "type": "object",
      "properties": {
        "courseId": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "duration": {
          "format": "int32",
          "type": "integer"
        },
        "lessonsAmount": {
          "format": "int32",
          "type": "integer"
        },
        "timetable": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "content": {
          "type": "string"
        },
        "objective": {
          "type": "string"
        },
        "level": {
          "type": "string"
        },
        "fee": {
          "format": "double",
          "type": "number"
        },
        "subject": {
          "$ref": "#/definitions/FireAnt.Api.Models.Academy.Subject"
        },
        "isHot": {
          "type": "boolean"
        },
        "image": {
          "format": "byte",
          "type": "string"
        },
        "introduction": {
          "type": "string"
        },
        "isOnline": {
          "type": "boolean"
        },
        "classId": {
          "format": "int32",
          "type": "integer"
        },
        "teachers": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Academy.Teacher"
          }
        },
        "lessons": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Academy.Lesson"
          }
        },
        "type": {
          "format": "int32",
          "description": " (Learning = Khóa học, Seminar = Hội thảo)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "benefit": {
          "type": "string"
        },
        "revenueCatId": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Academy.Teacher": {
      "type": "object",
      "properties": {
        "roleId": {
          "format": "int32",
          "type": "integer"
        },
        "id": {
          "type": "string"
        },
        "userName": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "introduction": {
          "type": "string"
        },
        "gender": {
          "format": "int32",
          "description": " (Male = Nam, Female = Nữ)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "photo": {
          "format": "byte",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Academy.Lesson": {
      "type": "object",
      "properties": {
        "lessonId": {
          "format": "int32",
          "type": "integer"
        },
        "lessonName": {
          "type": "string"
        },
        "hasAttachedFile": {
          "type": "boolean"
        },
        "content": {
          "type": "string"
        },
        "videoUrl": {
          "type": "string"
        },
        "courseId": {
          "format": "int32",
          "type": "integer"
        },
        "positionIndex": {
          "format": "int32",
          "type": "integer"
        },
        "course": {
          "$ref": "#/definitions/FireAnt.Api.Models.Academy.Course"
        }
      }
    },
    "FireAnt.Api.Models.Academy.CoursesLevel": {
      "type": "object",
      "properties": {
        "level": {
          "type": "string"
        },
        "count": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Academy.News": {
      "type": "object",
      "properties": {
        "newsId": {
          "format": "int32",
          "type": "integer"
        },
        "title": {
          "type": "string"
        },
        "content": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "isHot": {
          "type": "boolean"
        },
        "date": {
          "format": "date-time",
          "type": "string"
        },
        "hasAttachedFile": {
          "type": "boolean"
        },
        "approved": {
          "type": "boolean"
        },
        "createdDate": {
          "format": "date-time",
          "type": "string"
        },
        "lastModifiedBy": {
          "type": "string"
        },
        "lastModifiedDate": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Academy.Class": {
      "type": "object",
      "properties": {
        "classId": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "startDate": {
          "format": "date-time",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "type": "string"
        },
        "course": {
          "$ref": "#/definitions/FireAnt.Api.Models.Academy.Course"
        },
        "status": {
          "format": "int32",
          "description": " (NotYet = Chưa bắt đầu, Ongoing = Đang diễn ra, Finished = Đã kết thúc)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "teachers": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Academy.Teacher"
          }
        },
        "type": {
          "format": "int32",
          "description": " (Learning = Khóa học, Seminar = Hội thảo)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Academy.CourseSchedule": {
      "type": "object",
      "properties": {
        "scheduleId": {
          "format": "int32",
          "type": "integer"
        },
        "classId": {
          "format": "int32",
          "type": "integer"
        },
        "time": {
          "format": "date-time",
          "type": "string"
        },
        "teacherUserName": {
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": " (NotStarted = Chưa bắt đầu, Completed = Đã hoàn thành, Cancelled = Đã hủy)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "note": {
          "type": "string"
        },
        "lessons": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Academy.Lesson"
          }
        }
      }
    },
    "FireAnt.Api.Models.Academy.Meeting": {
      "type": "object",
      "properties": {
        "meetingId": {
          "type": "string"
        },
        "meetingPassword": {
          "type": "string"
        },
        "signature": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Academy.CourseScheduleChangeRequest": {
      "type": "object",
      "properties": {
        "status": {
          "format": "int32",
          "description": " (NotStarted = Chưa bắt đầu, Completed = Đã hoàn thành, Cancelled = Đã hủy)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Academy.EnrollmentChangeRequest": {
      "description": "Yêu cầu đăng ký khóa học",
      "type": "object",
      "properties": {
        "userName": {
          "description": "Tên đăng nhập",
          "type": "string"
        },
        "courseId": {
          "format": "int32",
          "description": "ID khóa học",
          "type": "integer"
        },
        "email": {
          "description": "Email",
          "type": "string"
        },
        "name": {
          "description": "Họ và tên",
          "type": "string"
        },
        "phone": {
          "description": "Điện thoại",
          "type": "string"
        },
        "address": {
          "description": "Địa chỉ",
          "type": "string"
        },
        "paymentMethod": {
          "format": "int32",
          "description": "Phương thức thanh toán (0 = None, 1 = BankTransfer, 2 = Cash, 3 = Card, 4 = ScratchCard, 5 = Internet, 6 = Mobile)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "note": {
          "description": "Ghi chú",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Academy.Enrollment": {
      "type": "object",
      "properties": {
        "enrollmentId": {
          "format": "int32",
          "type": "integer"
        },
        "enrollmentDate": {
          "format": "date-time",
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "userName": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        },
        "courseId": {
          "format": "int32",
          "type": "integer"
        },
        "courseName": {
          "type": "string"
        },
        "courseFee": {
          "format": "double",
          "type": "number"
        },
        "address": {
          "type": "string"
        },
        "note": {
          "type": "string"
        },
        "isPaid": {
          "type": "boolean"
        },
        "paymentMethod": {
          "format": "int32",
          "description": " (0 = None, 1 = BankTransfer, 2 = Cash, 3 = Card, 4 = ScratchCard, 5 = Internet, 6 = Mobile)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Trading.BankAccount": {
      "type": "object",
      "properties": {
        "bankID": {
          "format": "int32",
          "type": "integer"
        },
        "bankBranch": {
          "type": "string"
        },
        "accountNo": {
          "type": "string"
        },
        "accountName": {
          "type": "string"
        },
        "qrCode": {
          "type": "string"
        },
        "bankName": {
          "type": "string"
        },
        "bankCode": {
          "type": "string"
        },
        "bankContent": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.Account": {
      "description": "Tài khoản tại công ty chứng khoán",
      "type": "object",
      "properties": {
        "id": {
          "description": "Id của tài khoản",
          "type": "string"
        },
        "name": {
          "description": "Tên tài khoản",
          "type": "string"
        },
        "currency": {
          "description": "Loại tiền tệ",
          "type": "string"
        },
        "currencySign": {
          "description": "Ký hiệu tiền tệ",
          "type": "string"
        },
        "config": {
          "description": "Cấu hình tài khoản",
          "type": "object",
          "additionalProperties": {
            "type": "object"
          }
        }
      }
    },
    "FireAnt.Api.Models.Users.MemberInfo": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "userName": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "level": {
          "format": "int32",
          "type": "integer"
        },
        "endDate": {
          "format": "date-time",
          "type": "string"
        },
        "services": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Users.SubscribedService"
          }
        }
      }
    },
    "FireAnt.Api.Models.Users.SubscribedService": {
      "type": "object",
      "properties": {
        "serviceID": {
          "format": "int32",
          "type": "integer"
        },
        "serviceName": {
          "type": "string"
        },
        "tag": {
          "type": "string"
        },
        "startDate": {
          "format": "date-time",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Alerts.BlockUserRequest": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "blockComments": {
          "type": "boolean"
        },
        "blockLikes": {
          "type": "boolean"
        },
        "deleteData": {
          "type": "boolean"
        },
        "autoDelete": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Users.UserProfile": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "isExpert": {
          "type": "boolean"
        },
        "isTeacher": {
          "type": "boolean"
        },
        "bio": {
          "type": "string"
        },
        "address": {
          "type": "string"
        },
        "facebookLink": {
          "type": "string"
        },
        "totalPosts": {
          "format": "int32",
          "type": "integer"
        },
        "totalLikes": {
          "format": "int64",
          "type": "integer"
        },
        "followers": {
          "format": "int32",
          "type": "integer"
        },
        "following": {
          "format": "int32",
          "type": "integer"
        },
        "followed": {
          "type": "boolean"
        },
        "isFollower": {
          "type": "boolean"
        },
        "blocked": {
          "type": "boolean"
        },
        "beingBlocked": {
          "type": "boolean"
        },
        "groups": {
          "format": "int32",
          "type": "integer"
        },
        "isAuthentic": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Alerts.AdminNewsRequest": {
      "type": "object",
      "properties": {
        "userName": {
          "type": "string"
        },
        "post": {
          "$ref": "#/definitions/FireAnt.Api.Models.Posts.PostChangeRequest"
        }
      }
    },
    "FireAnt.Api.Models.Posts.PostChangeRequest": {
      "description": "Yêu cầu đăng/sửa bài",
      "type": "object",
      "properties": {
        "approved": {
          "description": "Approved?",
          "type": "boolean"
        },
        "date": {
          "format": "date-time",
          "description": "Ngày đăng tin",
          "type": "string"
        },
        "title": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "description": {
          "description": "Mô tả",
          "type": "string"
        },
        "type": {
          "format": "int32",
          "description": "Loại (0: Bài viết mạng xã hội, 1: Tin tức)",
          "type": "integer"
        },
        "videoUrl": {
          "description": "Đường dẫn video",
          "type": "string"
        },
        "videoThumbnailUrl": {
          "description": "Đường dẫn thumbnail video",
          "type": "string"
        },
        "videoWidth": {
          "format": "int32",
          "description": "Chiều rộng video",
          "type": "integer"
        },
        "videoHeight": {
          "format": "int32",
          "description": "Chiều cao video",
          "type": "integer"
        },
        "language": {
          "description": "Ngôn ngữ",
          "type": "string"
        },
        "expertUserID": {
          "description": "User name của chuyên gia",
          "type": "string"
        },
        "postGroupID": {
          "format": "int32",
          "description": "ID của nhóm",
          "type": "integer"
        },
        "postSourceID": {
          "format": "int32",
          "description": "ID của nguồn tin",
          "type": "integer"
        },
        "isSourceContentFull": {
          "description": "Đầy đủ nội dung từ tin nguồn?",
          "type": "boolean"
        },
        "postSourceUrl": {
          "description": "Đường dẫn tin nguồn",
          "type": "string"
        },
        "isTop": {
          "description": "Bài viết TOP",
          "type": "boolean"
        },
        "content": {
          "description": "Nội dung",
          "type": "string"
        },
        "link": {
          "description": "Liên kết",
          "type": "string"
        },
        "linkTitle": {
          "description": "Tiêu đề liên kết",
          "type": "string"
        },
        "linkDescription": {
          "description": "Mô tả liên kết",
          "type": "string"
        },
        "linkImage": {
          "description": "Ảnh liên kết",
          "type": "string"
        },
        "roomID": {
          "format": "int32",
          "description": "ID của nhóm chứa bài viết",
          "type": "integer"
        },
        "referToPostID": {
          "format": "int32",
          "description": "Tham chiếu tới bài viết",
          "type": "integer"
        },
        "replyToPostID": {
          "format": "int32",
          "description": "Trả lời cho bài viết",
          "type": "integer"
        },
        "sentiment": {
          "format": "int32",
          "description": "Đánh giá bài viết (-1 =&gt; Tiêu cực, 0 =&gt; Bình thường, 1 =&gt; Tích cực)",
          "type": "integer"
        },
        "images": {
          "description": "Danh sách ảnh đính kèm bài viết (ImageID = 0 cho file mới, ImageID &gt; 0 với file cũ)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Posts.PostImage"
          }
        },
        "files": {
          "description": "Danh sách tài liệu đính kèm bài viết (FileID = 0 cho file mới, FileID &gt; 0 với file cũ)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Posts.PostFile"
          }
        },
        "symbols": {
          "description": "Mã chứng khoán được tag trong nội dung",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "individuals": {
          "description": "Cá nhân được tag trong nội dung",
          "type": "array",
          "items": {
            "format": "int32",
            "type": "integer"
          }
        },
        "hashTags": {
          "description": "Hashtag được tag trong nội dung",
          "type": "array",
          "items": {
            "format": "int32",
            "type": "integer"
          }
        },
        "users": {
          "description": "User được tag trong nội dung",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "videoType": {
          "format": "int32",
          "description": "Loại video (0: Short, 1: Long)",
          "type": "integer"
        },
        "isVideo": {
          "description": "Bài viết video",
          "type": "boolean"
        },
        "isEmagazine": {
          "description": "Bài viết là e-magazine",
          "type": "boolean"
        },
        "isInfographic": {
          "description": "Bài viết là infographic",
          "type": "boolean"
        },
        "newsType": {
          "format": "int32",
          "type": "integer"
        },
        "summary": {
          "type": "string"
        },
        "isLivestream": {
          "type": "boolean"
        },
        "streamingUrl": {
          "type": "string"
        },
        "streamingKey": {
          "type": "string"
        },
        "youtubeStreamingUrl": {
          "type": "string"
        },
        "youtubeStreamingKey": {
          "type": "string"
        },
        "facebookStreamingUrl": {
          "type": "string"
        },
        "facebookStreamingKey": {
          "type": "string"
        },
        "livestreamAction": {
          "type": "boolean"
        },
        "livestreamActionTitle": {
          "type": "string"
        },
        "livestreamActionUrl": {
          "type": "string"
        },
        "livestreamActionRoute": {
          "type": "string"
        },
        "repliesDisabled": {
          "type": "boolean"
        },
        "repliesModerationRequired": {
          "type": "boolean"
        },
        "pendingApproval": {
          "type": "boolean"
        },
        "isAIGenerated": {
          "type": "boolean"
        },
        "contentURL": {
          "type": "string"
        },
        "hasSummary": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Posts.PostImage": {
      "type": "object",
      "properties": {
        "imageID": {
          "format": "int32",
          "type": "integer"
        },
        "base64Image": {
          "type": "string"
        },
        "imageUrl": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Posts.PostFile": {
      "type": "object",
      "properties": {
        "fileID": {
          "format": "int32",
          "type": "integer"
        },
        "fileName": {
          "type": "string"
        },
        "fileExtension": {
          "type": "string"
        },
        "base64Content": {
          "type": "string"
        },
        "fileContentUrl": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Posts.Post": {
      "type": "object",
      "properties": {
        "postID": {
          "format": "int32",
          "type": "integer"
        },
        "userName": {
          "type": "string"
        },
        "user": {
          "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
        },
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "hasSummary": {
          "type": "boolean"
        },
        "type": {
          "format": "int32",
          "type": "integer"
        },
        "newsType": {
          "format": "int32",
          "type": "integer"
        },
        "videoUrl": {
          "type": "string"
        },
        "videoThumbnailUrl": {
          "type": "string"
        },
        "videoWidth": {
          "format": "int32",
          "type": "integer"
        },
        "videoHeight": {
          "format": "int32",
          "type": "integer"
        },
        "language": {
          "type": "string"
        },
        "postGroup": {
          "$ref": "#/definitions/FireAnt.Api.Models.Posts.PostGroup"
        },
        "postSource": {
          "$ref": "#/definitions/FireAnt.Api.Models.Posts.PostSource"
        },
        "isSourceContentFull": {
          "type": "boolean"
        },
        "postSourceUrl": {
          "type": "string"
        },
        "content": {
          "type": "string"
        },
        "originalContent": {
          "type": "string"
        },
        "contentURL": {
          "type": "string"
        },
        "isAIGenerated": {
          "type": "boolean"
        },
        "date": {
          "format": "date-time",
          "type": "string"
        },
        "priority": {
          "format": "int32",
          "type": "integer"
        },
        "hasImage": {
          "type": "boolean"
        },
        "hasFile": {
          "type": "boolean"
        },
        "link": {
          "type": "string"
        },
        "linkImage": {
          "type": "string"
        },
        "linkTitle": {
          "type": "string"
        },
        "linkDescription": {
          "type": "string"
        },
        "sentiment": {
          "format": "int32",
          "type": "integer"
        },
        "approved": {
          "type": "boolean"
        },
        "isTop": {
          "type": "boolean"
        },
        "isExpertIdea": {
          "type": "boolean"
        },
        "liked": {
          "type": "boolean"
        },
        "totalLikes": {
          "format": "int32",
          "type": "integer"
        },
        "totalReplies": {
          "format": "int32",
          "type": "integer"
        },
        "totalShares": {
          "format": "int32",
          "type": "integer"
        },
        "replyToPostID": {
          "format": "int32",
          "type": "integer"
        },
        "referToPostID": {
          "format": "int32",
          "type": "integer"
        },
        "taggedSymbols": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Posts.TaggedSymbol"
          }
        },
        "taggedIndividuals": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Posts.TaggedIndividual"
          }
        },
        "taggedHashTags": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Posts.TaggedHashTag"
          }
        },
        "taggedUsers": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Posts.TaggedUser"
          }
        },
        "images": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Posts.PostImage"
          }
        },
        "files": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Posts.PostFile"
          }
        },
        "roomID": {
          "format": "int32",
          "type": "integer"
        },
        "roomName": {
          "type": "string"
        },
        "isRoomSticky": {
          "type": "boolean"
        },
        "videoType": {
          "format": "int32",
          "type": "integer"
        },
        "isVideo": {
          "type": "boolean"
        },
        "isEmagazine": {
          "type": "boolean"
        },
        "isInfographic": {
          "type": "boolean"
        },
        "lastRepliedDate": {
          "format": "date-time",
          "type": "string"
        },
        "isLivestream": {
          "type": "boolean"
        },
        "livestreamStarted": {
          "type": "boolean"
        },
        "livestreamEnded": {
          "type": "boolean"
        },
        "streamingUrl": {
          "type": "string"
        },
        "streamingKey": {
          "type": "string"
        },
        "youtubeStreamingUrl": {
          "type": "string"
        },
        "youtubeStreamingKey": {
          "type": "string"
        },
        "facebookStreamingUrl": {
          "type": "string"
        },
        "facebookStreamingKey": {
          "type": "string"
        },
        "livestreamAction": {
          "type": "boolean"
        },
        "livestreamActionTitle": {
          "type": "string"
        },
        "livestreamActionUrl": {
          "type": "string"
        },
        "livestreamActionRoute": {
          "type": "string"
        },
        "repliesDisabled": {
          "type": "boolean"
        },
        "repliesModerationRequired": {
          "type": "boolean"
        },
        "pendingApproval": {
          "type": "boolean"
        },
        "feedReason": {
          "description": "Lý do bài xuất hiện trong bảng tin cá nhân hoá, ví dụ \"Về HPG trong danh mục theo dõi\".\r\nChỉ có ở feed/for-you; các API khác không trả trường này.",
          "type": "string"
        },
        "feedReasonCode": {
          "description": "Mã lý do: follow, affinity, watchlist, alert, recent, interest, room, trending, expert, disclosure, explore, own",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.UserItem": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "bio": {
          "type": "string"
        },
        "isAuthentic": {
          "type": "boolean"
        },
        "followed": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Posts.PostGroup": {
      "type": "object",
      "properties": {
        "postGroupID": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Posts.PostSource": {
      "type": "object",
      "properties": {
        "postSourceID": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "url": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Posts.TaggedSymbol": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "price": {
          "format": "double",
          "type": "number"
        },
        "change": {
          "format": "double",
          "type": "number"
        },
        "percentChange": {
          "format": "double",
          "type": "number"
        },
        "changeSince": {
          "format": "double",
          "type": "number"
        },
        "percentChangeSince": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Posts.TaggedIndividual": {
      "type": "object",
      "properties": {
        "individualID": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Posts.TaggedHashTag": {
      "type": "object",
      "properties": {
        "hashTagID": {
          "format": "int32",
          "type": "integer"
        },
        "symbol": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Posts.TaggedUser": {
      "type": "object",
      "properties": {
        "userID": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Feed.FeedHealth": {
      "description": "Tình trạng bộ máy bảng tin trên máy chủ API đang trả lời",
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "machine": {
          "type": "string"
        },
        "poolVersion": {
          "format": "int64",
          "type": "integer"
        },
        "poolSize": {
          "format": "int32",
          "type": "integer"
        },
        "poolBuiltAt": {
          "format": "date-time",
          "type": "string"
        },
        "poolAgeSeconds": {
          "format": "double",
          "type": "number"
        },
        "jobRefreshAt": {
          "format": "date-time",
          "type": "string"
        },
        "maxPostId": {
          "format": "int32",
          "type": "integer"
        },
        "configVersion": {
          "format": "int64",
          "type": "integer"
        },
        "modes": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "breakerOpen": {
          "type": "boolean"
        },
        "lastError": {
          "type": "string"
        },
        "lastErrorAt": {
          "format": "date-time",
          "type": "string"
        },
        "counters": {
          "type": "object",
          "additionalProperties": {
            "format": "int64",
            "type": "integer"
          }
        },
        "jobs": {
          "description": "Lượt chạy gần nhất của từng job (chỉ trả cho quản trị)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Feed.FeedJobStatus"
          }
        }
      }
    },
    "FireAnt.Api.Models.Feed.FeedJobStatus": {
      "type": "object",
      "properties": {
        "jobName": {
          "type": "string"
        },
        "runId": {
          "format": "int64",
          "type": "integer"
        },
        "startedDate": {
          "format": "date-time",
          "type": "string"
        },
        "finishedDate": {
          "format": "date-time",
          "type": "string"
        },
        "durationMs": {
          "format": "int32",
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "description": "0 đang chạy, 1 xong, 3 thất bại",
          "type": "integer"
        },
        "summary": {
          "type": "string"
        },
        "errors": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Feed.FeedConfigEntry": {
      "description": "Một khoá cấu hình bảng tin",
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "bucket": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "updatedAt": {
          "format": "date-time",
          "type": "string"
        },
        "updatedBy": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Feed.FeedConfigChange": {
      "description": "Đặt một khoá cấu hình. Value = null thì xoá khoá (về mặc định trong code).",
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "bucket": {
          "type": "string"
        },
        "value": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Feed.FeedExplanation": {
      "description": "Giải thích điểm của một bài với một người dùng (công cụ quản trị)",
      "type": "object",
      "properties": {
        "postId": {
          "format": "int32",
          "type": "integer"
        },
        "mode": {
          "type": "string"
        },
        "bucket": {
          "format": "int32",
          "type": "integer"
        },
        "inPool": {
          "type": "boolean"
        },
        "isCandidate": {
          "type": "boolean"
        },
        "filteredBy": {
          "type": "string"
        },
        "rank": {
          "format": "int32",
          "type": "integer"
        },
        "score": {
          "format": "double",
          "type": "number"
        },
        "r": {
          "format": "double",
          "type": "number"
        },
        "h": {
          "format": "double",
          "type": "number"
        },
        "q": {
          "format": "double",
          "type": "number"
        },
        "f": {
          "format": "double",
          "type": "number"
        },
        "m": {
          "format": "double",
          "type": "number"
        },
        "n": {
          "format": "double",
          "type": "number"
        },
        "a": {
          "format": "double",
          "type": "number"
        },
        "y": {
          "format": "double",
          "type": "number"
        },
        "g": {
          "format": "double",
          "type": "number"
        },
        "ageHours": {
          "format": "double",
          "type": "number"
        },
        "sources": {
          "type": "string"
        },
        "reasonCode": {
          "type": "string"
        },
        "reasonParam": {
          "type": "string"
        },
        "candidateCount": {
          "format": "int32",
          "type": "integer"
        },
        "snapshotSize": {
          "format": "int32",
          "type": "integer"
        },
        "elapsedMs": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Feed.FeedJobResult": {
      "description": "Kết quả chạy ngay một job",
      "type": "object",
      "properties": {
        "runId": {
          "format": "int64",
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "type": "integer"
        },
        "summary": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialMarketStats": {
      "type": "object",
      "properties": {
        "range": {
          "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialRange"
        },
        "current": {
          "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialMarketSummary"
        },
        "previous": {
          "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialMarketSummary"
        },
        "baseline": {
          "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialMarketBaseline"
        },
        "series": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialMarketDay"
          }
        },
        "heat": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialHeatCell"
          }
        },
        "intraday": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialIntradayHour"
          }
        },
        "industries": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialIndustryStat"
          }
        },
        "kinds": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialKindStat"
          }
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialRange": {
      "type": "object",
      "properties": {
        "fromDate": {
          "format": "date-time",
          "type": "string"
        },
        "toDate": {
          "format": "date-time",
          "type": "string"
        },
        "sessions": {
          "format": "int32",
          "type": "integer"
        },
        "prevFromDate": {
          "format": "date-time",
          "type": "string"
        },
        "prevToDate": {
          "format": "date-time",
          "type": "string"
        },
        "prevSessions": {
          "format": "int32",
          "type": "integer"
        },
        "baseFromDate": {
          "format": "date-time",
          "type": "string"
        },
        "baseToDate": {
          "format": "date-time",
          "type": "string"
        },
        "baseSessions": {
          "format": "int32",
          "type": "integer"
        },
        "lastUpdated": {
          "format": "date-time",
          "type": "string"
        },
        "dataFromDate": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialMarketSummary": {
      "type": "object",
      "properties": {
        "period": {
          "type": "string"
        },
        "posts": {
          "format": "int32",
          "type": "integer"
        },
        "taggedPosts": {
          "format": "int32",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "type": "integer"
        },
        "news": {
          "format": "int32",
          "type": "integer"
        },
        "disclosures": {
          "format": "int32",
          "type": "integer"
        },
        "likes": {
          "format": "int32",
          "type": "integer"
        },
        "likesClean": {
          "format": "double",
          "type": "number"
        },
        "pos": {
          "format": "int32",
          "type": "integer"
        },
        "neg": {
          "format": "int32",
          "type": "integer"
        },
        "follows": {
          "format": "int32",
          "type": "integer"
        },
        "reports": {
          "format": "int32",
          "type": "integer"
        },
        "newUsers": {
          "format": "int32",
          "type": "integer"
        },
        "days": {
          "format": "int32",
          "type": "integer"
        },
        "writers": {
          "format": "int32",
          "type": "integer"
        },
        "postAuthors": {
          "format": "int32",
          "type": "integer"
        },
        "commenters": {
          "format": "int32",
          "type": "integer"
        },
        "likers": {
          "format": "int32",
          "type": "integer"
        },
        "active": {
          "format": "int32",
          "type": "integer"
        },
        "symbols": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialMarketBaseline": {
      "type": "object",
      "properties": {
        "sessions": {
          "format": "int32",
          "type": "integer"
        },
        "posts": {
          "format": "double",
          "type": "number"
        },
        "replies": {
          "format": "double",
          "type": "number"
        },
        "news": {
          "format": "double",
          "type": "number"
        },
        "likes": {
          "format": "double",
          "type": "number"
        },
        "likesClean": {
          "format": "double",
          "type": "number"
        },
        "writers": {
          "format": "double",
          "type": "number"
        },
        "postAuthors": {
          "format": "double",
          "type": "number"
        },
        "commenters": {
          "format": "double",
          "type": "number"
        },
        "likers": {
          "format": "double",
          "type": "number"
        },
        "active": {
          "format": "double",
          "type": "number"
        },
        "pos": {
          "format": "double",
          "type": "number"
        },
        "neg": {
          "format": "double",
          "type": "number"
        },
        "symbols": {
          "format": "double",
          "type": "number"
        },
        "broadSymbols": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialMarketDay": {
      "type": "object",
      "properties": {
        "day": {
          "format": "date-time",
          "type": "string"
        },
        "isSession": {
          "type": "boolean"
        },
        "posts": {
          "format": "int32",
          "type": "integer"
        },
        "taggedPosts": {
          "format": "int32",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "type": "integer"
        },
        "news": {
          "format": "int32",
          "type": "integer"
        },
        "disclosures": {
          "format": "int32",
          "type": "integer"
        },
        "likes": {
          "format": "int32",
          "type": "integer"
        },
        "likesClean": {
          "format": "double",
          "type": "number"
        },
        "writers": {
          "format": "int32",
          "type": "integer"
        },
        "postAuthors": {
          "format": "int32",
          "type": "integer"
        },
        "commenters": {
          "format": "int32",
          "type": "integer"
        },
        "likers": {
          "format": "int32",
          "type": "integer"
        },
        "active": {
          "format": "int32",
          "type": "integer"
        },
        "pos": {
          "format": "int32",
          "type": "integer"
        },
        "neg": {
          "format": "int32",
          "type": "integer"
        },
        "follows": {
          "format": "int32",
          "type": "integer"
        },
        "reports": {
          "format": "int32",
          "type": "integer"
        },
        "symbols": {
          "format": "int32",
          "type": "integer"
        },
        "broadSymbols": {
          "format": "int32",
          "type": "integer"
        },
        "newUsers": {
          "format": "int32",
          "type": "integer"
        },
        "indexClose": {
          "format": "double",
          "type": "number"
        },
        "indexChangePct": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialHeatCell": {
      "type": "object",
      "properties": {
        "weekday": {
          "format": "int32",
          "type": "integer"
        },
        "hour": {
          "format": "int32",
          "type": "integer"
        },
        "posts": {
          "format": "int32",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "type": "integer"
        },
        "likes": {
          "format": "int32",
          "type": "integer"
        },
        "likesClean": {
          "format": "double",
          "type": "number"
        },
        "hours": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialIntradayHour": {
      "type": "object",
      "properties": {
        "hour": {
          "format": "int32",
          "type": "integer"
        },
        "posts": {
          "format": "int32",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "type": "integer"
        },
        "likes": {
          "format": "int32",
          "type": "integer"
        },
        "likesClean": {
          "format": "double",
          "type": "number"
        },
        "writers": {
          "format": "int32",
          "type": "integer"
        },
        "active": {
          "format": "int32",
          "type": "integer"
        },
        "basePosts": {
          "format": "double",
          "type": "number"
        },
        "baseReplies": {
          "format": "double",
          "type": "number"
        },
        "baseActive": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialIndustryStat": {
      "type": "object",
      "properties": {
        "icbCode": {
          "type": "string"
        },
        "nameVi": {
          "type": "string"
        },
        "nameEn": {
          "type": "string"
        },
        "posts": {
          "format": "int32",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "type": "integer"
        },
        "mentions": {
          "format": "int32",
          "type": "integer"
        },
        "wMentions": {
          "format": "double",
          "type": "number"
        },
        "likes": {
          "format": "int32",
          "type": "integer"
        },
        "likesClean": {
          "format": "double",
          "type": "number"
        },
        "authors": {
          "format": "int32",
          "type": "integer"
        },
        "symbols": {
          "format": "int32",
          "type": "integer"
        },
        "pos": {
          "format": "int32",
          "type": "integer"
        },
        "neg": {
          "format": "int32",
          "type": "integer"
        },
        "prevMentions": {
          "format": "int32",
          "type": "integer"
        },
        "prevWMentions": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialKindStat": {
      "type": "object",
      "properties": {
        "kind": {
          "format": "int32",
          "type": "integer"
        },
        "exchange": {
          "type": "string"
        },
        "mentions": {
          "format": "int32",
          "type": "integer"
        },
        "wMentions": {
          "format": "double",
          "type": "number"
        },
        "posts": {
          "format": "int32",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "type": "integer"
        },
        "symbols": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialTopSymbols": {
      "type": "object",
      "properties": {
        "range": {
          "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialRange"
        },
        "totalMentions": {
          "format": "int32",
          "type": "integer"
        },
        "totalWMentions": {
          "format": "double",
          "type": "number"
        },
        "totalSymbols": {
          "format": "int32",
          "type": "integer"
        },
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialSymbolItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialSymbolItem": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "kind": {
          "format": "int32",
          "type": "integer"
        },
        "exchange": {
          "type": "string"
        },
        "icb1": {
          "type": "string"
        },
        "icb1Name": {
          "type": "string"
        },
        "icb2": {
          "type": "string"
        },
        "icb2Name": {
          "type": "string"
        },
        "posts": {
          "format": "int32",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "type": "integer"
        },
        "mentions": {
          "format": "int32",
          "type": "integer"
        },
        "wMentions": {
          "format": "double",
          "type": "number"
        },
        "soloPosts": {
          "format": "int32",
          "type": "integer"
        },
        "news": {
          "format": "int32",
          "type": "integer"
        },
        "disclosures": {
          "format": "int32",
          "type": "integer"
        },
        "likes": {
          "format": "int32",
          "type": "integer"
        },
        "likesClean": {
          "format": "double",
          "type": "number"
        },
        "authors": {
          "format": "int32",
          "type": "integer"
        },
        "postAuthors": {
          "format": "int32",
          "type": "integer"
        },
        "pos": {
          "format": "int32",
          "type": "integer"
        },
        "neg": {
          "format": "int32",
          "type": "integer"
        },
        "netSentiment": {
          "format": "double",
          "type": "number"
        },
        "shareOfVoice": {
          "format": "double",
          "type": "number"
        },
        "industryShare": {
          "format": "double",
          "type": "number"
        },
        "mentionsPerSession": {
          "format": "double",
          "type": "number"
        },
        "prevMentions": {
          "format": "int32",
          "type": "integer"
        },
        "prevWMentions": {
          "format": "double",
          "type": "number"
        },
        "baseMentionsPerSession": {
          "format": "double",
          "type": "number"
        },
        "baseMentionsSd": {
          "format": "double",
          "type": "number"
        },
        "ratioToBase": {
          "format": "double",
          "type": "number"
        },
        "zScore": {
          "format": "double",
          "type": "number"
        },
        "rank": {
          "format": "int32",
          "type": "integer"
        },
        "rankPrev": {
          "format": "int32",
          "type": "integer"
        },
        "lowAuthors": {
          "type": "boolean"
        },
        "close": {
          "format": "double",
          "type": "number"
        },
        "changePct": {
          "format": "double",
          "type": "number"
        },
        "volume": {
          "format": "int64",
          "type": "integer"
        },
        "baseVolume": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialSymbolStats": {
      "type": "object",
      "properties": {
        "info": {
          "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialSymbolInfo"
        },
        "range": {
          "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialRange"
        },
        "current": {
          "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialSymbolSummary"
        },
        "previous": {
          "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialSymbolSummary"
        },
        "baseline": {
          "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialSymbolBaseline"
        },
        "series": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialSymbolDay"
          }
        },
        "hourly": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialSymbolHour"
          }
        },
        "topAuthors": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialAuthorItem"
          }
        },
        "topPosts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialPostItem"
          }
        },
        "peers": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialPeerItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialSymbolInfo": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "kind": {
          "format": "int32",
          "type": "integer"
        },
        "exchange": {
          "type": "string"
        },
        "isListed": {
          "type": "boolean"
        },
        "icb1": {
          "type": "string"
        },
        "icb1Name": {
          "type": "string"
        },
        "icb2": {
          "type": "string"
        },
        "icb2Name": {
          "type": "string"
        },
        "icb3": {
          "type": "string"
        },
        "icb3Name": {
          "type": "string"
        },
        "icb4": {
          "type": "string"
        },
        "icb4Name": {
          "type": "string"
        },
        "firstDay": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialSymbolSummary": {
      "type": "object",
      "properties": {
        "period": {
          "type": "string"
        },
        "posts": {
          "format": "int32",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "type": "integer"
        },
        "mentions": {
          "format": "int32",
          "type": "integer"
        },
        "wMentions": {
          "format": "double",
          "type": "number"
        },
        "soloPosts": {
          "format": "int32",
          "type": "integer"
        },
        "news": {
          "format": "int32",
          "type": "integer"
        },
        "disclosures": {
          "format": "int32",
          "type": "integer"
        },
        "likes": {
          "format": "int32",
          "type": "integer"
        },
        "likesClean": {
          "format": "double",
          "type": "number"
        },
        "pos": {
          "format": "int32",
          "type": "integer"
        },
        "neg": {
          "format": "int32",
          "type": "integer"
        },
        "days": {
          "format": "int32",
          "type": "integer"
        },
        "authors": {
          "format": "int32",
          "type": "integer"
        },
        "postAuthors": {
          "format": "int32",
          "type": "integer"
        },
        "rankMarket": {
          "format": "int32",
          "type": "integer"
        },
        "symbolsInMarket": {
          "format": "int32",
          "type": "integer"
        },
        "marketWMentions": {
          "format": "double",
          "type": "number"
        },
        "rankIndustry": {
          "format": "int32",
          "type": "integer"
        },
        "symbolsInIndustry": {
          "format": "int32",
          "type": "integer"
        },
        "industryWMentions": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialSymbolBaseline": {
      "type": "object",
      "properties": {
        "sessions": {
          "format": "int32",
          "type": "integer"
        },
        "mentions": {
          "format": "double",
          "type": "number"
        },
        "mentionsSd": {
          "format": "double",
          "type": "number"
        },
        "posts": {
          "format": "double",
          "type": "number"
        },
        "replies": {
          "format": "double",
          "type": "number"
        },
        "authors": {
          "format": "double",
          "type": "number"
        },
        "likesClean": {
          "format": "double",
          "type": "number"
        },
        "volume": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialSymbolDay": {
      "type": "object",
      "properties": {
        "day": {
          "format": "date-time",
          "type": "string"
        },
        "isSession": {
          "type": "boolean"
        },
        "posts": {
          "format": "int32",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "type": "integer"
        },
        "mentions": {
          "format": "int32",
          "type": "integer"
        },
        "wMentions": {
          "format": "double",
          "type": "number"
        },
        "news": {
          "format": "int32",
          "type": "integer"
        },
        "disclosures": {
          "format": "int32",
          "type": "integer"
        },
        "likes": {
          "format": "int32",
          "type": "integer"
        },
        "likesClean": {
          "format": "double",
          "type": "number"
        },
        "authors": {
          "format": "int32",
          "type": "integer"
        },
        "pos": {
          "format": "int32",
          "type": "integer"
        },
        "neg": {
          "format": "int32",
          "type": "integer"
        },
        "close": {
          "format": "double",
          "type": "number"
        },
        "changePct": {
          "format": "double",
          "type": "number"
        },
        "volume": {
          "format": "int64",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialSymbolHour": {
      "type": "object",
      "properties": {
        "hourStart": {
          "format": "date-time",
          "type": "string"
        },
        "posts": {
          "format": "int32",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "type": "integer"
        },
        "news": {
          "format": "int32",
          "type": "integer"
        },
        "disclosures": {
          "format": "int32",
          "type": "integer"
        },
        "likes": {
          "format": "int32",
          "type": "integer"
        },
        "likesClean": {
          "format": "double",
          "type": "number"
        },
        "authors": {
          "format": "int32",
          "type": "integer"
        },
        "pos": {
          "format": "int32",
          "type": "integer"
        },
        "neg": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialAuthorItem": {
      "type": "object",
      "properties": {
        "userId": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "isAuthentic": {
          "type": "boolean"
        },
        "isExpert": {
          "type": "boolean"
        },
        "followers": {
          "format": "int32",
          "type": "integer"
        },
        "posts": {
          "format": "int32",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "type": "integer"
        },
        "likesRecv": {
          "format": "double",
          "type": "number"
        },
        "pos": {
          "format": "int32",
          "type": "integer"
        },
        "neg": {
          "format": "int32",
          "type": "integer"
        },
        "activeDays": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialPostItem": {
      "type": "object",
      "properties": {
        "postId": {
          "format": "int32",
          "type": "integer"
        },
        "postDate": {
          "format": "date-time",
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "snippet": {
          "type": "string"
        },
        "likes": {
          "format": "int32",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "type": "integer"
        },
        "score": {
          "format": "double",
          "type": "number"
        },
        "hasImage": {
          "type": "boolean"
        },
        "sentiment": {
          "format": "int32",
          "type": "integer"
        },
        "isNews": {
          "type": "boolean"
        },
        "authorId": {
          "type": "string"
        },
        "authorName": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialPeerItem": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "mentions": {
          "format": "int32",
          "type": "integer"
        },
        "wMentions": {
          "format": "double",
          "type": "number"
        },
        "industryShare": {
          "format": "double",
          "type": "number"
        },
        "likesClean": {
          "format": "double",
          "type": "number"
        },
        "pos": {
          "format": "int32",
          "type": "integer"
        },
        "neg": {
          "format": "int32",
          "type": "integer"
        },
        "authors": {
          "format": "int32",
          "type": "integer"
        },
        "close": {
          "format": "double",
          "type": "number"
        },
        "changePct": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialStatsHealth": {
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        },
        "freshness": {
          "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialFreshness"
        },
        "lastRuns": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialJobRun"
          }
        },
        "recentRuns": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.SocialStats.SocialJobRun"
          }
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialFreshness": {
      "type": "object",
      "properties": {
        "dataFromDate": {
          "format": "date-time",
          "type": "string"
        },
        "dataToDate": {
          "format": "date-time",
          "type": "string"
        },
        "lastUpdated": {
          "format": "date-time",
          "type": "string"
        },
        "lastSession": {
          "format": "date-time",
          "type": "string"
        },
        "lastPriceDay": {
          "format": "date-time",
          "type": "string"
        },
        "symbols": {
          "format": "int32",
          "type": "integer"
        },
        "flaggedUsers": {
          "format": "int32",
          "type": "integer"
        },
        "sessions": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialJobRun": {
      "type": "object",
      "properties": {
        "runId": {
          "format": "int64",
          "type": "integer"
        },
        "jobName": {
          "type": "string"
        },
        "triggeredBy": {
          "type": "string"
        },
        "startedDate": {
          "format": "date-time",
          "type": "string"
        },
        "finishedDate": {
          "format": "date-time",
          "type": "string"
        },
        "durationMs": {
          "format": "int32",
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "type": "integer"
        },
        "summary": {
          "type": "string"
        },
        "errors": {
          "type": "string"
        },
        "failures24h": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.SocialStats.SocialJobResult": {
      "type": "object",
      "properties": {
        "runId": {
          "format": "int64",
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "type": "integer"
        },
        "summary": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.LoginRequest": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string"
        },
        "password": {
          "type": "string"
        },
        "rememberMe": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Users.ExternalLoginRequest": {
      "type": "object",
      "properties": {
        "accessToken": {
          "type": "string"
        },
        "idToken": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.RegisterRequest": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "password": {
          "type": "string"
        },
        "confirmPassword": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.ForgotPasswordRequest": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.SendConfirmationEmailRequest": {
      "type": "object",
      "properties": {
        "email": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.RefreshTokenRequest": {
      "type": "object",
      "properties": {
        "refreshToken": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.RefreshTokenResult": {
      "type": "object",
      "properties": {
        "succeeded": {
          "type": "boolean"
        },
        "errorMessage": {
          "type": "string"
        },
        "accessToken": {
          "type": "string"
        },
        "refreshToken": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Bonds.BondCategoryItem": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Bonds.BondFilterRequest": {
      "type": "object",
      "properties": {
        "bondTypeID": {
          "format": "int32",
          "type": "integer"
        },
        "bondRateTypeID": {
          "format": "int32",
          "type": "integer"
        },
        "currencyID": {
          "format": "int32",
          "type": "integer"
        },
        "marketID": {
          "format": "int32",
          "type": "integer"
        },
        "icbCode": {
          "type": "string"
        },
        "issueFormID": {
          "format": "int32",
          "type": "integer"
        },
        "issueMethodID": {
          "format": "int32",
          "type": "integer"
        },
        "statusID": {
          "format": "int32",
          "type": "integer"
        },
        "issuerName": {
          "type": "string"
        },
        "issuerInstitutionID": {
          "format": "int32",
          "type": "integer"
        },
        "issuerSymbol": {
          "type": "string"
        },
        "isListing": {
          "format": "int32",
          "type": "integer"
        },
        "issueDateFrom": {
          "format": "date-time",
          "type": "string"
        },
        "issueDateTo": {
          "format": "date-time",
          "type": "string"
        },
        "maturityDateFrom": {
          "format": "date-time",
          "type": "string"
        },
        "maturityDateTo": {
          "format": "date-time",
          "type": "string"
        },
        "minBondRate": {
          "format": "double",
          "type": "number"
        },
        "maxBondRate": {
          "format": "double",
          "type": "number"
        },
        "minTenorMonths": {
          "format": "int32",
          "type": "integer"
        },
        "maxTenorMonths": {
          "format": "int32",
          "type": "integer"
        },
        "top": {
          "format": "int32",
          "type": "integer"
        },
        "sortBy": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Bonds.BondListItem": {
      "type": "object",
      "properties": {
        "bondCode": {
          "type": "string"
        },
        "issuerName": {
          "type": "string"
        },
        "tenorPeriod": {
          "format": "int32",
          "type": "integer"
        },
        "issueDate": {
          "format": "date-time",
          "type": "string"
        },
        "maturityDate": {
          "format": "date-time",
          "type": "string"
        },
        "bondRate": {
          "format": "double",
          "type": "number"
        },
        "bondRateType": {
          "type": "string"
        },
        "currentListedVolume": {
          "format": "double",
          "type": "number"
        },
        "status": {
          "type": "string"
        },
        "infoObj": {
          "$ref": "#/definitions/FireAnt.Api.Models.Bonds.BondInfoJson"
        }
      }
    },
    "FireAnt.Api.Models.Bonds.BondInfoJson": {
      "type": "object",
      "properties": {
        "bondCode": {
          "type": "string"
        },
        "issuerInstitutionID": {
          "format": "int32",
          "type": "integer"
        },
        "issuerSymbol": {
          "type": "string"
        },
        "issueICBCode": {
          "type": "string"
        },
        "icbNameLv1": {
          "type": "string"
        },
        "icbNameLv2": {
          "type": "string"
        },
        "icbNameLv3": {
          "type": "string"
        },
        "icbNameLv4": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Bonds.BondDetailViewModel": {
      "type": "object",
      "properties": {
        "bondCode": {
          "type": "string"
        },
        "detail": {
          "$ref": "#/definitions/FireAnt.Api.Models.Bonds.BondDetailJson"
        },
        "history": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Bonds.RegistrationHistoryJson"
          }
        },
        "cashFlows": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Bonds.CashFlowJson"
          }
        }
      }
    },
    "FireAnt.Api.Models.Bonds.BondDetailJson": {
      "type": "object",
      "properties": {
        "bondCode": {
          "type": "string"
        },
        "isin": {
          "type": "string"
        },
        "issuerName": {
          "type": "string"
        },
        "issuerSymbol": {
          "type": "string"
        },
        "issuerListingStatus": {
          "type": "boolean"
        },
        "institutionID": {
          "format": "int32",
          "type": "integer"
        },
        "issuerICBCode": {
          "type": "string"
        },
        "bondName": {
          "type": "string"
        },
        "bondType": {
          "type": "string"
        },
        "market": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "couponRate": {
          "type": "string"
        },
        "couponRateType": {
          "type": "string"
        },
        "interestPaymentMethod": {
          "type": "string"
        },
        "issueDate": {
          "format": "date-time",
          "type": "string"
        },
        "maturityDate": {
          "format": "date-time",
          "type": "string"
        },
        "tenorPeriod": {
          "type": "string"
        },
        "faceValue": {
          "format": "double",
          "type": "number"
        },
        "currency": {
          "type": "string"
        },
        "totalIssuedValue": {
          "format": "double",
          "type": "number"
        },
        "currentListedValue": {
          "format": "double",
          "type": "number"
        },
        "issueForm": {
          "type": "string"
        },
        "issueMethod": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Bonds.RegistrationHistoryJson": {
      "type": "object",
      "properties": {
        "registrationNo": {
          "format": "int32",
          "type": "integer"
        },
        "registrationType": {
          "type": "string"
        },
        "reason": {
          "type": "string"
        },
        "volume": {
          "format": "double",
          "type": "number"
        },
        "value": {
          "format": "double",
          "type": "number"
        },
        "registrationCert": {
          "type": "string"
        },
        "registrationDate": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Bonds.CashFlowJson": {
      "type": "object",
      "properties": {
        "periodNo": {
          "format": "int32",
          "type": "integer"
        },
        "periodStart": {
          "format": "date-time",
          "type": "string"
        },
        "periodEnd": {
          "format": "date-time",
          "type": "string"
        },
        "paymentDate": {
          "format": "date-time",
          "type": "string"
        },
        "bondRate": {
          "format": "double",
          "type": "number"
        },
        "yearFraction": {
          "format": "double",
          "type": "number"
        },
        "interestAmount": {
          "format": "double",
          "type": "number"
        },
        "principalAmount": {
          "format": "double",
          "type": "number"
        },
        "totalCashflow": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Bonds.IssuerStatisticItem": {
      "type": "object",
      "properties": {
        "issuerName": {
          "type": "string"
        },
        "issuerSymbol": {
          "type": "string"
        },
        "issuerInstitutionID": {
          "format": "int32",
          "type": "integer"
        },
        "bondCount": {
          "format": "int32",
          "type": "integer"
        },
        "totalIssuedValue": {
          "format": "double",
          "type": "number"
        },
        "totalDebtFull": {
          "format": "double",
          "type": "number"
        },
        "totalRemainingDebt": {
          "format": "double",
          "type": "number"
        },
        "avgRate": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Bonds.IndustryStatisticItem": {
      "type": "object",
      "properties": {
        "icbCode": {
          "type": "string"
        },
        "icbName": {
          "type": "string"
        },
        "bondCount": {
          "format": "int32",
          "type": "integer"
        },
        "totalIssuedVolume": {
          "format": "double",
          "type": "number"
        },
        "totalIssuedValue": {
          "format": "double",
          "type": "number"
        },
        "totalCurrentListedVolume": {
          "format": "double",
          "type": "number"
        },
        "totalCurrentListedValue": {
          "format": "double",
          "type": "number"
        },
        "totalDebtFull": {
          "format": "double",
          "type": "number"
        },
        "totalRemainingDebt": {
          "format": "double",
          "type": "number"
        },
        "avgRate": {
          "format": "double",
          "type": "number"
        },
        "avgCouponRate": {
          "format": "double",
          "type": "number"
        },
        "floatingRate": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Trading.Broker": {
      "type": "object",
      "properties": {
        "brokerId": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "logo": {
          "type": "string"
        }
      }
    },
    "FireAnt.Trading.Brokers.Shinhan.JobNameData": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.ReferrerInfo": {
      "type": "object",
      "properties": {
        "referrerName": {
          "type": "string"
        },
        "referrerCode": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.WelcomeLink": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "link": {
          "type": "string"
        },
        "updatedAt": {
          "type": "string"
        },
        "updatedBy": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.Banner": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "orderStt": {
          "type": "string"
        },
        "imageUrl": {
          "type": "string"
        },
        "link": {
          "type": "string"
        },
        "displayStart": {
          "type": "string"
        },
        "displayEnd": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "updatedAt": {
          "type": "string"
        },
        "createdAt": {
          "type": "string"
        }
      }
    },
    "FireAnt.Trading.Brokers.SSI.SSIConsentDocument": {
      "type": "object",
      "properties": {
        "tncVersion": {
          "type": "string"
        },
        "tncHash": {
          "type": "string"
        },
        "renderedHash": {
          "type": "string"
        },
        "content": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.BrokerWebhookData": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string"
        },
        "data": {
          "type": "object"
        }
      }
    },
    "FireAnt.Api.Models.Trading.BrokerUser": {
      "type": "object",
      "properties": {
        "userId": {
          "format": "int32",
          "type": "integer"
        },
        "userName": {
          "type": "string"
        },
        "brokerId": {
          "type": "string"
        },
        "brokerName": {
          "type": "string"
        },
        "linkedUserName": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Controllers.Api.ChatMessageImageUpload": {
      "type": "object",
      "properties": {
        "image": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Institutions.CompanyEvent": {
      "type": "object",
      "properties": {
        "eventID": {
          "format": "int32",
          "type": "integer"
        },
        "symbol": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "recordDate": {
          "format": "date-time",
          "type": "string"
        },
        "registrationDate": {
          "format": "date-time",
          "type": "string"
        },
        "executionDate": {
          "format": "date-time",
          "type": "string"
        },
        "type": {
          "format": "int32",
          "description": " (0 = None, 1 = CashDividend, 2 = StockDiviđen, 3 = RightsIssue)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplatePagedResult[FireAnt.Api.Models.ExcelTemplates.ExcelTemplateItem]": {
      "description": "Kết quả phân trang của module Mẫu Excel",
      "type": "object",
      "properties": {
        "total": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa của trang",
          "type": "integer"
        },
        "items": {
          "description": "Danh sách phần tử của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateItem": {
      "description": "Thông tin tóm tắt một mẫu Excel / Word / PowerPoint (dùng cho danh sách: thư viện, mẫu của tôi, được chia sẻ)",
      "type": "object",
      "properties": {
        "templateId": {
          "format": "int32",
          "description": "ID mẫu",
          "type": "integer"
        },
        "name": {
          "description": "Tên mẫu",
          "type": "string"
        },
        "description": {
          "description": "Mô tả",
          "type": "string"
        },
        "categoryCode": {
          "description": "Mã danh mục (market, financials, valuation...)",
          "type": "string"
        },
        "categoryName": {
          "description": "Tên danh mục",
          "type": "string"
        },
        "tags": {
          "description": "Tag (chữ thường)",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ownerUserName": {
          "description": "Tên đăng nhập của chủ sở hữu",
          "type": "string"
        },
        "ownerName": {
          "description": "Tên hiển thị của chủ sở hữu (null nếu không tra được)",
          "type": "string"
        },
        "ownerAvatar": {
          "description": "URL ảnh đại diện của chủ sở hữu (null nếu không tra được)",
          "type": "string"
        },
        "visibility": {
          "format": "int32",
          "description": "Chế độ chia sẻ: 0 Private, 1 Link, 2 Public (0 = Private, 1 = Link, 2 = Public)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "reviewStatus": {
          "format": "int32",
          "description": "Trạng thái duyệt: 0 None, 1 Pending, 2 Approved, 3 Rejected (0 = None, 1 = Pending, 2 = Approved, 3 = Rejected)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "isOfficial": {
          "description": "Mẫu chính thức do FireAnt phát hành (luôn hiện trong thư viện)",
          "type": "boolean"
        },
        "isFeatured": {
          "description": "Mẫu nổi bật",
          "type": "boolean"
        },
        "minMembershipLevel": {
          "format": "int32",
          "description": "Hạng thành viên tối thiểu để dùng mẫu: 0 Free, 1 Basic, 2 Pro, 3 Premium",
          "type": "integer"
        },
        "thumbnailUrl": {
          "description": "URL ảnh xem trước (công khai)",
          "type": "string"
        },
        "fileFormat": {
          "description": "Định dạng tệp = đuôi tệp: xlsx, xltx, docx, dotx, pptx, potx",
          "type": "string"
        },
        "app": {
          "description": "Ứng dụng của mẫu (suy ra từ fileFormat): excel | word | powerpoint",
          "type": "string"
        },
        "fileSize": {
          "format": "int32",
          "description": "Kích thước tệp (byte)",
          "type": "integer"
        },
        "version": {
          "format": "int32",
          "description": "Phiên bản tệp hiện tại (tăng mỗi lần thay tệp)",
          "type": "integer"
        },
        "functions": {
          "description": "Các hàm FireAnt dùng trong mẫu (FA.QUOTE, FA.RATIO...)",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sheetNames": {
          "description": "Tên các sheet trong mẫu",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "language": {
          "description": "Ngôn ngữ của mẫu (vi, en...)",
          "type": "string"
        },
        "usageCount": {
          "format": "int32",
          "description": "Số lượt sử dụng",
          "type": "integer"
        },
        "likeCount": {
          "format": "int32",
          "description": "Số lượt thích",
          "type": "integer"
        },
        "isLiked": {
          "description": "Người dùng hiện tại đã thích mẫu (false khi chưa đăng nhập)",
          "type": "boolean"
        },
        "isOwner": {
          "description": "Người dùng hiện tại là chủ sở hữu (false khi chưa đăng nhập)",
          "type": "boolean"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "updatedDate": {
          "format": "date-time",
          "description": "Ngày cập nhật cuối",
          "type": "string"
        },
        "publishedDate": {
          "format": "date-time",
          "description": "Ngày phát hành (lần đầu được duyệt / phát hành chính thức)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateCategory": {
      "description": "Danh mục mẫu Excel (bảng giá, báo cáo tài chính, định giá...).\r\nCũng là phần tử của body PUT /admin/excel/templates/categories (upsert theo code).",
      "required": [
        "code",
        "name"
      ],
      "type": "object",
      "properties": {
        "categoryId": {
          "format": "int32",
          "description": "ID danh mục (bỏ qua khi upsert)",
          "type": "integer"
        },
        "code": {
          "description": "Mã danh mục chữ thường a-z, 0-9, _, - (market, financials, valuation...)",
          "type": "string"
        },
        "name": {
          "description": "Tên tiếng Việt",
          "type": "string"
        },
        "nameEn": {
          "description": "Tên tiếng Anh",
          "type": "string"
        },
        "description": {
          "description": "Mô tả",
          "type": "string"
        },
        "icon": {
          "description": "Tên icon (client tự ánh xạ)",
          "type": "string"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự hiển thị (nhỏ lên trước)",
          "type": "integer"
        },
        "templateCount": {
          "format": "int32",
          "description": "Số mẫu của ứng dụng đang xem (tham số app, mặc định excel) hiện trong thư viện cộng đồng thuộc danh mục (bỏ qua khi upsert)",
          "type": "integer"
        },
        "isActive": {
          "description": "Đang sử dụng (API công khai chỉ trả danh mục đang bật; mặc định true khi upsert)",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateDetail": {
      "description": "Chi tiết mẫu Excel: thông tin tóm tắt + tham số, quyền của người dùng hiện tại, link chia sẻ (chủ sở hữu)",
      "type": "object",
      "properties": {
        "parameters": {
          "description": "Tham số add-in hỏi người dùng trước khi chèn mẫu",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateParameter"
          }
        },
        "reviewNote": {
          "description": "Ghi chú của người duyệt (lý do từ chối...) - chỉ trả cho chủ sở hữu / admin",
          "type": "string"
        },
        "shareCount": {
          "format": "int32",
          "description": "Số người dùng được chia sẻ trực tiếp",
          "type": "integer"
        },
        "shareUrl": {
          "description": "Link chia sẻ ({ExcelTemplateShareBaseUrl}/{token}) - chỉ trả cho chủ sở hữu, khi đã tạo link",
          "type": "string"
        },
        "canEdit": {
          "description": "Người dùng hiện tại được sửa mẫu (chủ sở hữu mẫu không chính thức, hoặc admin)",
          "type": "boolean"
        },
        "canUse": {
          "description": "Người dùng hiện tại được dùng mẫu (tải nội dung): đã đăng nhập và đủ hạng thành viên, hoặc chủ sở hữu / admin",
          "type": "boolean"
        },
        "featuredOrder": {
          "format": "int32",
          "description": "Thứ tự trong danh sách nổi bật (nhỏ lên trước)",
          "type": "integer"
        },
        "isDeleted": {
          "description": "Đã xóa mềm (chỉ gặp ở danh sách admin với includeDeleted = true)",
          "type": "boolean"
        },
        "templateId": {
          "format": "int32",
          "description": "ID mẫu",
          "type": "integer"
        },
        "name": {
          "description": "Tên mẫu",
          "type": "string"
        },
        "description": {
          "description": "Mô tả",
          "type": "string"
        },
        "categoryCode": {
          "description": "Mã danh mục (market, financials, valuation...)",
          "type": "string"
        },
        "categoryName": {
          "description": "Tên danh mục",
          "type": "string"
        },
        "tags": {
          "description": "Tag (chữ thường)",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "ownerUserName": {
          "description": "Tên đăng nhập của chủ sở hữu",
          "type": "string"
        },
        "ownerName": {
          "description": "Tên hiển thị của chủ sở hữu (null nếu không tra được)",
          "type": "string"
        },
        "ownerAvatar": {
          "description": "URL ảnh đại diện của chủ sở hữu (null nếu không tra được)",
          "type": "string"
        },
        "visibility": {
          "format": "int32",
          "description": "Chế độ chia sẻ: 0 Private, 1 Link, 2 Public (0 = Private, 1 = Link, 2 = Public)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "reviewStatus": {
          "format": "int32",
          "description": "Trạng thái duyệt: 0 None, 1 Pending, 2 Approved, 3 Rejected (0 = None, 1 = Pending, 2 = Approved, 3 = Rejected)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "isOfficial": {
          "description": "Mẫu chính thức do FireAnt phát hành (luôn hiện trong thư viện)",
          "type": "boolean"
        },
        "isFeatured": {
          "description": "Mẫu nổi bật",
          "type": "boolean"
        },
        "minMembershipLevel": {
          "format": "int32",
          "description": "Hạng thành viên tối thiểu để dùng mẫu: 0 Free, 1 Basic, 2 Pro, 3 Premium",
          "type": "integer"
        },
        "thumbnailUrl": {
          "description": "URL ảnh xem trước (công khai)",
          "type": "string"
        },
        "fileFormat": {
          "description": "Định dạng tệp = đuôi tệp: xlsx, xltx, docx, dotx, pptx, potx",
          "type": "string"
        },
        "app": {
          "description": "Ứng dụng của mẫu (suy ra từ fileFormat): excel | word | powerpoint",
          "type": "string"
        },
        "fileSize": {
          "format": "int32",
          "description": "Kích thước tệp (byte)",
          "type": "integer"
        },
        "version": {
          "format": "int32",
          "description": "Phiên bản tệp hiện tại (tăng mỗi lần thay tệp)",
          "type": "integer"
        },
        "functions": {
          "description": "Các hàm FireAnt dùng trong mẫu (FA.QUOTE, FA.RATIO...)",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sheetNames": {
          "description": "Tên các sheet trong mẫu",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "language": {
          "description": "Ngôn ngữ của mẫu (vi, en...)",
          "type": "string"
        },
        "usageCount": {
          "format": "int32",
          "description": "Số lượt sử dụng",
          "type": "integer"
        },
        "likeCount": {
          "format": "int32",
          "description": "Số lượt thích",
          "type": "integer"
        },
        "isLiked": {
          "description": "Người dùng hiện tại đã thích mẫu (false khi chưa đăng nhập)",
          "type": "boolean"
        },
        "isOwner": {
          "description": "Người dùng hiện tại là chủ sở hữu (false khi chưa đăng nhập)",
          "type": "boolean"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "updatedDate": {
          "format": "date-time",
          "description": "Ngày cập nhật cuối",
          "type": "string"
        },
        "publishedDate": {
          "format": "date-time",
          "description": "Ngày phát hành (lần đầu được duyệt / phát hành chính thức)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateParameter": {
      "description": "Tham số của mẫu: add-in hỏi người dùng trước khi chèn mẫu (mã CK, kỳ báo cáo, ngày...)\r\nrồi ghi giá trị vào named range / ô tương ứng.",
      "required": [
        "name",
        "type"
      ],
      "type": "object",
      "properties": {
        "name": {
          "description": "Tên tham số (khớp ^[A-Za-z_][A-Za-z0-9_.]{0,49}$, không trùng trong mẫu) - thường là tên named range",
          "type": "string"
        },
        "label": {
          "description": "Nhãn hiển thị (mặc định = name)",
          "type": "string"
        },
        "type": {
          "description": "Loại: symbol | symbols | period | date | number | text | select",
          "type": "string"
        },
        "defaultValue": {
          "description": "Giá trị mặc định (number: số dạng invariant; select: một trong options)",
          "type": "string"
        },
        "required": {
          "description": "Bắt buộc nhập",
          "type": "boolean"
        },
        "description": {
          "description": "Hướng dẫn / mô tả",
          "type": "string"
        },
        "options": {
          "description": "Các lựa chọn - chỉ dùng (và bắt buộc) với type = select, tối đa 50 lựa chọn x 100 ký tự",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateContent": {
      "description": "Nội dung tệp mẫu dạng base64 - add-in dùng với Office.js (Excel: workbook.insertWorksheetsFromBase64 /\r\nExcel.createWorkbook; Word: insertFileFromBase64 / createDocument; PowerPoint: insertSlidesFromBase64 / createPresentation)",
      "type": "object",
      "properties": {
        "templateId": {
          "format": "int32",
          "description": "ID mẫu",
          "type": "integer"
        },
        "version": {
          "format": "int32",
          "description": "Phiên bản tệp",
          "type": "integer"
        },
        "fileName": {
          "description": "Tên tệp gốc khi tải lên",
          "type": "string"
        },
        "fileFormat": {
          "description": "Định dạng tệp = đuôi tệp: xlsx, xltx, docx, dotx, pptx, potx",
          "type": "string"
        },
        "app": {
          "description": "Ứng dụng của mẫu: excel | word | powerpoint",
          "type": "string"
        },
        "contentType": {
          "description": "MIME type của tệp (theo fileFormat)",
          "type": "string"
        },
        "fileSize": {
          "format": "int32",
          "description": "Kích thước (byte)",
          "type": "integer"
        },
        "fileHash": {
          "description": "SHA-256 (hex chữ thường) của tệp - client dùng để cache theo phiên bản",
          "type": "string"
        },
        "contentBase64": {
          "description": "Nội dung tệp mã hóa base64",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateUsageRequest": {
      "description": "Ghi nhận một lượt sử dụng mẫu (add-in gửi sau khi chèn / mở / tải mẫu)",
      "type": "object",
      "properties": {
        "action": {
          "format": "int32",
          "description": "Hành động: 1 Insert, 2 Open, 3 Download (1 = Insert, 2 = Open, 3 = Download)",
          "enum": [
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "platform": {
          "description": "Nền tảng (Office.context.platform: PC, Mac, OfficeOnline, iOS...), tối đa 20 ký tự ASCII",
          "type": "string"
        },
        "appVersion": {
          "description": "Phiên bản add-in, tối đa 20 ký tự ASCII",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateUsageResult": {
      "description": "Kết quả ghi nhận sử dụng",
      "type": "object",
      "properties": {
        "usageCount": {
          "format": "int32",
          "description": "Số lượt sử dụng hiện tại của mẫu",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateLikeResult": {
      "description": "Trạng thái thích của người dùng hiện tại",
      "type": "object",
      "properties": {
        "templateId": {
          "format": "int32",
          "description": "ID mẫu",
          "type": "integer"
        },
        "likeCount": {
          "format": "int32",
          "description": "Tổng số lượt thích",
          "type": "integer"
        },
        "isLiked": {
          "description": "Người dùng hiện tại đang thích mẫu",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplatePagedResult[FireAnt.Api.Models.ExcelTemplates.ExcelTemplateDetail]": {
      "description": "Kết quả phân trang của module Mẫu Excel",
      "type": "object",
      "properties": {
        "total": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa của trang",
          "type": "integer"
        },
        "items": {
          "description": "Danh sách phần tử của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateDetail"
          }
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateReviewRequest": {
      "description": "Kết quả duyệt mẫu công khai (Admin)",
      "type": "object",
      "properties": {
        "approved": {
          "description": "true = duyệt (hiện trong thư viện), false = từ chối",
          "type": "boolean"
        },
        "note": {
          "description": "Ghi chú cho chủ sở hữu (bắt buộc khi từ chối, tối đa 500 ký tự)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateFlagsRequest": {
      "description": "Cờ quản trị của mẫu (Admin). Trường null = giữ nguyên.",
      "type": "object",
      "properties": {
        "isOfficial": {
          "description": "Mẫu chính thức (luôn hiện trong thư viện, chỉ admin sửa được)",
          "type": "boolean"
        },
        "isFeatured": {
          "description": "Mẫu nổi bật",
          "type": "boolean"
        },
        "featuredOrder": {
          "format": "int32",
          "description": "Thứ tự nổi bật (0..1000000, nhỏ lên trước)",
          "type": "integer"
        },
        "minMembershipLevel": {
          "format": "int32",
          "description": "Hạng thành viên tối thiểu để dùng: 0 Free, 1 Basic, 2 Pro, 3 Premium",
          "type": "integer"
        },
        "categoryCode": {
          "description": "Mã danh mục",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.Execution": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "instrument": {
          "type": "string"
        },
        "instrumentItem": {
          "$ref": "#/definitions/FireAnt.Api.Models.Trading.InstrumentItem"
        },
        "price": {
          "format": "double",
          "type": "number"
        },
        "time": {
          "format": "double",
          "type": "number"
        },
        "qty": {
          "format": "double",
          "type": "number"
        },
        "side": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.InstrumentItem": {
      "type": "object",
      "properties": {
        "instrument": {
          "type": "string"
        },
        "symbol": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "exchange": {
          "type": "string"
        },
        "unit": {
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "type": "string"
        },
        "supportStopOrder": {
          "type": "boolean"
        },
        "supportLimitOrder": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Feed.FeedHideRequest": {
      "description": "Yêu cầu ẩn một bài viết khỏi bảng tin",
      "type": "object",
      "properties": {
        "postId": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Feed.FeedMuteRequest": {
      "description": "Yêu cầu \"Không quan tâm\" một tác giả hoặc một mã",
      "type": "object",
      "properties": {
        "type": {
          "description": "author | symbol",
          "type": "string"
        },
        "key": {
          "description": "Với author: Id người dùng (user.id trong bài viết); với symbol: mã chứng khoán",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Feed.FeedSettings": {
      "description": "Cài đặt bảng tin của người dùng hiện tại",
      "type": "object",
      "properties": {
        "personalized": {
          "description": "Cá nhân hoá theo thói quen (mặc định bật). Tắt thì bảng tin chỉ dùng tín hiệu tự khai:\r\nngười đang theo dõi, mã trong watchlist, cảnh báo giá, nhóm đã tham gia.",
          "type": "boolean"
        },
        "muted": {
          "description": "Tác giả / mã đã chọn \"Không quan tâm\"",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Feed.FeedMutedEntity"
          }
        }
      }
    },
    "FireAnt.Api.Models.Feed.FeedMutedEntity": {
      "description": "Một mục \"Không quan tâm\"",
      "type": "object",
      "properties": {
        "type": {
          "description": "author | symbol",
          "type": "string"
        },
        "key": {
          "description": "Với author: Id người dùng; với symbol: mã chứng khoán",
          "type": "string"
        },
        "name": {
          "description": "Tên hiển thị (tác giả) hoặc mã",
          "type": "string"
        },
        "createdAt": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Feed.FeedSettingsChange": {
      "description": "Cập nhật công tắc cá nhân hoá",
      "type": "object",
      "properties": {
        "personalized": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.AccountCheckResult": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "full_name": {
          "type": "string"
        },
        "id_no": {
          "type": "string"
        },
        "cell_phone": {
          "type": "string"
        },
        "email": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.RegisterAccountExtraInfo": {
      "type": "object",
      "properties": {
        "bank_account_id": {
          "format": "int32",
          "type": "integer"
        },
        "mailing_address": {
          "type": "string"
        },
        "province_id": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.RegisterAccountResult": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetAccountInformationRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetAccountInformationResult": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "full_name": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "email_verified": {
          "type": "boolean"
        },
        "cell_phone": {
          "type": "string"
        },
        "cell_phone_verified": {
          "type": "boolean"
        },
        "gender": {
          "format": "int32",
          "type": "integer"
        },
        "dob": {
          "type": "string"
        },
        "province_id": {
          "format": "int32",
          "type": "integer"
        },
        "nationality_id": {
          "type": "string"
        },
        "nationality_label": {
          "type": "string"
        },
        "id_type": {
          "type": "string"
        },
        "id_no": {
          "type": "string"
        },
        "id_date_of_issue": {
          "type": "string"
        },
        "id_place_of_issue": {
          "type": "string"
        },
        "id_front_photo_url": {
          "type": "string"
        },
        "id_back_photo_url": {
          "type": "string"
        },
        "permanent_address": {
          "type": "string"
        },
        "mailing_address": {
          "type": "string"
        },
        "bank_account_no": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.BankAccountInfo"
        },
        "contract_url": {
          "type": "string"
        },
        "is_linked": {
          "type": "boolean"
        },
        "is_kyc": {
          "type": "boolean"
        },
        "fatca_code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.BankAccountInfo": {
      "type": "object",
      "properties": {
        "bank_id": {
          "type": "string"
        },
        "bank_swift_code": {
          "type": "string"
        },
        "bank_name": {
          "type": "string"
        },
        "bank_branch": {
          "type": "string"
        },
        "bank_acc_no": {
          "type": "string"
        },
        "bank_acc_name": {
          "type": "string"
        },
        "bin_code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.CreateLinkAccountResult": {
      "type": "object",
      "properties": {
        "verification_id": {
          "type": "string"
        },
        "verification_token_required": {
          "type": "string"
        },
        "verification_token_expire_time": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ConfirmLinkAccountRequest": {
      "type": "object",
      "properties": {
        "verification_id": {
          "type": "string"
        },
        "verification_token": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ConfirmLinkAccountResult": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetAccessCodeRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetAccessCodeResult": {
      "type": "object",
      "properties": {
        "access_code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetTradingContractListRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.TradingContract": {
      "type": "object",
      "properties": {
        "trading_contract_id": {
          "format": "int32",
          "type": "integer"
        },
        "trading_contract_no": {
          "type": "string"
        },
        "trading_contract_url": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "is_sign": {
          "type": "boolean"
        },
        "is_allow_sign": {
          "type": "boolean"
        },
        "issuer_info": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.IssuerInformation"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.IssuerInformation": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "short_name": {
          "type": "string"
        },
        "website": {
          "type": "string"
        },
        "avatar_url": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.CreateESignRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "trading_contract_id": {
          "format": "int32",
          "type": "integer"
        },
        "base64_file": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.CreateESignResult": {
      "type": "object",
      "properties": {
        "verification_id": {
          "type": "string"
        },
        "verification_token_required": {
          "type": "boolean"
        },
        "verification_token_expire_time": {
          "format": "int64",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ConfirmESignRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "verification_id": {
          "type": "string"
        },
        "verification_token": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ConfirmESignResult": {
      "type": "object",
      "properties": {}
    },
    "FireAnt.Api.Models.Fmarket.EstimatePurchaseOrderRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "product_id": {
          "format": "int32",
          "type": "integer"
        },
        "amount": {
          "format": "int64",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.EstimatePurchaseOrderResult": {
      "type": "object",
      "properties": {
        "estimate_volume": {
          "format": "double",
          "type": "number"
        },
        "estimate_fee_percent": {
          "format": "double",
          "type": "number"
        },
        "estimate_fee_amount": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.CreatePurchaseOrderRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "product_id": {
          "format": "int32",
          "type": "integer"
        },
        "amount": {
          "format": "int64",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.CreatePurchaseOrderResult": {
      "type": "object",
      "properties": {
        "verification_id": {
          "type": "string"
        },
        "verification_token_required": {
          "type": "boolean"
        },
        "verification_token_expire_time": {
          "format": "int64",
          "type": "integer"
        },
        "code": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "type_label": {
          "type": "string"
        },
        "create_date": {
          "format": "int64",
          "type": "integer"
        },
        "create_date_format": {
          "type": "string"
        },
        "amount": {
          "format": "double",
          "type": "number"
        },
        "amount_net": {
          "format": "double",
          "type": "number"
        },
        "price": {
          "format": "double",
          "type": "number"
        },
        "volume": {
          "format": "double",
          "type": "number"
        },
        "fee_percent": {
          "format": "double",
          "type": "number"
        },
        "fee_amount": {
          "format": "double",
          "type": "number"
        },
        "product": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductInformation"
        },
        "dst_product": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductInformation"
        },
        "investor_bank_acc": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.BankAccountInfo"
        },
        "receive_money_bank_acc": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.BankAccountInfo"
        },
        "transfer_content": {
          "type": "string"
        },
        "tax_percent": {
          "format": "double",
          "type": "number"
        },
        "tax_amount": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ProductInformation": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "code": {
          "type": "string"
        },
        "short_name": {
          "type": "string"
        },
        "nav": {
          "format": "double",
          "type": "number"
        },
        "approval_date_label": {
          "type": "string"
        },
        "sale_payment_term": {
          "format": "int32",
          "type": "integer"
        },
        "order_book_closed_time_label": {
          "type": "string"
        },
        "receive_money_closed_time_label": {
          "type": "string"
        },
        "trading_session": {
          "format": "int64",
          "type": "integer"
        },
        "trading_session_format": {
          "type": "string"
        },
        "nav_date": {
          "type": "string"
        },
        "nav_to_previous_value": {
          "format": "double",
          "type": "number"
        },
        "nav_to_previous": {
          "format": "double",
          "type": "number"
        },
        "issuer_info": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.IssuerInformation"
        },
        "nav_change": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.NavChange"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.NavChange": {
      "type": "object",
      "properties": {
        "nav_to_3_months": {
          "format": "double",
          "type": "number"
        },
        "nav_to_6_months": {
          "format": "double",
          "type": "number"
        },
        "nav_to_12_months": {
          "format": "double",
          "type": "number"
        },
        "nav_to_36_months": {
          "format": "double",
          "type": "number"
        },
        "nav_to_beginning": {
          "format": "double",
          "type": "number"
        },
        "annualized_return_36_months": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ConfirmPurchaseOrderRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "verification_id": {
          "type": "string"
        },
        "verification_token": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ConfirmPurchaseOrderResult": {
      "type": "object",
      "properties": {
        "order_code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.EstimateSaleOrderRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "product_id": {
          "format": "int32",
          "type": "integer"
        },
        "volume": {
          "format": "double",
          "type": "number"
        },
        "program_id": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.EstimateSaleOrderResult": {
      "type": "object",
      "properties": {
        "estimate_value": {
          "format": "double",
          "type": "number"
        },
        "estimate_fee_percent": {
          "format": "double",
          "type": "number"
        },
        "estimate_fee_amount": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.CreateSaleOrderRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "product_id": {
          "format": "int32",
          "type": "integer"
        },
        "volume": {
          "format": "double",
          "type": "number"
        },
        "program_id": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.CreateSaleOrderResult": {
      "type": "object",
      "properties": {
        "verification_id": {
          "type": "string"
        },
        "verification_token_required": {
          "type": "boolean"
        },
        "verification_token_expire_time": {
          "format": "int64",
          "type": "integer"
        },
        "code": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "type_label": {
          "type": "string"
        },
        "create_date": {
          "format": "int64",
          "type": "integer"
        },
        "create_date_format": {
          "type": "string"
        },
        "amount": {
          "format": "double",
          "type": "number"
        },
        "amount_net": {
          "format": "double",
          "type": "number"
        },
        "price": {
          "format": "double",
          "type": "number"
        },
        "volume": {
          "format": "double",
          "type": "number"
        },
        "fee_percent": {
          "format": "double",
          "type": "number"
        },
        "fee_amount": {
          "format": "double",
          "type": "number"
        },
        "product": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductInformation"
        },
        "dst_product": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductInformation"
        },
        "investor_bank_acc": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.BankAccountInfo"
        },
        "tax_percent": {
          "format": "double",
          "type": "number"
        },
        "tax_amount": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ConfirmSaleOrderRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "verification_id": {
          "type": "string"
        },
        "verification_token": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ConfirmSaleOrderResult": {
      "type": "object",
      "properties": {
        "order_code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetDestinationProductListRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "src_product_id": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.DestinationProduct": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.EstimateConvertOrderRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "src_product_id": {
          "format": "int32",
          "type": "integer"
        },
        "dst_product_id": {
          "format": "int32",
          "type": "integer"
        },
        "volume": {
          "format": "double",
          "type": "number"
        },
        "program_id": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.EstimateConvertOrderResult": {
      "type": "object",
      "properties": {
        "estimate_value": {
          "format": "double",
          "type": "number"
        },
        "estimate_fee_percent": {
          "format": "double",
          "type": "number"
        },
        "estimate_fee_amount": {
          "format": "double",
          "type": "number"
        },
        "estimate_tax_percent": {
          "format": "double",
          "type": "number"
        },
        "estimate_tax_amount": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.CreateConvertOrderRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "src_product_id": {
          "format": "int32",
          "type": "integer"
        },
        "dst_product_id": {
          "format": "int32",
          "type": "integer"
        },
        "volume": {
          "format": "double",
          "type": "number"
        },
        "program_id": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.CreateConvertOrderResult": {
      "type": "object",
      "properties": {
        "verification_id": {
          "type": "string"
        },
        "verification_token_required": {
          "type": "boolean"
        },
        "verification_token_expire_time": {
          "format": "int64",
          "type": "integer"
        },
        "code": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "type_label": {
          "type": "string"
        },
        "create_date": {
          "format": "int64",
          "type": "integer"
        },
        "create_date_format": {
          "type": "string"
        },
        "amount": {
          "format": "double",
          "type": "number"
        },
        "amount_net": {
          "format": "double",
          "type": "number"
        },
        "price": {
          "format": "double",
          "type": "number"
        },
        "volume": {
          "format": "double",
          "type": "number"
        },
        "fee_percent": {
          "format": "double",
          "type": "number"
        },
        "fee_amount": {
          "format": "double",
          "type": "number"
        },
        "product": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductInformation"
        },
        "dst_product": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductInformation"
        },
        "investor_bank_acc": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.BankAccountInfo"
        },
        "tax_percent": {
          "format": "double",
          "type": "number"
        },
        "tax_amount": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ConfirmConvertOrderRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "verification_id": {
          "type": "string"
        },
        "verification_token": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ConfirmConvertOrderResult": {
      "type": "object",
      "properties": {
        "order_code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.CancelOrderRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "order_code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.CancelOrderResult": {
      "type": "object",
      "properties": {
        "order_code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetOrderDetailRequest": {
      "type": "object",
      "properties": {
        "order_code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.OrderDetail": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "type_label": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "status_label": {
          "type": "string"
        },
        "allowed_cancel": {
          "type": "boolean"
        },
        "create_date": {
          "format": "int64",
          "type": "integer"
        },
        "create_date_format": {
          "type": "string"
        },
        "approved_date": {
          "format": "int64",
          "type": "integer"
        },
        "approved_date_format": {
          "type": "string"
        },
        "amount": {
          "format": "double",
          "type": "number"
        },
        "amount_net": {
          "format": "double",
          "type": "number"
        },
        "price": {
          "format": "double",
          "type": "number"
        },
        "volume": {
          "format": "double",
          "type": "number"
        },
        "fee_percent": {
          "format": "double",
          "type": "number"
        },
        "fee_amount": {
          "format": "double",
          "type": "number"
        },
        "product": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductInformation"
        },
        "dst_product": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductInformation"
        },
        "investor_bank_acc": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.BankAccountInfo"
        },
        "receive_money_bank_acc": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.BankAccountInfo"
        },
        "transfer_content": {
          "type": "string"
        },
        "tax_percent": {
          "format": "double",
          "type": "number"
        },
        "tax_amount": {
          "format": "double",
          "type": "number"
        },
        "qr_payment_url": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.FilterOrdersRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.FilterOrdersResult": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        },
        "total_items": {
          "format": "int32",
          "type": "integer"
        },
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.OrderDetail"
          }
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.FilterTransactionsRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.FilterTransactionsResult": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        },
        "total_items": {
          "format": "int32",
          "type": "integer"
        },
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.TransactionDetail"
          }
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.TransactionDetail": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "type_label": {
          "type": "string"
        },
        "date": {
          "format": "int64",
          "type": "integer"
        },
        "date_format": {
          "type": "string"
        },
        "amount": {
          "format": "double",
          "type": "number"
        },
        "price": {
          "format": "double",
          "type": "number"
        },
        "volume": {
          "format": "double",
          "type": "number"
        },
        "tax_percent": {
          "format": "double",
          "type": "number"
        },
        "tax_amount": {
          "format": "double",
          "type": "number"
        },
        "fee_percent": {
          "format": "double",
          "type": "number"
        },
        "fee_amount": {
          "format": "double",
          "type": "number"
        },
        "product": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductInformation"
        },
        "dst_product": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductInformation"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.FilterAssetFundsRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.FilterAssetFundsResult": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        },
        "total_items": {
          "format": "int32",
          "type": "integer"
        },
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.AssetFundDetail"
          }
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.AssetFundDetail": {
      "type": "object",
      "properties": {
        "purchase_price": {
          "format": "double",
          "type": "number"
        },
        "current_price": {
          "format": "double",
          "type": "number"
        },
        "current_volume": {
          "format": "double",
          "type": "number"
        },
        "current_amount": {
          "format": "double",
          "type": "number"
        },
        "gain_amount": {
          "format": "double",
          "type": "number"
        },
        "gain_percent": {
          "format": "double",
          "type": "number"
        },
        "product_program": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductProgramInformation"
        },
        "product": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.SummaryProductInformation"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ProductProgramInformation": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.SummaryProductInformation": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "code": {
          "type": "string"
        },
        "short_name": {
          "type": "string"
        },
        "nav": {
          "format": "double",
          "type": "number"
        },
        "fund_asset_type": {
          "type": "string"
        },
        "issuer_info": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.IssuerInformation"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.FilterAssetsRequest": {
      "type": "object",
      "properties": {
        "fmarket_id": {
          "type": "string"
        },
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.FilterAssetsResult": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        },
        "total_items": {
          "format": "int32",
          "type": "integer"
        },
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.AssetDetail"
          }
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.AssetDetail": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "create_date": {
          "format": "int64",
          "type": "integer"
        },
        "create_date_format": {
          "type": "string"
        },
        "purchase_price": {
          "format": "double",
          "type": "number"
        },
        "current_price": {
          "format": "double",
          "type": "number"
        },
        "current_volume": {
          "format": "double",
          "type": "number"
        },
        "current_amount": {
          "format": "double",
          "type": "number"
        },
        "gain_amount": {
          "format": "double",
          "type": "number"
        },
        "gain_percent": {
          "format": "double",
          "type": "number"
        },
        "allowed_sale": {
          "type": "boolean"
        },
        "allowed_sale_volume": {
          "format": "double",
          "type": "number"
        },
        "allowed_convert": {
          "type": "boolean"
        },
        "allowed_convert_volume": {
          "format": "double",
          "type": "number"
        },
        "extra": {
          "type": "object"
        },
        "product_program": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductProgramInformation"
        },
        "product": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.SummaryProductInformation"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetProductDetailRequest": {
      "type": "object",
      "properties": {
        "product_id": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ProductDetail": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "short_name": {
          "type": "string"
        },
        "code": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "min_purchase_value": {
          "format": "double",
          "type": "number"
        },
        "max_purchase_value": {
          "format": "double",
          "type": "number"
        },
        "expected_profit": {
          "format": "double",
          "type": "number"
        },
        "approval_date_label": {
          "type": "string"
        },
        "sale_payment_term": {
          "format": "int32",
          "type": "integer"
        },
        "order_book_closed_time_label": {
          "type": "string"
        },
        "receive_money_closed_time_label": {
          "type": "string"
        },
        "trading_session": {
          "format": "int64",
          "type": "integer"
        },
        "trading_session_format": {
          "type": "string"
        },
        "product_fee_lst": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductFee"
          }
        },
        "management_fee": {
          "format": "double",
          "type": "number"
        },
        "min_purchase_fee": {
          "format": "double",
          "type": "number"
        },
        "max_purchase_fee": {
          "format": "double",
          "type": "number"
        },
        "min_sale_fee": {
          "format": "double",
          "type": "number"
        },
        "max_sale_fee": {
          "format": "double",
          "type": "number"
        },
        "nav": {
          "format": "double",
          "type": "number"
        },
        "nav_date": {
          "type": "string"
        },
        "nav_to_previous_value": {
          "format": "double",
          "type": "number"
        },
        "nav_to_previous": {
          "format": "double",
          "type": "number"
        },
        "nav_to_last_year": {
          "format": "double",
          "type": "number"
        },
        "min_holding_volume": {
          "format": "double",
          "type": "number"
        },
        "fund_asset_type": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.AssetType"
        },
        "issuer_info": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.IssuerInformation"
        },
        "asset_allocations": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.AssetAllocationItem"
          }
        },
        "nav_change": {
          "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.NavChange"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ProductFee": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string"
        },
        "begin_operator": {
          "type": "string"
        },
        "begin_volume": {
          "format": "double",
          "type": "number"
        },
        "end_operator": {
          "type": "string"
        },
        "end_volume": {
          "format": "double",
          "type": "number"
        },
        "fee": {
          "format": "double",
          "type": "number"
        },
        "dest_product_id": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.AssetType": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.AssetAllocationItem": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.FilterProductsRequest": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        },
        "fundAssetTypes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sortField": {
          "type": "string"
        },
        "sortOrder": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.FilterProductsResult": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        },
        "total_items": {
          "format": "int32",
          "type": "integer"
        },
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductDetail"
          }
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetIssuerListRequest": {
      "type": "object",
      "properties": {}
    },
    "FireAnt.Api.Models.Fmarket.GetIssuerListResult": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.IssuerInformation"
          }
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetProvincesRequest": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetProvincesResult": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        },
        "total_items": {
          "format": "int32",
          "type": "integer"
        },
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProvinceInformation"
          }
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ProvinceInformation": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "administrative_code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetNationalitiesRequest": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetNationalitiesResult": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        },
        "total_items": {
          "format": "int32",
          "type": "integer"
        },
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.NationalityInformation"
          }
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.NationalityInformation": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetPlaceOfIssueIDListRequest": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetPlaceOfIssueIDListResult": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        },
        "total_items": {
          "format": "int32",
          "type": "integer"
        },
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.PlaceOfIssueIDInformation"
          }
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.PlaceOfIssueIDInformation": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "administrative_code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetBanksRequest": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetBanksResult": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        },
        "total_items": {
          "format": "int32",
          "type": "integer"
        },
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.BankInformation"
          }
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.BankInformation": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "short_name": {
          "type": "string"
        },
        "stock_name": {
          "type": "string"
        },
        "swift_code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetProductNavHistoryRequest": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        },
        "productId": {
          "format": "int32",
          "type": "integer"
        },
        "isAllData": {
          "type": "boolean"
        },
        "fromDate": {
          "type": "string"
        },
        "toDate": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.GetProductNavHistoryResult": {
      "type": "object",
      "properties": {
        "page": {
          "format": "int32",
          "type": "integer"
        },
        "page_size": {
          "format": "int32",
          "type": "integer"
        },
        "total_items": {
          "format": "int32",
          "type": "integer"
        },
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Fmarket.ProductNavHistoryItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.Fmarket.ProductNavHistoryItem": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "createdAt": {
          "format": "int64",
          "type": "integer"
        },
        "nav": {
          "format": "double",
          "type": "number"
        },
        "navDate": {
          "type": "string"
        },
        "productId": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.SymbolItem": {
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "isListing": {
          "description": "Đang niêm yết hay không (true: Đang niêm yết)",
          "type": "boolean"
        },
        "name": {
          "description": "Tên doanh nghiệp",
          "type": "string"
        },
        "exchange": {
          "description": "Sàn niêm yết",
          "type": "string"
        },
        "instrument": {
          "type": "string"
        },
        "type": {
          "description": "Loại chứng khoán (stock: Cổ phiếu, index: Chỉ số, futures: Hợp đồng tương lai, warrant: Chứng quyền, fund: Quỹ, bond: Trái phiếu, commodity: Hàng hóa)",
          "type": "string"
        },
        "industryCode": {
          "description": "Mã ngành ICB",
          "type": "string"
        },
        "icbCode": {
          "description": "Mã ngành ICB mới",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Industries.IndustryStatistic": {
      "type": "object",
      "properties": {
        "industryCode": {
          "description": "Mã ICB của ngành",
          "type": "string"
        },
        "statisticValues": {
          "type": "object"
        }
      }
    },
    "FireAnt.Api.Models.Finance.FinancialData": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "year": {
          "format": "int32",
          "type": "integer"
        },
        "quarter": {
          "format": "int32",
          "type": "integer"
        },
        "companyType": {
          "type": "string"
        },
        "icbCode": {
          "type": "string"
        },
        "icbName": {
          "type": "string"
        },
        "financialValues": {
          "type": "object"
        }
      }
    },
    "FireAnt.Api.Models.Industries.IndustryIndex": {
      "type": "object",
      "properties": {
        "industryCode": {
          "description": "Mã ICB của ngành",
          "type": "string"
        },
        "date": {
          "format": "date-time",
          "description": "Ngày",
          "type": "string"
        },
        "indexValues": {
          "type": "object"
        }
      }
    },
    "FireAnt.Api.Models.Industries.ICBIndustry": {
      "type": "object",
      "properties": {
        "industryCode": {
          "description": "Mã ICB của ngành",
          "type": "string"
        },
        "level": {
          "format": "int32",
          "description": "Level ICB của ngành",
          "type": "integer"
        },
        "name": {
          "description": "Tên ngành",
          "type": "string"
        },
        "description": {
          "description": "Mô tả",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Industries.IndustryInfo": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "sectorKind": {
          "type": "string"
        },
        "isFinancial": {
          "type": "boolean"
        },
        "icbCode": {
          "type": "string"
        },
        "icbHierarchy": {
          "$ref": "#/definitions/FireAnt.Api.Models.Industries.IndustryHierarchy"
        },
        "label": {
          "$ref": "#/definitions/FireAnt.Api.Models.Industries.IndustryLabel"
        },
        "exchange": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Industries.IndustryHierarchy": {
      "type": "object",
      "properties": {
        "lv1": {
          "type": "string"
        },
        "lv2": {
          "type": "string"
        },
        "lv3": {
          "type": "string"
        },
        "lv4": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Industries.IndustryLabel": {
      "type": "object",
      "properties": {
        "vi": {
          "type": "string"
        },
        "en": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Statistics.RRGValue": {
      "type": "object",
      "properties": {
        "date": {
          "format": "date-time",
          "type": "string"
        },
        "rs": {
          "format": "double",
          "type": "number"
        },
        "rm": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Individuals.IndividualItem": {
      "type": "object",
      "properties": {
        "individualID": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "gender": {
          "format": "int32",
          "description": " (Male = Nam, Female = Nữ)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "hasPhoto": {
          "type": "boolean"
        },
        "symbol": {
          "type": "string"
        },
        "positionName": {
          "type": "string"
        },
        "institutionName": {
          "type": "string"
        },
        "institutionIsListing": {
          "type": "boolean"
        },
        "institutionSymbol": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Individuals.IndividualProfile": {
      "type": "object",
      "properties": {
        "individualID": {
          "format": "int32",
          "type": "integer"
        },
        "isForeign": {
          "type": "boolean"
        },
        "name": {
          "type": "string"
        },
        "bio": {
          "type": "string"
        },
        "gender": {
          "format": "int32",
          "description": " (Male = Nam, Female = Nữ)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "hasPhoto": {
          "type": "boolean"
        },
        "photoURL": {
          "type": "string"
        },
        "dateOfBirth": {
          "type": "string"
        },
        "homeTown": {
          "type": "string"
        },
        "education": {
          "format": "int32",
          "description": " (HighSchool = Tốt nghiệp PTTH, Intermediate = Trung cấp, Diploma = Kỹ sư, Bachelor = Cử nhân, Master = Thạc sĩ, Doctor = Tiến sĩ)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5
          ],
          "type": "integer"
        },
        "placeOfBirth": {
          "type": "string"
        },
        "isDead": {
          "type": "boolean"
        },
        "symbol": {
          "type": "string"
        },
        "positionName": {
          "type": "string"
        },
        "institutionName": {
          "type": "string"
        },
        "institutionIsListing": {
          "type": "boolean"
        },
        "institutionSymbol": {
          "type": "string"
        },
        "asset": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Individuals.IndividualJob": {
      "type": "object",
      "properties": {
        "officerID": {
          "format": "int32",
          "type": "integer"
        },
        "individualID": {
          "format": "int32",
          "type": "integer"
        },
        "institutionID": {
          "format": "int32",
          "type": "integer"
        },
        "joinDate": {
          "format": "date-time",
          "type": "string"
        },
        "appointedDate": {
          "format": "date-time",
          "type": "string"
        },
        "officerPositionID": {
          "format": "int32",
          "type": "integer"
        },
        "positionName": {
          "type": "string"
        },
        "institutionName": {
          "type": "string"
        },
        "institutionIsListing": {
          "type": "boolean"
        },
        "institutionSymbol": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Individuals.IndividualAsset": {
      "type": "object",
      "properties": {
        "majorHolderID": {
          "format": "int32",
          "type": "integer"
        },
        "individualID": {
          "format": "int32",
          "type": "integer"
        },
        "isFounder": {
          "type": "boolean"
        },
        "institutionID": {
          "format": "int32",
          "type": "integer"
        },
        "ownership": {
          "format": "double",
          "type": "number"
        },
        "shares": {
          "format": "double",
          "type": "number"
        },
        "value": {
          "format": "double",
          "type": "number"
        },
        "institutionName": {
          "type": "string"
        },
        "institutionIsListing": {
          "type": "boolean"
        },
        "institutionSymbol": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Individuals.IndividualRelation": {
      "type": "object",
      "properties": {
        "individualID": {
          "format": "int32",
          "type": "integer"
        },
        "relationTypeID": {
          "format": "int32",
          "type": "integer"
        },
        "relationName": {
          "type": "string"
        },
        "relatedIndividual": {
          "$ref": "#/definitions/FireAnt.Api.Models.Individuals.IndividualItem"
        }
      }
    },
    "FireAnt.Api.Models.Institutions.MajorHolderTransaction": {
      "type": "object",
      "properties": {
        "transactionID": {
          "format": "int32",
          "description": "ID của giao dịch",
          "type": "integer"
        },
        "majorHolderID": {
          "format": "int32",
          "description": "ID của cổ đông lớn",
          "type": "integer"
        },
        "individualHolderID": {
          "format": "int32",
          "description": "ID của cổ đông lớn (cá nhân)",
          "type": "integer"
        },
        "institutionHolderID": {
          "format": "int32",
          "description": "ID của cổ đông lớn (tổ chức)",
          "type": "integer"
        },
        "institutionHolderSymbol": {
          "description": "Mã chứng khoán của tổ chức (nếu là cổ đông tổ chức)",
          "type": "string"
        },
        "institutionHolderExchange": {
          "description": "Sàn niêm yết của tổ chức (nếu là cổ đông tổ chức)",
          "type": "string"
        },
        "name": {
          "description": "Tên của cổ đông lớn",
          "type": "string"
        },
        "position": {
          "description": "Vị trí của cổ đông lớn",
          "type": "string"
        },
        "symbol": {
          "description": "Mã chứng khoán của tổ chức",
          "type": "string"
        },
        "type": {
          "format": "int32",
          "description": "Loại giao dịch (Purchased = Mua, Sold = Bán, StockRightPurchased = Mua quyền mua, StockRightSold = Bán quyền mua)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "executionVolume": {
          "format": "double",
          "description": "Khối lượng giao dịch",
          "type": "number"
        },
        "executionDate": {
          "format": "date-time",
          "description": "Ngày thực thi",
          "type": "string"
        },
        "startDate": {
          "format": "date-time",
          "description": "Ngày bắt đầu",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Ngày kết thúc",
          "type": "string"
        },
        "registeredVolume": {
          "format": "double",
          "description": "Khối lượng đăng ký giao dịch",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Individuals.RichestIndividualItem": {
      "type": "object",
      "properties": {
        "individualID": {
          "format": "int32",
          "type": "integer"
        },
        "isForeign": {
          "type": "boolean"
        },
        "name": {
          "type": "string"
        },
        "gender": {
          "format": "int32",
          "description": " (Male = Nam, Female = Nữ)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "hasPhoto": {
          "type": "boolean"
        },
        "dateOfBirth": {
          "type": "string"
        },
        "homeTown": {
          "type": "string"
        },
        "education": {
          "format": "int32",
          "description": " (HighSchool = Tốt nghiệp PTTH, Intermediate = Trung cấp, Diploma = Kỹ sư, Bachelor = Cử nhân, Master = Thạc sĩ, Doctor = Tiến sĩ)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5
          ],
          "type": "integer"
        },
        "placeOfBirth": {
          "type": "string"
        },
        "isDead": {
          "type": "boolean"
        },
        "symbol": {
          "type": "string"
        },
        "positionName": {
          "type": "string"
        },
        "institutionName": {
          "type": "string"
        },
        "institutionIsListing": {
          "type": "boolean"
        },
        "institutionSymbol": {
          "type": "string"
        },
        "updatedDate": {
          "format": "date-time",
          "type": "string"
        },
        "lastAsset": {
          "format": "double",
          "type": "number"
        },
        "asset1D": {
          "format": "double",
          "type": "number"
        },
        "asset1W": {
          "format": "double",
          "type": "number"
        },
        "asset1M": {
          "format": "double",
          "type": "number"
        },
        "asset3M": {
          "format": "double",
          "type": "number"
        },
        "asset6M": {
          "format": "double",
          "type": "number"
        },
        "asset1Y": {
          "format": "double",
          "type": "number"
        },
        "lastRank": {
          "format": "int32",
          "type": "integer"
        },
        "rank1D": {
          "format": "int32",
          "type": "integer"
        },
        "rank1W": {
          "format": "int32",
          "type": "integer"
        },
        "rank1M": {
          "format": "int32",
          "type": "integer"
        },
        "rank3M": {
          "format": "int32",
          "type": "integer"
        },
        "rank6M": {
          "format": "int32",
          "type": "integer"
        },
        "rank1Y": {
          "format": "int32",
          "type": "integer"
        },
        "assetSourceICBCode": {
          "type": "string"
        },
        "assetSourceICBName": {
          "type": "string"
        },
        "assetSourceICBProportion": {
          "format": "double",
          "type": "number"
        },
        "assetSourceInstitutionID": {
          "format": "int32",
          "type": "integer"
        },
        "assetSourceInstitutionName": {
          "type": "string"
        },
        "assetSourceInstitutionProportion": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Industries.IndustrySnapshot": {
      "type": "object",
      "properties": {
        "industryCode": {
          "description": "Mã ICB của ngành",
          "type": "string"
        },
        "date": {
          "format": "date-time",
          "description": "Ngày giao dịch",
          "type": "string"
        },
        "indexHigh": {
          "format": "double",
          "description": "Index ngành cao nhất",
          "type": "number"
        },
        "indexLow": {
          "format": "double",
          "description": "Index ngành thấp nhất",
          "type": "number"
        },
        "indexOpen": {
          "format": "double",
          "description": "Index mở cửa",
          "type": "number"
        },
        "indexClose": {
          "format": "double",
          "description": "Index đóng cửa",
          "type": "number"
        },
        "indexBasic": {
          "format": "double",
          "description": "Index tham chiếu",
          "type": "number"
        },
        "totalVolume": {
          "format": "double",
          "description": "Tổng khối lượng giao dịch",
          "type": "number"
        },
        "totalValue": {
          "format": "double",
          "description": "Tổng giá trị giao dịch",
          "type": "number"
        },
        "buyCount": {
          "format": "double",
          "description": "Số lệnh đặt mua",
          "type": "number"
        },
        "sellCount": {
          "format": "double",
          "description": "Số lệnh đặt bán",
          "type": "number"
        },
        "buyQuantity": {
          "format": "double",
          "description": "KL đặt mua",
          "type": "number"
        },
        "sellQuantity": {
          "format": "double",
          "description": "KL đặt bán",
          "type": "number"
        },
        "advancesValue": {
          "format": "double",
          "description": "Giá trị giao dịch của các mã tăng giá trong ngành",
          "type": "number"
        },
        "declinesValue": {
          "format": "double",
          "description": "Giá trị giao dịch của các mã giảm giá trong ngành",
          "type": "number"
        },
        "unchangeValue": {
          "format": "double",
          "description": "Giá trị giao dịch của các mã đứng giá trong ngành",
          "type": "number"
        },
        "buyForeignQuantity": {
          "format": "double",
          "description": "Khối lượng nhà đầu tư nước ngoài mua",
          "type": "number"
        },
        "buyForeignValue": {
          "format": "double",
          "description": "Giá trị nhà đầu tư nước ngoài mua",
          "type": "number"
        },
        "sellForeignQuantity": {
          "format": "double",
          "description": "Khối lượng nhà đầu tư nước ngoài bán",
          "type": "number"
        },
        "sellForeignValue": {
          "format": "double",
          "description": "Giá trị nhà đầu tư nước ngoài bán",
          "type": "number"
        },
        "totalActiveBuyVolume": {
          "format": "double",
          "description": "KL mua chủ động",
          "type": "number"
        },
        "totalActiveSellVolume": {
          "format": "double",
          "description": "KL bán chủ động",
          "type": "number"
        },
        "pe": {
          "format": "double",
          "description": "P/E ngành",
          "type": "number"
        },
        "ps": {
          "format": "double",
          "description": "P/S ngành",
          "type": "number"
        },
        "pb": {
          "format": "double",
          "description": "P/B ngành",
          "type": "number"
        },
        "marketCap": {
          "format": "double",
          "description": "Vốn hóa ngành",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Trading.Instrument": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "minQty": {
          "format": "double",
          "type": "number"
        },
        "maxQty": {
          "format": "double",
          "type": "number"
        },
        "qtyStep": {
          "format": "double",
          "type": "number"
        },
        "pipSize": {
          "format": "double",
          "type": "number"
        },
        "pipValue": {
          "format": "double",
          "type": "number"
        },
        "minTick": {
          "format": "double",
          "type": "number"
        },
        "lotSize": {
          "format": "double",
          "type": "number"
        },
        "marginRate": {
          "format": "double",
          "type": "number"
        },
        "baseCurrency": {
          "type": "string"
        },
        "quoteCurrency": {
          "type": "string"
        },
        "type": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Investopedia.InvestopediaTerm": {
      "type": "object",
      "properties": {
        "termId": {
          "format": "int32",
          "type": "integer"
        },
        "categoryId": {
          "format": "int32",
          "type": "integer"
        },
        "category": {
          "$ref": "#/definitions/FireAnt.Api.Models.Investopedia.InvestopediaCategory"
        },
        "termKey": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "englishName": {
          "type": "string"
        },
        "excerpt": {
          "type": "string"
        },
        "content": {
          "type": "string"
        },
        "created": {
          "format": "date-time",
          "type": "string"
        },
        "modified": {
          "format": "date-time",
          "type": "string"
        },
        "views": {
          "format": "int32",
          "type": "integer"
        },
        "videoUrl": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Investopedia.InvestopediaCategory": {
      "type": "object",
      "properties": {
        "categoryID": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.InvestorRelations.IRContract": {
      "description": "Represents a contract for investor relations.",
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Gets or sets the symbol associated with the contract.",
          "type": "string"
        },
        "status": {
          "description": "Gets or sets the status of the contract.",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Gets or sets the end date of the contract.",
          "type": "string"
        },
        "daysRemaining": {
          "format": "int32",
          "description": "Gets or sets the number of days remaining until the contract ends.",
          "type": "integer"
        },
        "contractCode": {
          "description": "Gets or sets the unique code for the contract.",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.InvestorRelations.IRContractDetailInfo": {
      "description": "Represents detailed information about an investor relations contract.",
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Gets or sets the symbol associated with the contract.",
          "type": "string"
        },
        "information": {
          "description": "Gets or sets additional information about the contract.",
          "type": "object"
        }
      }
    },
    "FireAnt.Api.Models.InvestorRelations.IRContractLastStatistics": {
      "description": "Represents the last statistics of an investor relations contract.",
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Gets or sets the symbol associated with the contract.",
          "type": "string"
        },
        "lastUpdated": {
          "format": "date-time",
          "description": "Gets or sets the date and time when the statistics were last updated.",
          "type": "string"
        },
        "statistics": {
          "description": "Gets or sets the statistical data related to the contract.",
          "type": "object"
        }
      }
    },
    "FireAnt.Api.Models.InvestorRelations.IRContractHistoricalStatistics": {
      "description": "Represents historical statistics of an investor relations contract.",
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Gets or sets the symbol associated with the contract.",
          "type": "string"
        },
        "lastUpdated": {
          "format": "date-time",
          "description": "Gets or sets the date and time when the statistics were last updated.",
          "type": "string"
        },
        "statistics": {
          "description": "Gets or sets the statistical data related to the contract.",
          "type": "object"
        }
      }
    },
    "FireAnt.Api.Models.InvestorRelations.IRPostStatistics": {
      "description": "Represents statistics for a post related to investor relations.",
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Gets or sets the symbol associated with the post.",
          "type": "string"
        },
        "date": {
          "format": "date-time",
          "description": "Gets or sets the date of the post.",
          "type": "string"
        },
        "title": {
          "description": "Gets or sets the title of the post.",
          "type": "string"
        },
        "type": {
          "description": "Gets or sets the type of the post.",
          "type": "string"
        },
        "totalNotifications": {
          "format": "int32",
          "description": "Gets or sets the total number of notifications for the post.",
          "type": "integer"
        },
        "totalLikes": {
          "format": "int32",
          "description": "Gets or sets the total number of likes for the post.",
          "type": "integer"
        },
        "totalReplies": {
          "format": "int32",
          "description": "Gets or sets the total number of replies to the post.",
          "type": "integer"
        },
        "fireAntLink": {
          "description": "Gets or sets the FireAnt link related to the post.",
          "type": "string"
        },
        "stockbizLink": {
          "description": "Gets or sets the Stockbiz link related to the post.",
          "type": "string"
        },
        "notes": {
          "description": "Gets or sets additional notes about the post.",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRCompanyItem]": {
      "description": "Kết quả phân trang dùng chung cho module IR",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanyItem"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRCompanyItem": {
      "description": "Công ty đại chúng sử dụng dịch vụ IR",
      "type": "object",
      "properties": {
        "companyId": {
          "format": "int32",
          "description": "ID công ty trong hệ thống IR",
          "type": "integer"
        },
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "companyName": {
          "description": "Tên đầy đủ",
          "type": "string"
        },
        "shortName": {
          "description": "Tên viết tắt",
          "type": "string"
        },
        "exchange": {
          "description": "Sàn niêm yết",
          "type": "string"
        },
        "logoUrl": {
          "description": "Logo",
          "type": "string"
        },
        "website": {
          "description": "Website công ty",
          "type": "string"
        },
        "irWebsite": {
          "description": "Trang quan hệ nhà đầu tư",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái sử dụng dịch vụ (0 = Pending, 1 = Active, 2 = Suspended, 3 = Closed)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "contactName": {
          "description": "Người liên hệ phụ trách IR",
          "type": "string"
        },
        "contactEmail": {
          "description": "Email liên hệ",
          "type": "string"
        },
        "contactPhone": {
          "description": "Điện thoại liên hệ",
          "type": "string"
        },
        "role": {
          "format": "int32",
          "description": "Vai trò của người dùng hiện tại trong công ty này (1 = Owner, 2 = Admin, 3 = Editor, 4 = Analyst, 5 = Viewer)",
          "enum": [
            1,
            2,
            3,
            4,
            5
          ],
          "type": "integer"
        },
        "planCode": {
          "description": "Mã gói dịch vụ đang dùng",
          "type": "string"
        },
        "planName": {
          "description": "Tên gói dịch vụ",
          "type": "string"
        },
        "subscriptionStatus": {
          "format": "int32",
          "description": "Trạng thái hợp đồng (0 = Draft, 1 = Active, 2 = Expired, 3 = Cancelled)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "subscriptionStartDate": {
          "format": "date-time",
          "description": "Ngày bắt đầu hợp đồng",
          "type": "string"
        },
        "subscriptionEndDate": {
          "format": "date-time",
          "description": "Ngày kết thúc hợp đồng",
          "type": "string"
        },
        "daysRemaining": {
          "format": "int32",
          "description": "Số ngày còn lại của hợp đồng",
          "type": "integer"
        },
        "oaUserName": {
          "description": "Tài khoản Official Account",
          "type": "string"
        },
        "oaStatus": {
          "format": "int32",
          "description": "Trạng thái Official Account (0 = Requested, 1 = Verified, 2 = Rejected, 3 = Revoked)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "oaDisplayName": {
          "description": "Tên hiển thị của Official Account",
          "type": "string"
        },
        "userCount": {
          "format": "int32",
          "description": "Số người dùng đang hoạt động",
          "type": "integer"
        },
        "openTicketCount": {
          "format": "int32",
          "description": "Số yêu cầu hỗ trợ đang mở",
          "type": "integer"
        },
        "isDeleted": {
          "description": "Đã xóa mềm",
          "type": "boolean"
        },
        "onboardedDate": {
          "format": "date-time",
          "description": "Ngày bắt đầu sử dụng",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "features": {
          "description": "Hạn mức theo gói: khóa tính năng và giới hạn (null = không giới hạn)",
          "type": "object",
          "additionalProperties": {
            "format": "int32",
            "type": "integer"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRCompanyChangeRequest": {
      "description": "Tạo hoặc cập nhật hồ sơ công ty",
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Mã chứng khoán (bắt buộc khi tạo mới)",
          "type": "string"
        },
        "companyName": {
          "description": "Tên đầy đủ",
          "type": "string"
        },
        "shortName": {
          "description": "Tên viết tắt",
          "type": "string"
        },
        "exchange": {
          "description": "Sàn niêm yết: HOSE, HNX, UPCOM",
          "type": "string"
        },
        "taxCode": {
          "description": "Mã số thuế",
          "type": "string"
        },
        "logoUrl": {
          "description": "Logo",
          "type": "string"
        },
        "website": {
          "description": "Website công ty",
          "type": "string"
        },
        "irWebsite": {
          "description": "Trang quan hệ nhà đầu tư",
          "type": "string"
        },
        "description": {
          "description": "Giới thiệu",
          "type": "string"
        },
        "contactName": {
          "description": "Người phụ trách IR",
          "type": "string"
        },
        "contactEmail": {
          "description": "Email liên hệ",
          "type": "string"
        },
        "contactPhone": {
          "description": "Điện thoại liên hệ",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (chỉ quản trị FireAnt đặt được) (0 = Pending, 1 = Active, 2 = Suspended, 3 = Closed)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRCompanyDetail": {
      "description": "Hồ sơ đầy đủ của công ty",
      "type": "object",
      "properties": {
        "taxCode": {
          "description": "Mã số thuế",
          "type": "string"
        },
        "description": {
          "description": "Giới thiệu công ty",
          "type": "string"
        },
        "contractNo": {
          "description": "Số hợp đồng",
          "type": "string"
        },
        "oaVerifiedDate": {
          "format": "date-time",
          "description": "Ngày xác minh Official Account",
          "type": "string"
        },
        "alertRuleCount": {
          "format": "int32",
          "description": "Số quy tắc cảnh báo đang bật",
          "type": "integer"
        },
        "keywordCount": {
          "format": "int32",
          "description": "Số từ khóa giám sát",
          "type": "integer"
        },
        "peerCount": {
          "format": "int32",
          "description": "Số mã đối chuẩn đã chọn",
          "type": "integer"
        },
        "oaPostCount": {
          "format": "int32",
          "description": "Số bài Official Account",
          "type": "integer"
        },
        "liveSurveyCount": {
          "format": "int32",
          "description": "Số khảo sát đang chạy",
          "type": "integer"
        },
        "documentCount": {
          "format": "int32",
          "description": "Số tài liệu IR",
          "type": "integer"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "modifiedBy": {
          "description": "Người sửa gần nhất",
          "type": "string"
        },
        "modifiedDate": {
          "format": "date-time",
          "description": "Thời điểm sửa gần nhất",
          "type": "string"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty trong hệ thống IR",
          "type": "integer"
        },
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "companyName": {
          "description": "Tên đầy đủ",
          "type": "string"
        },
        "shortName": {
          "description": "Tên viết tắt",
          "type": "string"
        },
        "exchange": {
          "description": "Sàn niêm yết",
          "type": "string"
        },
        "logoUrl": {
          "description": "Logo",
          "type": "string"
        },
        "website": {
          "description": "Website công ty",
          "type": "string"
        },
        "irWebsite": {
          "description": "Trang quan hệ nhà đầu tư",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái sử dụng dịch vụ (0 = Pending, 1 = Active, 2 = Suspended, 3 = Closed)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "contactName": {
          "description": "Người liên hệ phụ trách IR",
          "type": "string"
        },
        "contactEmail": {
          "description": "Email liên hệ",
          "type": "string"
        },
        "contactPhone": {
          "description": "Điện thoại liên hệ",
          "type": "string"
        },
        "role": {
          "format": "int32",
          "description": "Vai trò của người dùng hiện tại trong công ty này (1 = Owner, 2 = Admin, 3 = Editor, 4 = Analyst, 5 = Viewer)",
          "enum": [
            1,
            2,
            3,
            4,
            5
          ],
          "type": "integer"
        },
        "planCode": {
          "description": "Mã gói dịch vụ đang dùng",
          "type": "string"
        },
        "planName": {
          "description": "Tên gói dịch vụ",
          "type": "string"
        },
        "subscriptionStatus": {
          "format": "int32",
          "description": "Trạng thái hợp đồng (0 = Draft, 1 = Active, 2 = Expired, 3 = Cancelled)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "subscriptionStartDate": {
          "format": "date-time",
          "description": "Ngày bắt đầu hợp đồng",
          "type": "string"
        },
        "subscriptionEndDate": {
          "format": "date-time",
          "description": "Ngày kết thúc hợp đồng",
          "type": "string"
        },
        "daysRemaining": {
          "format": "int32",
          "description": "Số ngày còn lại của hợp đồng",
          "type": "integer"
        },
        "oaUserName": {
          "description": "Tài khoản Official Account",
          "type": "string"
        },
        "oaStatus": {
          "format": "int32",
          "description": "Trạng thái Official Account (0 = Requested, 1 = Verified, 2 = Rejected, 3 = Revoked)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "oaDisplayName": {
          "description": "Tên hiển thị của Official Account",
          "type": "string"
        },
        "userCount": {
          "format": "int32",
          "description": "Số người dùng đang hoạt động",
          "type": "integer"
        },
        "openTicketCount": {
          "format": "int32",
          "description": "Số yêu cầu hỗ trợ đang mở",
          "type": "integer"
        },
        "isDeleted": {
          "description": "Đã xóa mềm",
          "type": "boolean"
        },
        "onboardedDate": {
          "format": "date-time",
          "description": "Ngày bắt đầu sử dụng",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "features": {
          "description": "Hạn mức theo gói: khóa tính năng và giới hạn (null = không giới hạn)",
          "type": "object",
          "additionalProperties": {
            "format": "int32",
            "type": "integer"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRSubscriptionChangeRequest": {
      "description": "Tạo hoặc cập nhật hợp đồng dịch vụ",
      "required": [
        "planCode"
      ],
      "type": "object",
      "properties": {
        "planCode": {
          "description": "Mã gói: basic, pro, enterprise",
          "type": "string"
        },
        "contractNo": {
          "description": "Số hợp đồng",
          "type": "string"
        },
        "startDate": {
          "format": "date-time",
          "description": "Ngày bắt đầu",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Ngày kết thúc",
          "type": "string"
        },
        "amount": {
          "format": "double",
          "description": "Giá trị hợp đồng",
          "type": "number"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = Draft, 1 = Active, 2 = Expired, 3 = Cancelled)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "note": {
          "description": "Ghi chú",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRCompanyUserChangeRequest": {
      "description": "Thêm hoặc đổi vai trò người dùng",
      "required": [
        "userName"
      ],
      "type": "object",
      "properties": {
        "userName": {
          "description": "Tên đăng nhập",
          "type": "string"
        },
        "role": {
          "format": "int32",
          "description": "Vai trò (1 = Owner, 2 = Admin, 3 = Editor, 4 = Analyst, 5 = Viewer)",
          "enum": [
            1,
            2,
            3,
            4,
            5
          ],
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = Invited, 1 = Active, 2 = Disabled)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRTicketItem]": {
      "description": "Kết quả phân trang dùng chung cho module IR",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketItem"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTicketItem": {
      "description": "Yêu cầu hỗ trợ gửi tới FireAnt",
      "type": "object",
      "properties": {
        "ticketId": {
          "format": "int32",
          "description": "ID",
          "type": "integer"
        },
        "code": {
          "description": "Mã yêu cầu, dạng IR-2026-00042",
          "type": "string"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "companyName": {
          "description": "Tên công ty",
          "type": "string"
        },
        "type": {
          "format": "int32",
          "description": "Loại yêu cầu (1 = NegativeContent, 2 = Rumor, 3 = Impersonation, 4 = DataCorrection, 5 = OaSupport, 6 = Advertising, 7 = Other)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7
          ],
          "type": "integer"
        },
        "priority": {
          "format": "int32",
          "description": "Mức ưu tiên (1 = Low, 2 = Normal, 3 = High, 4 = Urgent)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = New, 1 = Triaged, 2 = InProgress, 3 = WaitingCustomer, 4 = Resolved, 5 = Rejected, 6 = Closed)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "subject": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "description": {
          "description": "Mô tả chi tiết",
          "type": "string"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "assigneeUserName": {
          "description": "Nhân sự FireAnt phụ trách",
          "type": "string"
        },
        "triagedDate": {
          "format": "date-time",
          "description": "Thời điểm phân loại",
          "type": "string"
        },
        "firstResponseDate": {
          "format": "date-time",
          "description": "Thời điểm phản hồi đầu tiên",
          "type": "string"
        },
        "resolvedDate": {
          "format": "date-time",
          "description": "Thời điểm xử lý xong",
          "type": "string"
        },
        "closedDate": {
          "format": "date-time",
          "description": "Thời điểm đóng",
          "type": "string"
        },
        "slaFirstResponseDue": {
          "format": "date-time",
          "description": "Hạn phản hồi đầu tiên theo cam kết",
          "type": "string"
        },
        "slaResolutionDue": {
          "format": "date-time",
          "description": "Hạn xử lý theo cam kết",
          "type": "string"
        },
        "slaBreached": {
          "description": "Đã quá hạn cam kết",
          "type": "boolean"
        },
        "minutesToResolutionDue": {
          "format": "int32",
          "description": "Số phút còn lại tới hạn xử lý (âm là đã quá hạn)",
          "type": "integer"
        },
        "resolution": {
          "description": "Kết quả xử lý",
          "type": "string"
        },
        "resolutionCode": {
          "format": "int32",
          "description": "Mã kết quả: 1 đã xử lý, 2 từ chối, 3 không vi phạm, 4 trùng, 5 khác",
          "type": "integer"
        },
        "rating": {
          "format": "int32",
          "description": "Điểm đánh giá của công ty (1..5)",
          "type": "integer"
        },
        "ratingComment": {
          "description": "Nhận xét kèm đánh giá",
          "type": "string"
        },
        "source": {
          "format": "int32",
          "description": "Nguồn: 0 cổng IR, 1 tự động phát hiện, 2 ngoại tuyến",
          "type": "integer"
        },
        "itemCount": {
          "format": "int32",
          "description": "Số bằng chứng đính kèm",
          "type": "integer"
        },
        "messageCount": {
          "format": "int32",
          "description": "Số tin nhắn trao đổi",
          "type": "integer"
        },
        "actionCount": {
          "format": "int32",
          "description": "Số hành động đã thực hiện",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTicketDetail": {
      "description": "Yêu cầu hỗ trợ kèm bằng chứng, trao đổi và nhật ký hành động",
      "type": "object",
      "properties": {
        "items": {
          "description": "Bằng chứng đính kèm",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketEvidence"
          }
        },
        "messages": {
          "description": "Trao đổi hai chiều",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketMessage"
          }
        },
        "actions": {
          "description": "Nhật ký hành động của FireAnt",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketActionItem"
          }
        },
        "ticketId": {
          "format": "int32",
          "description": "ID",
          "type": "integer"
        },
        "code": {
          "description": "Mã yêu cầu, dạng IR-2026-00042",
          "type": "string"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "companyName": {
          "description": "Tên công ty",
          "type": "string"
        },
        "type": {
          "format": "int32",
          "description": "Loại yêu cầu (1 = NegativeContent, 2 = Rumor, 3 = Impersonation, 4 = DataCorrection, 5 = OaSupport, 6 = Advertising, 7 = Other)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7
          ],
          "type": "integer"
        },
        "priority": {
          "format": "int32",
          "description": "Mức ưu tiên (1 = Low, 2 = Normal, 3 = High, 4 = Urgent)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = New, 1 = Triaged, 2 = InProgress, 3 = WaitingCustomer, 4 = Resolved, 5 = Rejected, 6 = Closed)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "subject": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "description": {
          "description": "Mô tả chi tiết",
          "type": "string"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "assigneeUserName": {
          "description": "Nhân sự FireAnt phụ trách",
          "type": "string"
        },
        "triagedDate": {
          "format": "date-time",
          "description": "Thời điểm phân loại",
          "type": "string"
        },
        "firstResponseDate": {
          "format": "date-time",
          "description": "Thời điểm phản hồi đầu tiên",
          "type": "string"
        },
        "resolvedDate": {
          "format": "date-time",
          "description": "Thời điểm xử lý xong",
          "type": "string"
        },
        "closedDate": {
          "format": "date-time",
          "description": "Thời điểm đóng",
          "type": "string"
        },
        "slaFirstResponseDue": {
          "format": "date-time",
          "description": "Hạn phản hồi đầu tiên theo cam kết",
          "type": "string"
        },
        "slaResolutionDue": {
          "format": "date-time",
          "description": "Hạn xử lý theo cam kết",
          "type": "string"
        },
        "slaBreached": {
          "description": "Đã quá hạn cam kết",
          "type": "boolean"
        },
        "minutesToResolutionDue": {
          "format": "int32",
          "description": "Số phút còn lại tới hạn xử lý (âm là đã quá hạn)",
          "type": "integer"
        },
        "resolution": {
          "description": "Kết quả xử lý",
          "type": "string"
        },
        "resolutionCode": {
          "format": "int32",
          "description": "Mã kết quả: 1 đã xử lý, 2 từ chối, 3 không vi phạm, 4 trùng, 5 khác",
          "type": "integer"
        },
        "rating": {
          "format": "int32",
          "description": "Điểm đánh giá của công ty (1..5)",
          "type": "integer"
        },
        "ratingComment": {
          "description": "Nhận xét kèm đánh giá",
          "type": "string"
        },
        "source": {
          "format": "int32",
          "description": "Nguồn: 0 cổng IR, 1 tự động phát hiện, 2 ngoại tuyến",
          "type": "integer"
        },
        "itemCount": {
          "format": "int32",
          "description": "Số bằng chứng đính kèm",
          "type": "integer"
        },
        "messageCount": {
          "format": "int32",
          "description": "Số tin nhắn trao đổi",
          "type": "integer"
        },
        "actionCount": {
          "format": "int32",
          "description": "Số hành động đã thực hiện",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTicketEvidence": {
      "description": "Bằng chứng đính kèm. Nội dung được đóng băng tại thời điểm báo cáo nên vẫn\r\ncòn nguyên kể cả khi tác giả sửa hoặc xóa bài.",
      "type": "object",
      "properties": {
        "itemId": {
          "format": "int32",
          "description": "ID",
          "type": "integer"
        },
        "ticketId": {
          "format": "int32",
          "description": "ID yêu cầu",
          "type": "integer"
        },
        "itemType": {
          "format": "int32",
          "description": "Loại bằng chứng (1 = Post, 2 = Comment, 3 = User, 4 = Room, 5 = Url, 6 = File)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "itemKey": {
          "description": "Khóa đối tượng: ID bài, tên tài khoản, đường dẫn",
          "type": "string"
        },
        "snapshotJson": {
          "description": "Bản chụp nội dung tại thời điểm báo cáo",
          "type": "string"
        },
        "fileUrl": {
          "description": "Tệp đính kèm",
          "type": "string"
        },
        "addedBy": {
          "description": "Người thêm",
          "type": "string"
        },
        "addedDate": {
          "format": "date-time",
          "description": "Thời điểm thêm",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTicketMessage": {
      "description": "Tin nhắn trong yêu cầu hỗ trợ",
      "type": "object",
      "properties": {
        "messageId": {
          "format": "int32",
          "description": "ID",
          "type": "integer"
        },
        "ticketId": {
          "format": "int32",
          "description": "ID yêu cầu",
          "type": "integer"
        },
        "senderUserName": {
          "description": "Người gửi",
          "type": "string"
        },
        "senderSide": {
          "format": "int32",
          "description": "Phía gửi (0 = Company, 1 = FireAnt, 2 = System)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "body": {
          "description": "Nội dung",
          "type": "string"
        },
        "attachmentsJson": {
          "description": "Tệp đính kèm",
          "type": "string"
        },
        "isInternalNote": {
          "description": "Ghi chú nội bộ, chỉ nhân sự FireAnt thấy",
          "type": "boolean"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Thời điểm gửi",
          "type": "string"
        },
        "readByCompanyDate": {
          "format": "date-time",
          "description": "Công ty đã đọc lúc",
          "type": "string"
        },
        "readByStaffDate": {
          "format": "date-time",
          "description": "FireAnt đã đọc lúc",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTicketActionItem": {
      "description": "Hành động FireAnt đã thực hiện trên nội dung.\r\nBắt buộc có lý do và không xóa được - đây là hồ sơ cho cả hai bên.",
      "type": "object",
      "properties": {
        "actionId": {
          "format": "int32",
          "description": "ID",
          "type": "integer"
        },
        "ticketId": {
          "format": "int32",
          "description": "ID yêu cầu",
          "type": "integer"
        },
        "action": {
          "format": "int32",
          "description": "Hành động (1 = HidePost, 2 = RemovePost, 3 = WarnUser, 4 = BlockUser, 5 = LabelRumor, 6 = PublishClarification, 7 = ForwardLegal, 8 = NoAction)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8
          ],
          "type": "integer"
        },
        "targetType": {
          "format": "int32",
          "description": "Loại đối tượng bị tác động",
          "type": "integer"
        },
        "targetKey": {
          "description": "Khóa đối tượng bị tác động",
          "type": "string"
        },
        "reason": {
          "description": "Lý do (bắt buộc)",
          "type": "string"
        },
        "performedBy": {
          "description": "Người thực hiện",
          "type": "string"
        },
        "performedDate": {
          "format": "date-time",
          "description": "Thời điểm thực hiện",
          "type": "string"
        },
        "isReversible": {
          "description": "Có thể hoàn tác",
          "type": "boolean"
        },
        "reversedBy": {
          "description": "Người hoàn tác",
          "type": "string"
        },
        "reversedDate": {
          "format": "date-time",
          "description": "Thời điểm hoàn tác",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTicketAssignRequest": {
      "description": "Phân công và đổi mức ưu tiên yêu cầu hỗ trợ",
      "type": "object",
      "properties": {
        "assignee": {
          "description": "Nhân sự phụ trách",
          "type": "string"
        },
        "priority": {
          "format": "int32",
          "description": "Mức ưu tiên mới (1 = Low, 2 = Normal, 3 = High, 4 = Urgent)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTicketStatusRequest": {
      "description": "Chuyển trạng thái yêu cầu hỗ trợ",
      "type": "object",
      "properties": {
        "status": {
          "format": "int32",
          "description": "Trạng thái mới (0 = New, 1 = Triaged, 2 = InProgress, 3 = WaitingCustomer, 4 = Resolved, 5 = Rejected, 6 = Closed)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "resolution": {
          "description": "Kết quả xử lý hoặc lý do từ chối (bắt buộc khi kết thúc)",
          "type": "string"
        },
        "resolutionCode": {
          "format": "int32",
          "description": "Mã kết quả",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTicketMessageRequest": {
      "description": "Gửi tin nhắn trong yêu cầu hỗ trợ",
      "required": [
        "body"
      ],
      "type": "object",
      "properties": {
        "body": {
          "description": "Nội dung",
          "type": "string"
        },
        "attachmentsJson": {
          "description": "Tệp đính kèm",
          "type": "string"
        },
        "isInternalNote": {
          "description": "Ghi chú nội bộ (chỉ nhân sự FireAnt dùng được)",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTicketActionRequest": {
      "description": "Ghi nhận hành động xử lý nội dung",
      "required": [
        "reason"
      ],
      "type": "object",
      "properties": {
        "action": {
          "format": "int32",
          "description": "Hành động (1 = HidePost, 2 = RemovePost, 3 = WarnUser, 4 = BlockUser, 5 = LabelRumor, 6 = PublishClarification, 7 = ForwardLegal, 8 = NoAction)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8
          ],
          "type": "integer"
        },
        "targetType": {
          "format": "int32",
          "description": "Loại đối tượng bị tác động",
          "type": "integer"
        },
        "targetKey": {
          "description": "Khóa đối tượng bị tác động",
          "type": "string"
        },
        "reason": {
          "description": "Lý do - bắt buộc với mọi hành động",
          "type": "string"
        },
        "isReversible": {
          "description": "Có thể hoàn tác",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRSlaDashboard": {
      "description": "Tình hình thực hiện cam kết thời gian",
      "type": "object",
      "properties": {
        "totalTickets": {
          "format": "int32",
          "description": "Tổng số yêu cầu trong kỳ",
          "type": "integer"
        },
        "openTickets": {
          "format": "int32",
          "description": "Đang mở",
          "type": "integer"
        },
        "breachedTickets": {
          "format": "int32",
          "description": "Quá hạn cam kết",
          "type": "integer"
        },
        "respondedTickets": {
          "format": "int32",
          "description": "Đã phản hồi",
          "type": "integer"
        },
        "avgFirstResponseMinutes": {
          "format": "double",
          "description": "Thời gian phản hồi đầu trung bình (phút)",
          "type": "number"
        },
        "avgResolutionMinutes": {
          "format": "double",
          "description": "Thời gian xử lý trung bình (phút)",
          "type": "number"
        },
        "avgRating": {
          "format": "double",
          "description": "Điểm hài lòng trung bình",
          "type": "number"
        },
        "companies": {
          "description": "Thống kê theo công ty",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRSlaCompanyRow"
          }
        },
        "atRisk": {
          "description": "Yêu cầu sắp hoặc đã quá hạn",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRSlaCompanyRow": {
      "description": "Một dòng thống kê cam kết theo công ty",
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "companyName": {
          "description": "Tên công ty",
          "type": "string"
        },
        "totalTickets": {
          "format": "int32",
          "description": "Tổng yêu cầu",
          "type": "integer"
        },
        "openTickets": {
          "format": "int32",
          "description": "Đang mở",
          "type": "integer"
        },
        "breachedTickets": {
          "format": "int32",
          "description": "Quá hạn",
          "type": "integer"
        },
        "avgFirstResponseMinutes": {
          "format": "double",
          "description": "Thời gian phản hồi đầu trung bình (phút)",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.IR.IROaVerificationRequest": {
      "description": "Xác minh hoặc thu hồi Official Account (quản trị FireAnt)",
      "type": "object",
      "properties": {
        "status": {
          "format": "int32",
          "description": "Trạng thái mới (0 = Requested, 1 = Verified, 2 = Rejected, 3 = Revoked)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "reason": {
          "description": "Lý do (bắt buộc khi từ chối hoặc thu hồi)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IROaAccount": {
      "description": "Tài khoản chính chủ của công ty trên mạng xã hội FireAnt",
      "type": "object",
      "properties": {
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "companyName": {
          "description": "Tên công ty",
          "type": "string"
        },
        "userName": {
          "description": "Tài khoản FireAnt dùng làm Official Account",
          "type": "string"
        },
        "displayName": {
          "description": "Tên hiển thị",
          "type": "string"
        },
        "bio": {
          "description": "Giới thiệu",
          "type": "string"
        },
        "avatarUrl": {
          "description": "Ảnh đại diện",
          "type": "string"
        },
        "coverUrl": {
          "description": "Ảnh bìa",
          "type": "string"
        },
        "verificationDocUrl": {
          "description": "Giấy ủy quyền vận hành tài khoản",
          "type": "string"
        },
        "verifiedDate": {
          "format": "date-time",
          "description": "Thời điểm xác minh",
          "type": "string"
        },
        "verifiedBy": {
          "description": "Người xác minh",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = Requested, 1 = Verified, 2 = Rejected, 3 = Revoked)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "rejectReason": {
          "description": "Lý do từ chối hoặc thu hồi",
          "type": "string"
        },
        "autoDraftDisclosures": {
          "description": "Tự tạo bản nháp từ công bố thông tin của sở giao dịch",
          "type": "boolean"
        },
        "commentMode": {
          "format": "int32",
          "description": "Chế độ bình luận (0 = Open, 1 = Moderated, 2 = Closed)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "requireApproval": {
          "description": "Bắt buộc duyệt nội bộ trước khi đăng",
          "type": "boolean"
        },
        "defaultLanguage": {
          "description": "Ngôn ngữ mặc định",
          "type": "string"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "modifiedBy": {
          "description": "Người sửa gần nhất",
          "type": "string"
        },
        "modifiedDate": {
          "format": "date-time",
          "description": "Thời điểm sửa gần nhất",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRCompanySurveyItem]": {
      "description": "Kết quả phân trang dùng chung cho module IR",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCompanySurveyItem"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRCompanySurveyItem": {
      "description": "Khảo sát cổ đông do công ty tạo. Bộ máy khảo sát dùng chung của FireAnt,\r\nbản ghi này giữ phần sở hữu, kiểm duyệt và hạn mức.",
      "type": "object",
      "properties": {
        "companySurveyId": {
          "format": "int32",
          "description": "ID bản ghi sở hữu",
          "type": "integer"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "companyName": {
          "description": "Tên công ty",
          "type": "string"
        },
        "surveyId": {
          "format": "int32",
          "description": "ID khảo sát trong hệ thống khảo sát dùng chung",
          "type": "integer"
        },
        "surveyCode": {
          "description": "Mã khảo sát, hệ thống tự sinh dạng ir-shb-1",
          "type": "string"
        },
        "title": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "reviewStatus": {
          "format": "int32",
          "description": "Trạng thái kiểm duyệt (0 = Draft, 1 = PendingReview, 2 = Approved, 3 = Rejected, 4 = Live, 5 = Closed, 6 = Withdrawn)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "submittedBy": {
          "description": "Người trình duyệt",
          "type": "string"
        },
        "submittedDate": {
          "format": "date-time",
          "description": "Thời điểm trình duyệt",
          "type": "string"
        },
        "reviewedBy": {
          "description": "Người duyệt phía FireAnt",
          "type": "string"
        },
        "reviewedDate": {
          "format": "date-time",
          "description": "Thời điểm duyệt",
          "type": "string"
        },
        "rejectReason": {
          "description": "Lý do từ chối",
          "type": "string"
        },
        "quotaPeriod": {
          "description": "Kỳ đã trừ hạn mức",
          "type": "string"
        },
        "pushInvitesUsed": {
          "format": "int32",
          "description": "Số lần đã mời qua thông báo đẩy",
          "type": "integer"
        },
        "responseCount": {
          "format": "int32",
          "description": "Số phản hồi hoàn thành",
          "type": "integer"
        },
        "draftCount": {
          "format": "int32",
          "description": "Số bản đang làm dở",
          "type": "integer"
        },
        "dismissCount": {
          "format": "int32",
          "description": "Số lượt bỏ qua",
          "type": "integer"
        },
        "completionRate": {
          "format": "double",
          "description": "Tỉ lệ hoàn thành trên số người đã bắt đầu",
          "type": "number"
        },
        "lastStatsSyncDate": {
          "format": "date-time",
          "description": "Lần đồng bộ thống kê gần nhất",
          "type": "string"
        },
        "surveyMissing": {
          "description": "Khảo sát đã bị xóa ở hệ thống khảo sát dùng chung",
          "type": "boolean"
        },
        "origin": {
          "format": "int32",
          "description": "Nguồn gốc: doanh nghiệp tạo trên cổng IR hay khảo sát FireAnt gắn với mã (0 = Company, 1 = FireAnt)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "modifiedBy": {
          "description": "Người sửa gần nhất",
          "type": "string"
        },
        "modifiedDate": {
          "format": "date-time",
          "description": "Thời điểm sửa gần nhất",
          "type": "string"
        },
        "survey": {
          "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyDetail",
          "description": "Chi tiết khảo sát lấy từ hệ thống khảo sát dùng chung"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyDetail": {
      "description": "Thông tin chi tiết khảo sát kèm danh sách câu hỏi, lựa chọn, điều kiện rẽ nhánh và quy tắc đối tượng",
      "type": "object",
      "properties": {
        "questions": {
          "description": "Danh sách câu hỏi theo thứ tự hiển thị",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyQuestionItem"
          }
        },
        "audienceRules": {
          "description": "Quy tắc nhắm đối tượng (rỗng = mọi người dùng)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyAudienceRuleItem"
          }
        },
        "outcomeRules": {
          "description": "Hành động sau khảo sát (rỗng = không có). Client có thể dùng để xem trước; server là nơi quyết định khi gửi.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyOutcomeRuleItem"
          }
        },
        "surveyId": {
          "format": "int32",
          "description": "ID khảo sát",
          "type": "integer"
        },
        "code": {
          "description": "Mã/slug khảo sát (tùy chọn)",
          "type": "string"
        },
        "title": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "description": {
          "description": "Mô tả",
          "type": "string"
        },
        "thankYouMessage": {
          "description": "Lời cảm ơn hiển thị sau khi gửi",
          "type": "string"
        },
        "imageUrl": {
          "description": "Ảnh minh họa",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = Draft, 1 = Published, 2 = Closed, 3 = Archived)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "isAnonymous": {
          "description": "Cho phép trả lời không cần đăng nhập",
          "type": "boolean"
        },
        "allowMultipleResponses": {
          "description": "Cho phép một người trả lời nhiều lần",
          "type": "boolean"
        },
        "showResults": {
          "description": "Cho phép người trả lời xem kết quả tổng hợp",
          "type": "boolean"
        },
        "startDate": {
          "format": "date-time",
          "description": "Thời điểm bắt đầu nhận phản hồi (null = ngay khi publish)",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Thời điểm kết thúc nhận phản hồi (null = không giới hạn)",
          "type": "string"
        },
        "maxResponses": {
          "format": "int32",
          "description": "Số phản hồi tối đa (null = không giới hạn)",
          "type": "integer"
        },
        "targetAudience": {
          "description": "Nhóm đối tượng (all, premium, ios, android...)",
          "type": "string"
        },
        "priority": {
          "format": "int32",
          "description": "Ưu tiên hiển thị (cao hơn lên trước)",
          "type": "integer"
        },
        "displayMode": {
          "format": "int32",
          "description": "Cách hiển thị trên App/Web: 0 ListOnly, 1 Banner, 2 Prompt (0 = ListOnly, 1 = Banner, 2 = Prompt)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "dismissible": {
          "description": "Cho phép người dùng \"Để sau\" / \"Không quan tâm\"",
          "type": "boolean"
        },
        "snoozeDays": {
          "format": "int32",
          "description": "Số ngày ẩn khảo sát khi người dùng chọn \"Để sau\"",
          "type": "integer"
        },
        "showToGuests": {
          "description": "Khảo sát yêu cầu đăng nhập vẫn hiện với khách chưa đăng nhập (client mời đăng nhập khi bấm vào)",
          "type": "boolean"
        },
        "presentationMode": {
          "format": "int32",
          "description": "Chế độ trình bày: 0 cuộn một trang, 1 mỗi Section một trang, 2 mỗi câu một màn hình (0 = Scroll, 1 = SectionPages, 2 = OneByOne)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "settings": {
          "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveySettings",
          "description": "Thiết lập trình bày (tự chuyển câu, màn hình mở đầu, màu nhấn...)"
        },
        "isDismissed": {
          "description": "Người dùng hiện tại đang bỏ qua khảo sát này (Để sau còn hạn hoặc Không quan tâm)",
          "type": "boolean"
        },
        "dismissedUntil": {
          "format": "date-time",
          "description": "Ẩn đến thời điểm này (null nếu không bỏ qua hoặc ẩn hẳn)",
          "type": "string"
        },
        "dismissCount": {
          "format": "int32",
          "description": "Số người đã bỏ qua khảo sát (admin)",
          "type": "integer"
        },
        "targetCount": {
          "format": "int32",
          "description": "Số đối tượng khảo sát được gắn vào (0 = khảo sát chung)",
          "type": "integer"
        },
        "targetSummary": {
          "description": "Tóm tắt đối tượng gắn kèm cho admin, ví dụ \"symbol:FPT, post:40203799\"",
          "type": "string"
        },
        "targets": {
          "description": "Đối tượng gắn kèm (có trong chi tiết và danh sách người dùng cuối)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyTargetItem"
          }
        },
        "questionCount": {
          "format": "int32",
          "description": "Số câu hỏi",
          "type": "integer"
        },
        "responseCount": {
          "format": "int32",
          "description": "Số phản hồi đã nhận",
          "type": "integer"
        },
        "hasResponded": {
          "description": "Người dùng hiện tại đã trả lời khảo sát này chưa",
          "type": "boolean"
        },
        "hasDraft": {
          "description": "Người dùng hiện tại đang có bản nháp chưa gửi",
          "type": "boolean"
        },
        "draftCount": {
          "format": "int32",
          "description": "Số bản nháp đang tồn tại (admin)",
          "type": "integer"
        },
        "isActive": {
          "description": "Khảo sát đang trong thời gian nhận phản hồi",
          "type": "boolean"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "updatedBy": {
          "description": "Người cập nhật cuối",
          "type": "string"
        },
        "updatedDate": {
          "format": "date-time",
          "description": "Ngày cập nhật cuối",
          "type": "string"
        },
        "publishedDate": {
          "format": "date-time",
          "description": "Ngày publish",
          "type": "string"
        },
        "closedDate": {
          "format": "date-time",
          "description": "Ngày đóng",
          "type": "string"
        },
        "isDeleted": {
          "description": "Đã xóa mềm",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyQuestionItem": {
      "description": "Câu hỏi trong khảo sát",
      "type": "object",
      "properties": {
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "surveyId": {
          "format": "int32",
          "description": "ID khảo sát",
          "type": "integer"
        },
        "questionText": {
          "description": "Nội dung câu hỏi (với Section: tiêu đề nhóm/trang)",
          "type": "string"
        },
        "description": {
          "description": "Mô tả / hướng dẫn thêm",
          "type": "string"
        },
        "questionType": {
          "format": "int32",
          "description": "Loại câu hỏi (1 = SingleChoice, 2 = MultipleChoice, 3 = Text, 4 = Rating, 5 = YesNo, 6 = Number, 7 = Date, 8 = Dropdown, 9 = Matrix, 10 = Ranking, 11 = FileUpload, 12 = Symbol, 13 = DateRange, 14 = Slider, 15 = Section, 16 = Hotspot, 17 = FillInBlank)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17
          ],
          "type": "integer"
        },
        "isRequired": {
          "description": "Bắt buộc trả lời",
          "type": "boolean"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự hiển thị",
          "type": "integer"
        },
        "minValue": {
          "format": "int32",
          "description": "Rating/Number/Slider/Matrix(thang điểm): giá trị nhỏ nhất",
          "type": "integer"
        },
        "maxValue": {
          "format": "int32",
          "description": "Rating/Number/Slider/Matrix(thang điểm): giá trị lớn nhất",
          "type": "integer"
        },
        "minLabel": {
          "description": "Rating/Slider: nhãn đầu thang",
          "type": "string"
        },
        "maxLabel": {
          "description": "Rating/Slider: nhãn cuối thang",
          "type": "string"
        },
        "maxSelections": {
          "format": "int32",
          "description": "MultipleChoice/Ranking/Symbol/FileUpload: số lượng tối đa (null = không giới hạn / xếp hạng tất cả)",
          "type": "integer"
        },
        "allowOtherOption": {
          "description": "Có lựa chọn \"Khác\" cho phép nhập text",
          "type": "boolean"
        },
        "placeholder": {
          "description": "Gợi ý nhập (Text/Number/Symbol)",
          "type": "string"
        },
        "maxLength": {
          "format": "int32",
          "description": "Text: độ dài tối đa",
          "type": "integer"
        },
        "settings": {
          "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyQuestionSettings",
          "description": "Cấu hình bổ sung theo loại câu hỏi"
        },
        "randomizeOptions": {
          "description": "Xáo thứ tự lựa chọn mỗi lần hiển thị (lựa chọn \"Khác\" luôn ở cuối)",
          "type": "boolean"
        },
        "conditionLogic": {
          "format": "int32",
          "description": "Cách kết hợp các điều kiện hiển thị (0 = All, 1 = Any)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "options": {
          "description": "Danh sách lựa chọn. Với Matrix: optionGroup = Choice là dòng, optionGroup = MatrixColumn là cột.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyOptionItem"
          }
        },
        "conditions": {
          "description": "Điều kiện hiển thị (rỗng = luôn hiển thị)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyQuestionConditionItem"
          }
        },
        "carryForwardQuestionId": {
          "format": "int32",
          "description": "Lấy lựa chọn từ đáp án câu trước: câu nguồn (cùng số lựa chọn, ánh xạ theo thứ tự).\r\nChỉ hiện các lựa chọn tương ứng đã chọn (Selected) hoặc chưa chọn (NotSelected) ở câu nguồn.",
          "type": "integer"
        },
        "carryForwardMode": {
          "format": "int32",
          "description": "Cách lấy lựa chọn từ câu nguồn (1 = Selected, 2 = NotSelected)",
          "enum": [
            1,
            2
          ],
          "type": "integer"
        },
        "jumps": {
          "description": "Quy tắc nhảy sau câu này (quy tắc đầu tiên khớp được dùng)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyQuestionJumpItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyAudienceRuleItem": {
      "description": "Quy tắc nhắm đối tượng của khảo sát. Khảo sát chỉ hiển thị cho người dùng thỏa TẤT CẢ quy tắc.",
      "type": "object",
      "properties": {
        "ruleId": {
          "format": "int32",
          "description": "ID quy tắc",
          "type": "integer"
        },
        "surveyId": {
          "format": "int32",
          "description": "ID khảo sát",
          "type": "integer"
        },
        "ruleType": {
          "format": "int32",
          "description": "Loại quy tắc (1 = Platform, 2 = AppVersion, 3 = MembershipLevel, 4 = Role, 5 = UserName, 6 = IdentityVerified, 7 = Tag)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7
          ],
          "type": "integer"
        },
        "operator": {
          "format": "int32",
          "description": "Phép so sánh (1 = In, 2 = NotIn, 3 = GreaterOrEqual, 4 = LessOrEqual, 5 = Equals, 6 = NotEquals)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "value": {
          "description": "Giá trị so sánh, danh sách phân cách bởi dấu phẩy với In/NotIn (VD: \"ios,android\", \"2\", \"user1,user2\", \"1.5.0\", \"true\")",
          "type": "string"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyOutcomeRuleItem": {
      "description": "Hành động sau khảo sát (Admin cấu hình). Sau khi người dùng gửi phản hồi, server duyệt các quy tắc theo\r\nthứ tự; quy tắc đầu tiên thỏa điều kiện (hoặc quy tắc mặc định) được trả về trong {FireAnt.Api.Models.Surveys.SurveySubmitResult.Outcome}\r\ndưới dạng nút bấm thủ công (không tự chuyển hướng).",
      "type": "object",
      "properties": {
        "ruleId": {
          "format": "int32",
          "description": "ID quy tắc",
          "type": "integer"
        },
        "surveyId": {
          "format": "int32",
          "description": "ID khảo sát",
          "type": "integer"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự ưu tiên (nhỏ hơn được xét trước)",
          "type": "integer"
        },
        "title": {
          "description": "Tiêu đề hiển thị trên màn hình cảm ơn (tùy chọn)",
          "type": "string"
        },
        "description": {
          "description": "Mô tả ngắn lý do gợi ý (tùy chọn)",
          "type": "string"
        },
        "buttonLabel": {
          "description": "Nhãn nút bấm",
          "type": "string"
        },
        "actionType": {
          "format": "int32",
          "description": "Loại hành động (1 = Url, 2 = AppRoute, 3 = Survey, 4 = Symbol)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "actionValue": {
          "description": "Giá trị hành động: URL (Url), JSON {route, routeParams} (AppRoute), SurveyId (Survey), mã CK (Symbol).\r\nHỗ trợ placeholder {answer:N}, {surveyId}, {responseId}, {userName}, {anonymousId}.",
          "type": "string"
        },
        "openInNewTab": {
          "description": "Mở trong tab mới (chỉ có ý nghĩa với Url trên web)",
          "type": "boolean"
        },
        "conditionLogic": {
          "format": "int32",
          "description": "Cách kết hợp điều kiện: All (mặc định) hoặc Any (0 = All, 1 = Any)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "isDefault": {
          "description": "Quy tắc mặc định: áp dụng khi không quy tắc nào khác khớp (tối đa một)",
          "type": "boolean"
        },
        "conditions": {
          "description": "Điều kiện (rỗng với quy tắc mặc định)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyOutcomeConditionItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveySettings": {
      "description": "Thiết lập trình bày của khảo sát (JSON trong Surveys.Settings). Client dùng; bỏ trống = mặc định.",
      "type": "object",
      "properties": {
        "autoAdvance": {
          "description": "Tự chuyển sang câu sau khi chọn xong câu chọn một / Có-Không / thang điểm (chế độ từng câu). Mặc định true",
          "type": "boolean"
        },
        "showWelcome": {
          "description": "Hiện màn hình mở đầu (ảnh bìa, thời gian ước tính, nút Bắt đầu) ở chế độ từng câu. Mặc định true",
          "type": "boolean"
        },
        "showProgress": {
          "description": "Hiện thanh tiến độ. Mặc định true",
          "type": "boolean"
        },
        "allowBack": {
          "description": "Cho quay lại câu trước. Mặc định true",
          "type": "boolean"
        },
        "celebrate": {
          "description": "Hiệu ứng chúc mừng khi hoàn thành. Mặc định true",
          "type": "boolean"
        },
        "showQuestionNumbers": {
          "description": "Hiện số thứ tự câu hỏi. Mặc định true",
          "type": "boolean"
        },
        "accentColor": {
          "description": "Màu nhấn của khảo sát (#RRGGBB). Bỏ trống = màu thương hiệu của ứng dụng",
          "type": "string"
        },
        "welcomeTitle": {
          "description": "Tiêu đề màn hình mở đầu (bỏ trống = tiêu đề khảo sát)",
          "type": "string"
        },
        "welcomeButton": {
          "description": "Nhãn nút bắt đầu (bỏ trống = \"Bắt đầu\")",
          "type": "string"
        },
        "estimatedMinutes": {
          "format": "int32",
          "description": "Thời gian ước tính (phút) ghi đè cách tính tự động",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyTargetItem": {
      "description": "Đối tượng mà khảo sát được gắn vào (bài viết, mã chứng khoán, hội nhóm...).\r\nClient lấy khảo sát theo đối tượng qua GET /surveys/target/{targetType}/{targetKey}.",
      "type": "object",
      "properties": {
        "targetId": {
          "format": "int32",
          "description": "ID bản ghi",
          "type": "integer"
        },
        "surveyId": {
          "format": "int32",
          "description": "ID khảo sát",
          "type": "integer"
        },
        "targetType": {
          "description": "Loại đối tượng (chữ thường): post, symbol, room, user, event, article, url...",
          "type": "string"
        },
        "targetKey": {
          "description": "Khóa đối tượng: postId, mã CK (viết hoa), roomId, userId, URL...",
          "type": "string"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự hiển thị",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyQuestionSettings": {
      "description": "Cấu hình bổ sung theo loại câu hỏi (lưu JSON trong SurveyQuestions.Settings).\r\nChỉ các trường phù hợp với loại câu hỏi mới được sử dụng.",
      "type": "object",
      "properties": {
        "step": {
          "format": "double",
          "description": "Slider/Number: bước nhảy (ví dụ 0.5). Null = tự do",
          "type": "number"
        },
        "unit": {
          "description": "Slider/Number/Rating: đơn vị hiển thị (%, VND, điểm...)",
          "type": "string"
        },
        "minSelections": {
          "format": "int32",
          "description": "MultipleChoice/Ranking/Symbol/FileUpload: số lượng tối thiểu phải chọn/nhập",
          "type": "integer"
        },
        "allowedFileTypes": {
          "description": "FileUpload: đuôi tệp cho phép (ví dụ [\"jpg\",\"png\",\"pdf\"]). Null = mặc định ảnh + pdf",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "maxFileSizeKb": {
          "format": "int32",
          "description": "FileUpload: dung lượng tối đa mỗi tệp (KB). Null = 10240",
          "type": "integer"
        },
        "minDate": {
          "format": "date-time",
          "description": "Date/DateRange: ngày sớm nhất được chọn",
          "type": "string"
        },
        "maxDate": {
          "format": "date-time",
          "description": "Date/DateRange: ngày muộn nhất được chọn",
          "type": "string"
        },
        "maxRangeDays": {
          "format": "int32",
          "description": "DateRange: số ngày tối đa của khoảng",
          "type": "integer"
        },
        "symbolTypes": {
          "description": "Symbol: chỉ cho phép loại chứng khoán (STOCK, ETF, INDEX...). Null = tất cả",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "showAsStars": {
          "description": "Rating: hiển thị dạng sao (client dùng). Giữ để tương thích; ưu tiên ratingStyle",
          "type": "boolean"
        },
        "ratingStyle": {
          "description": "Rating: number | star | emoji | heart | nps (0..10, tô màu 3 nhóm)",
          "type": "string"
        },
        "emojis": {
          "description": "Rating (emoji) / Slider (emoji): emoji theo từng mức, từ thấp tới cao",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "scaleLabels": {
          "description": "Rating: nhãn cho từng mức, từ thấp tới cao (hiện dưới mức đang chọn)",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "yesNoStyle": {
          "description": "YesNo: buttons | thumbs | emoji",
          "type": "string"
        },
        "yesLabel": {
          "description": "YesNo: nhãn nút Có (bỏ trống = \"Có\")",
          "type": "string"
        },
        "noLabel": {
          "description": "YesNo: nhãn nút Không (bỏ trống = \"Không\")",
          "type": "string"
        },
        "optionLayout": {
          "description": "SingleChoice/MultipleChoice: list | grid (ô vuông) | cards (thẻ ảnh lớn)",
          "type": "string"
        },
        "imageAspect": {
          "description": "grid/cards: tỷ lệ ảnh 1:1 | 4:3 | 16:9 | 3:4",
          "type": "string"
        },
        "showOptionText": {
          "description": "grid/cards: hiện chữ dưới ảnh (mặc định true)",
          "type": "boolean"
        },
        "columns": {
          "format": "int32",
          "description": "grid/cards: số cột trên màn rộng (2..4, mặc định tự động)",
          "type": "integer"
        },
        "sliderStyle": {
          "description": "Slider: default | gradient | emoji",
          "type": "string"
        },
        "marks": {
          "description": "Slider: vạch mốc có nhãn",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveySliderMark"
          }
        },
        "prefix": {
          "description": "Slider/Number: tiền tố hiển thị (ví dụ \"+\", \"$\")",
          "type": "string"
        },
        "range": {
          "description": "Slider: chọn khoảng hai đầu (trả lời number + numberTo)",
          "type": "boolean"
        },
        "gradientColors": {
          "description": "Slider (gradient): màu dải từ thấp tới cao (#RRGGBB)",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "showValue": {
          "description": "Slider: hiện giá trị đang chọn (mặc định true)",
          "type": "boolean"
        },
        "rankingStyle": {
          "description": "Ranking: drag (kéo thả sắp tất cả) | pick (chọn top N rồi sắp)",
          "type": "string"
        },
        "imageUrl": {
          "description": "Hotspot: ảnh nền (bắt buộc)",
          "type": "string"
        },
        "imageWidth": {
          "format": "int32",
          "description": "Hotspot: bề rộng ảnh gốc (px) để giữ đúng tỷ lệ",
          "type": "integer"
        },
        "imageHeight": {
          "format": "int32",
          "description": "Hotspot: chiều cao ảnh gốc (px)",
          "type": "integer"
        },
        "showHeatmapPublic": {
          "description": "Hotspot: cho người trả lời xem bản đồ nhiệt ở kết quả công khai",
          "type": "boolean"
        },
        "showRegions": {
          "description": "Hotspot: hiện viền các vùng có tên cho người trả lời",
          "type": "boolean"
        },
        "requireRegion": {
          "description": "Hotspot: điểm chạm bắt buộc nằm trong một vùng có tên",
          "type": "boolean"
        },
        "template": {
          "description": "FillInBlank: câu mẫu, ô trống viết {{key}} (key = optionValue của ô trống). Ví dụ \"Tôi đầu tư vì {{1}}\"",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyOptionItem": {
      "description": "Lựa chọn của câu hỏi",
      "type": "object",
      "properties": {
        "optionId": {
          "format": "int32",
          "description": "ID lựa chọn",
          "type": "integer"
        },
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "optionText": {
          "description": "Nội dung lựa chọn",
          "type": "string"
        },
        "optionValue": {
          "description": "Giá trị nội bộ (mã/điểm) - tùy chọn",
          "type": "string"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự hiển thị",
          "type": "integer"
        },
        "isOther": {
          "description": "Là lựa chọn \"Khác\" (cho phép nhập text kèm theo)",
          "type": "boolean"
        },
        "imageUrl": {
          "description": "Ảnh minh họa",
          "type": "string"
        },
        "optionGroup": {
          "format": "int32",
          "description": "Nhóm: Choice (lựa chọn / dòng ma trận / vùng hotspot), MatrixColumn (cột ma trận), Blank (ô trống), BlankChoice (lựa chọn của ô trống) (0 = Choice, 1 = MatrixColumn, 2 = Blank, 3 = BlankChoice)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "settings": {
          "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyOptionSettings",
          "description": "Thiết lập: vùng hotspot (shape, x, y, w, h), ô trống (blankKind, placeholder...), icon, mô tả"
        },
        "parentOptionId": {
          "format": "int32",
          "description": "BlankChoice: optionId của ô trống cha",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyQuestionConditionItem": {
      "description": "Điều kiện hiển thị câu hỏi (logic rẽ nhánh). Câu hỏi chỉ hiện khi các điều kiện của nó\r\n(kết hợp theo conditionLogic) thỏa trên câu trả lời của câu hỏi nguồn.",
      "type": "object",
      "properties": {
        "conditionId": {
          "format": "int32",
          "description": "ID điều kiện",
          "type": "integer"
        },
        "questionId": {
          "format": "int32",
          "description": "Câu hỏi bị điều kiện",
          "type": "integer"
        },
        "sourceQuestionId": {
          "format": "int32",
          "description": "Câu hỏi nguồn (luôn đứng trước câu bị điều kiện)",
          "type": "integer"
        },
        "operator": {
          "format": "int32",
          "description": "Phép so sánh (1 = Equals, 2 = NotEquals, 3 = Contains, 4 = GreaterThan, 5 = LessThan, 6 = Answered, 7 = NotAnswered)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7
          ],
          "type": "integer"
        },
        "optionId": {
          "format": "int32",
          "description": "Lựa chọn của câu nguồn để so sánh (các loại chọn)",
          "type": "integer"
        },
        "value": {
          "description": "Giá trị để so sánh (số, text, true/false, ngày ISO)",
          "type": "string"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyQuestionJumpItem": {
      "description": "Quy tắc nhảy của một câu hỏi: sau khi trả lời câu này, nếu điều kiện đúng thì chuyển tới câu đích\r\n(bỏ qua các câu ở giữa) hoặc kết thúc khảo sát (TargetQuestionId = null). Quy tắc đầu tiên khớp được dùng.",
      "type": "object",
      "properties": {
        "jumpId": {
          "format": "int32",
          "description": "ID quy tắc",
          "type": "integer"
        },
        "questionId": {
          "format": "int32",
          "description": "Câu hỏi nguồn",
          "type": "integer"
        },
        "targetQuestionId": {
          "format": "int32",
          "description": "Câu/phần đích (đứng sau câu nguồn). Null = kết thúc khảo sát",
          "type": "integer"
        },
        "conditionLogic": {
          "format": "int32",
          "description": "Cách kết hợp điều kiện (0 = All, 1 = Any)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự xét",
          "type": "integer"
        },
        "conditions": {
          "description": "Điều kiện (cùng phép so sánh với rẽ nhánh; câu nguồn là câu này hoặc câu trước đó)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyJumpConditionItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyOutcomeConditionItem": {
      "description": "Điều kiện của một hành động sau khảo sát (cùng operator với rẽ nhánh câu hỏi)",
      "type": "object",
      "properties": {
        "conditionId": {
          "format": "int32",
          "description": "ID điều kiện",
          "type": "integer"
        },
        "ruleId": {
          "format": "int32",
          "description": "ID quy tắc",
          "type": "integer"
        },
        "sourceQuestionId": {
          "format": "int32",
          "description": "Câu hỏi nguồn",
          "type": "integer"
        },
        "operator": {
          "format": "int32",
          "description": "Phép so sánh (1 = Equals, 2 = NotEquals, 3 = Contains, 4 = GreaterThan, 5 = LessThan, 6 = Answered, 7 = NotAnswered)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7
          ],
          "type": "integer"
        },
        "optionId": {
          "format": "int32",
          "description": "Lựa chọn của câu nguồn để so sánh",
          "type": "integer"
        },
        "value": {
          "description": "Giá trị so sánh (số, text, true/false, ngày)",
          "type": "string"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveySliderMark": {
      "description": "Vạch mốc của thanh trượt",
      "type": "object",
      "properties": {
        "value": {
          "format": "double",
          "description": "Giá trị",
          "type": "number"
        },
        "label": {
          "description": "Nhãn hiển thị (bỏ trống = giá trị)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyOptionSettings": {
      "description": "Thiết lập của một lựa chọn (JSON trong SurveyQuestionOptions.Settings)",
      "type": "object",
      "properties": {
        "shape": {
          "description": "Hotspot: hình của vùng - rect | ellipse",
          "type": "string"
        },
        "x": {
          "format": "double",
          "description": "Hotspot: tọa độ trái của vùng theo tỷ lệ bề rộng ảnh (0..1)",
          "type": "number"
        },
        "y": {
          "format": "double",
          "description": "Hotspot: tọa độ trên của vùng theo tỷ lệ chiều cao ảnh (0..1)",
          "type": "number"
        },
        "w": {
          "format": "double",
          "description": "Hotspot: bề rộng vùng theo tỷ lệ (0..1)",
          "type": "number"
        },
        "h": {
          "format": "double",
          "description": "Hotspot: chiều cao vùng theo tỷ lệ (0..1)",
          "type": "number"
        },
        "blankKind": {
          "description": "FillInBlank: kiểu ô trống - text | choice | number | symbol",
          "type": "string"
        },
        "placeholder": {
          "description": "FillInBlank: gợi ý trong ô trống",
          "type": "string"
        },
        "maxLength": {
          "format": "int32",
          "description": "FillInBlank (text): độ dài tối đa (mặc định 200)",
          "type": "integer"
        },
        "min": {
          "format": "double",
          "description": "FillInBlank (number): giá trị nhỏ nhất",
          "type": "number"
        },
        "max": {
          "format": "double",
          "description": "FillInBlank (number): giá trị lớn nhất",
          "type": "number"
        },
        "required": {
          "description": "FillInBlank: ô trống bắt buộc khi câu hỏi bắt buộc (mặc định true)",
          "type": "boolean"
        },
        "width": {
          "description": "FillInBlank: độ rộng ô - sm | md | lg",
          "type": "string"
        },
        "icon": {
          "description": "Lựa chọn: icon đại diện - tên trong bộ icon khảo sát (@fireant-media/survey-ui/icons, Lucide), ví dụ \"wallet\", \"trending-up\".\r\nChỉ kiểm tra dạng tên (chữ thường, số, \"-\", tối đa 40 ký tự) để thêm icon mới không cần deploy API.",
          "type": "string"
        },
        "emoji": {
          "description": "Lựa chọn: emoji đại diện (cũ - survey-ui tự đổi emoji quen thuộc sang icon; khảo sát mới dùng Icon)",
          "type": "string"
        },
        "description": {
          "description": "Lựa chọn dạng thẻ: mô tả phụ",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyJumpConditionItem": {
      "description": "Điều kiện của quy tắc nhảy",
      "type": "object",
      "properties": {
        "conditionId": {
          "format": "int32",
          "description": "ID điều kiện",
          "type": "integer"
        },
        "jumpId": {
          "format": "int32",
          "description": "ID quy tắc",
          "type": "integer"
        },
        "sourceQuestionId": {
          "format": "int32",
          "description": "Câu hỏi nguồn",
          "type": "integer"
        },
        "operator": {
          "format": "int32",
          "description": "Phép so sánh (1 = Equals, 2 = NotEquals, 3 = Contains, 4 = GreaterThan, 5 = LessThan, 6 = Answered, 7 = NotAnswered)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7
          ],
          "type": "integer"
        },
        "optionId": {
          "format": "int32",
          "description": "Lựa chọn so sánh",
          "type": "integer"
        },
        "value": {
          "description": "Giá trị so sánh",
          "type": "string"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRSurveyReviewRequest": {
      "description": "Duyệt hoặc từ chối khảo sát cổ đông (quản trị FireAnt)",
      "type": "object",
      "properties": {
        "status": {
          "format": "int32",
          "description": "Trạng thái mới (0 = Draft, 1 = PendingReview, 2 = Approved, 3 = Rejected, 4 = Live, 5 = Closed, 6 = Withdrawn)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "reason": {
          "description": "Lý do từ chối",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRLexiconItem": {
      "description": "Mục trong từ điển cảm xúc",
      "type": "object",
      "properties": {
        "lexiconId": {
          "format": "int32",
          "description": "ID",
          "type": "integer"
        },
        "phrase": {
          "description": "Cụm từ",
          "type": "string"
        },
        "polarity": {
          "format": "int32",
          "description": "Điểm cực (-100..100)",
          "type": "integer"
        },
        "weight": {
          "format": "double",
          "description": "Trọng số",
          "type": "number"
        },
        "category": {
          "description": "Nhóm chủ đề",
          "type": "string"
        },
        "severity": {
          "format": "int32",
          "description": "Mức nghiêm trọng",
          "type": "integer"
        },
        "isActive": {
          "description": "Đang bật",
          "type": "boolean"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRSentimentLabelRequest": {
      "description": "Gán nhãn cảm xúc thủ công (quản trị FireAnt)",
      "type": "object",
      "properties": {
        "sentiment": {
          "format": "int32",
          "description": "Điểm cảm xúc từ -100 đến 100",
          "type": "integer"
        },
        "severity": {
          "format": "int32",
          "description": "Mức nghiêm trọng (0..3)",
          "type": "integer"
        },
        "topicsJson": {
          "description": "Chủ đề",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRJobRunItem": {
      "description": "Một dòng nhật ký thao tác",
      "type": "object",
      "properties": {
        "runId": {
          "format": "int32",
          "description": "ID lượt chạy",
          "type": "integer"
        },
        "jobName": {
          "description": "Tên job: ingest, ai, alerts, operations, daily, topics...",
          "type": "string"
        },
        "triggeredBy": {
          "description": "sqlagent khi chạy theo lịch, tên đăng nhập khi chạy tay",
          "type": "string"
        },
        "startedDate": {
          "format": "date-time",
          "description": "Bắt đầu",
          "type": "string"
        },
        "finishedDate": {
          "format": "date-time",
          "description": "Kết thúc, null khi đang chạy",
          "type": "string"
        },
        "durationMs": {
          "format": "int32",
          "description": "Thời gian chạy (ms)",
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "description": "0 đang chạy, 1 xong, 2 xong nhưng lỗi từng phần, 3 thất bại",
          "type": "integer"
        },
        "summary": {
          "description": "Tóm tắt kết quả",
          "type": "string"
        },
        "errors": {
          "description": "Lỗi từng phần (mỗi dòng một mã / một phần tử)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRPageInfo]": {
      "description": "Kết quả phân trang dùng chung cho module IR",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageInfo"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageInfo": {
      "description": "Thông tin trang",
      "type": "object",
      "properties": {
        "pageId": {
          "format": "int32",
          "type": "integer"
        },
        "symbol": {
          "type": "string"
        },
        "companyId": {
          "format": "int32",
          "type": "integer"
        },
        "companyName": {
          "type": "string"
        },
        "companyWebsite": {
          "type": "string"
        },
        "origin": {
          "format": "int32",
          "description": " (0 = Company, 1 = Migrated, 2 = FireAnt)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "description": " (0 = Unpublished, 1 = Published, 2 = Suspended, 3 = Disabled)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "publishedVersionId": {
          "format": "int32",
          "type": "integer"
        },
        "draftVersionId": {
          "format": "int32",
          "type": "integer"
        },
        "firstApprovedDate": {
          "format": "date-time",
          "description": "Đã qua duyệt lần đầu (từ đây sửa thường thì xuất bản ngay)",
          "type": "string"
        },
        "locales": {
          "type": "string"
        },
        "brand": {
          "type": "string"
        },
        "logoUrl": {
          "type": "string"
        },
        "customDomain": {
          "type": "string"
        },
        "customDomainStatus": {
          "format": "int32",
          "description": "0 chưa có, 1 chờ duyệt, 2 hoạt động, 3 từ chối",
          "type": "integer"
        },
        "suspendedReason": {
          "type": "string"
        },
        "suspendedDate": {
          "format": "date-time",
          "type": "string"
        },
        "publishedDate": {
          "format": "date-time",
          "type": "string"
        },
        "createdBy": {
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "type": "string"
        },
        "modifiedBy": {
          "type": "string"
        },
        "modifiedDate": {
          "format": "date-time",
          "type": "string"
        },
        "pendingCount": {
          "format": "int32",
          "description": "Danh sách quản trị: số phiên bản chờ duyệt",
          "type": "integer"
        },
        "followerCount": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageReviewItem": {
      "description": "Hàng đợi duyệt",
      "type": "object",
      "properties": {
        "versionId": {
          "format": "int32",
          "type": "integer"
        },
        "versionNo": {
          "format": "int32",
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "description": " (0 = Draft, 1 = PendingReview, 2 = Scheduled, 3 = Rejected, 4 = Published, 5 = Superseded, 6 = Withdrawn)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "note": {
          "type": "string"
        },
        "reviewReasons": {
          "type": "object"
        },
        "submittedBy": {
          "type": "string"
        },
        "submittedDate": {
          "format": "date-time",
          "type": "string"
        },
        "scheduledDate": {
          "format": "date-time",
          "type": "string"
        },
        "pageId": {
          "format": "int32",
          "type": "integer"
        },
        "symbol": {
          "type": "string"
        },
        "companyId": {
          "format": "int32",
          "type": "integer"
        },
        "companyName": {
          "type": "string"
        },
        "publishedVersionId": {
          "format": "int32",
          "type": "integer"
        },
        "firstApprovedDate": {
          "format": "date-time",
          "type": "string"
        },
        "waitingHours": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageReviewRequest": {
      "description": "Duyệt phiên bản (FireAnt)",
      "type": "object",
      "properties": {
        "versionId": {
          "format": "int32",
          "type": "integer"
        },
        "approve": {
          "type": "boolean"
        },
        "note": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRPageClaim]": {
      "description": "Kết quả phân trang dùng chung cho module IR",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageClaim"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageClaim": {
      "type": "object",
      "properties": {
        "claimId": {
          "format": "int32",
          "type": "integer"
        },
        "symbol": {
          "type": "string"
        },
        "requestedBy": {
          "description": "Tên đăng nhập FireAnt của người gửi (chỉ nhân sự FireAnt thấy)",
          "type": "string"
        },
        "contactName": {
          "type": "string"
        },
        "position": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        },
        "message": {
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "0 mới, 1 đã liên hệ, 2 đã ký hợp đồng, 3 từ chối",
          "type": "integer"
        },
        "handledBy": {
          "type": "string"
        },
        "handledDate": {
          "format": "date-time",
          "type": "string"
        },
        "handledNote": {
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "type": "string"
        },
        "companyId": {
          "format": "int32",
          "type": "integer"
        },
        "companyName": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageClaimUpdateRequest": {
      "type": "object",
      "properties": {
        "status": {
          "format": "int32",
          "type": "integer"
        },
        "note": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageState": {
      "description": "Trạng thái đầy đủ cho trình dựng trang",
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "page": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageInfo",
          "description": "null khi mã chưa có trang"
        },
        "draft": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageVersionItem"
        },
        "published": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageVersionItem"
        },
        "pending": {
          "description": "Phiên bản chờ duyệt / hẹn giờ / bị từ chối gần nhất",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageVersionItem"
          }
        },
        "features": {
          "description": "Tính năng gói đang bật (khóa → bật)",
          "type": "object",
          "additionalProperties": {
            "type": "boolean"
          }
        },
        "trustedHosts": {
          "description": "Tên miền tin cậy thêm (website doanh nghiệp) khi xét link ra ngoài",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "isFireAntAdmin": {
          "description": "Người xem là nhân sự FireAnt",
          "type": "boolean"
        },
        "canPublish": {
          "description": "Vai trò hiện tại cho phép xuất bản",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageVersionItem": {
      "description": "Một phiên bản trang",
      "type": "object",
      "properties": {
        "versionId": {
          "format": "int32",
          "type": "integer"
        },
        "versionNo": {
          "format": "int32",
          "type": "integer"
        },
        "revision": {
          "format": "int32",
          "description": "Số lần lưu bản nháp (chống ghi đè lẫn nhau)",
          "type": "integer"
        },
        "schemaVersion": {
          "format": "int32",
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "description": " (0 = Draft, 1 = PendingReview, 2 = Scheduled, 3 = Rejected, 4 = Published, 5 = Superseded, 6 = Withdrawn)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "sizeBytes": {
          "format": "int32",
          "type": "integer"
        },
        "contentHash": {
          "type": "string"
        },
        "note": {
          "type": "string"
        },
        "reviewReasons": {
          "description": "Lý do cần duyệt (JSON danh sách RiskReason của ir-page)",
          "type": "object"
        },
        "createdBy": {
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "type": "string"
        },
        "modifiedBy": {
          "type": "string"
        },
        "modifiedDate": {
          "format": "date-time",
          "type": "string"
        },
        "submittedBy": {
          "type": "string"
        },
        "submittedDate": {
          "format": "date-time",
          "type": "string"
        },
        "reviewedBy": {
          "description": "Người duyệt; phía doanh nghiệp luôn là \"FireAnt\"",
          "type": "string"
        },
        "reviewedDate": {
          "format": "date-time",
          "type": "string"
        },
        "reviewNote": {
          "type": "string"
        },
        "scheduledDate": {
          "format": "date-time",
          "type": "string"
        },
        "publishedBy": {
          "type": "string"
        },
        "publishedDate": {
          "format": "date-time",
          "type": "string"
        },
        "content": {
          "description": "Nội dung trang (chỉ có khi đọc một phiên bản cụ thể / bản nháp / bản đang hiện)",
          "type": "object"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagePreviewRequest": {
      "description": "Xem trước: dựng gói trang từ nội dung chưa lưu",
      "type": "object",
      "properties": {
        "content": {
          "type": "object"
        },
        "lang": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageBundle": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "locale": {
          "type": "string"
        },
        "status": {
          "description": "published | auto | preview",
          "type": "string"
        },
        "official": {
          "description": "Trang do doanh nghiệp quản lý; trang tự động thì false",
          "type": "boolean"
        },
        "verified": {
          "description": "Official Account đã xác minh",
          "type": "boolean"
        },
        "company": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRBundleCompany"
        },
        "page": {
          "description": "Tài liệu trang (JSON ir-page)",
          "type": "object"
        },
        "media": {
          "description": "media:&lt;id&gt; → URL",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRBundleMedia"
          }
        },
        "data": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageData"
        },
        "tokens": {
          "description": "Giá trị số liệu sống (khóa như fin.revenue_ytd)",
          "type": "object",
          "additionalProperties": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTokenValue"
          }
        },
        "features": {
          "description": "qa.ask | qa.vote | follow | events.register | contact | livestream | survey | claim | embed",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "version": {
          "format": "int32",
          "type": "integer"
        },
        "publishedAt": {
          "format": "date-time",
          "type": "string"
        },
        "generatedAt": {
          "format": "date-time",
          "type": "string"
        },
        "canonicalUrl": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRBundleCompany": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "shortName": {
          "type": "string"
        },
        "exchange": {
          "type": "string"
        },
        "industry": {
          "type": "string"
        },
        "logo": {
          "type": "string"
        },
        "website": {
          "type": "string"
        },
        "oaUserId": {
          "description": "Trang công khai của Official Account: fireant.vn/thanh-vien/{oaUserId}",
          "type": "string"
        },
        "oaName": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRBundleMedia": {
      "type": "object",
      "properties": {
        "url": {
          "type": "string"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "contentType": {
          "type": "string"
        },
        "alt": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRLText"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageData": {
      "type": "object",
      "properties": {
        "quote": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRQuoteSnapshot"
        },
        "facts": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRKeyFacts"
        },
        "financials": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRFinancialsData"
        },
        "ratios": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRRatioItem"
          }
        },
        "dividends": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRDividendYear"
          }
        },
        "corporateEvents": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCorporateEvent"
          }
        },
        "prices": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPricesData"
        },
        "holders": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRHolderItem"
          }
        },
        "ownership": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IROwnership"
        },
        "officers": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IROfficerItem"
          }
        },
        "insiderTrades": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRInsiderTrade"
          }
        },
        "disclosures": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRNewsItem"
          }
        },
        "news": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRNewsItem"
          }
        },
        "oaPosts": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRNewsItem"
          }
        },
        "documents": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRBundleDocument"
          }
        },
        "events": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRBundleEvent"
          }
        },
        "questions": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRBundleQuestions"
        },
        "surveys": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRBundleSurvey"
          }
        },
        "livestreams": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRLivestreamInfo"
          }
        },
        "peers": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPeerRow"
          }
        },
        "plan": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPlanItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTokenValue": {
      "type": "object",
      "properties": {
        "v": {
          "description": "Số hoặc chữ",
          "type": "object"
        },
        "asOf": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRLText": {
      "description": "Chuỗi hai ngôn ngữ",
      "type": "object",
      "properties": {
        "vi": {
          "type": "string"
        },
        "en": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRQuoteSnapshot": {
      "type": "object",
      "properties": {
        "price": {
          "format": "double",
          "type": "number"
        },
        "refPrice": {
          "format": "double",
          "type": "number"
        },
        "change": {
          "format": "double",
          "type": "number"
        },
        "changePct": {
          "format": "double",
          "type": "number"
        },
        "open": {
          "format": "double",
          "type": "number"
        },
        "high": {
          "format": "double",
          "type": "number"
        },
        "low": {
          "format": "double",
          "type": "number"
        },
        "volume": {
          "format": "double",
          "type": "number"
        },
        "value": {
          "format": "double",
          "type": "number"
        },
        "marketCap": {
          "format": "double",
          "type": "number"
        },
        "sharesOutstanding": {
          "format": "double",
          "type": "number"
        },
        "freeShares": {
          "format": "double",
          "type": "number"
        },
        "high52w": {
          "format": "double",
          "type": "number"
        },
        "low52w": {
          "format": "double",
          "type": "number"
        },
        "change1y": {
          "format": "double",
          "type": "number"
        },
        "foreignRoom": {
          "format": "double",
          "type": "number"
        },
        "foreignOwnership": {
          "format": "double",
          "type": "number"
        },
        "beta": {
          "format": "double",
          "type": "number"
        },
        "avgVolume10d": {
          "format": "double",
          "type": "number"
        },
        "asOf": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRKeyFacts": {
      "type": "object",
      "properties": {
        "companyName": {
          "type": "string"
        },
        "shortName": {
          "type": "string"
        },
        "internationalName": {
          "type": "string"
        },
        "exchange": {
          "type": "string"
        },
        "icbCode": {
          "type": "string"
        },
        "industry": {
          "type": "string"
        },
        "companyType": {
          "description": "General | Bank | Securities | Insurance",
          "type": "string"
        },
        "charterCapital": {
          "format": "double",
          "type": "number"
        },
        "sharesOutstanding": {
          "format": "double",
          "type": "number"
        },
        "listingDate": {
          "type": "string"
        },
        "establishmentDate": {
          "type": "string"
        },
        "headquarters": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "website": {
          "type": "string"
        },
        "employees": {
          "format": "int64",
          "type": "integer"
        },
        "branches": {
          "format": "int32",
          "type": "integer"
        },
        "taxCode": {
          "type": "string"
        },
        "overview": {
          "type": "string"
        },
        "businessAreas": {
          "type": "string"
        },
        "isListed": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRFinancialsData": {
      "type": "object",
      "properties": {
        "companyType": {
          "type": "string"
        },
        "quarterly": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRFinancialSeries"
        },
        "annual": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRFinancialSeries"
        },
        "ttm": {
          "type": "object",
          "additionalProperties": {
            "format": "double",
            "type": "number"
          }
        },
        "latestPeriod": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRRatioItem": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "value": {
          "format": "double",
          "type": "number"
        },
        "industry": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRDividendYear": {
      "type": "object",
      "properties": {
        "year": {
          "format": "int32",
          "type": "integer"
        },
        "cash": {
          "format": "double",
          "description": "Đồng / cổ phiếu",
          "type": "number"
        },
        "stock": {
          "format": "double",
          "description": "Tỉ lệ (0,2 = 20%)",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRCorporateEvent": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "kind": {
          "description": "cash_dividend | stock_dividend | rights | other",
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "exDate": {
          "description": "Ngày giao dịch không hưởng quyền",
          "type": "string"
        },
        "recordDate": {
          "description": "Ngày đăng ký cuối cùng",
          "type": "string"
        },
        "payDate": {
          "description": "Ngày thực hiện / thanh toán",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPricesData": {
      "type": "object",
      "properties": {
        "daily": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPricePoint"
          }
        },
        "weekly": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPricePoint"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRHolderItem": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "position": {
          "type": "string"
        },
        "shares": {
          "format": "double",
          "type": "number"
        },
        "ownership": {
          "format": "double",
          "description": "Tỉ lệ (0–1)",
          "type": "number"
        },
        "isOrganization": {
          "type": "boolean"
        },
        "isForeigner": {
          "type": "boolean"
        },
        "reported": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IROwnership": {
      "type": "object",
      "properties": {
        "state": {
          "format": "double",
          "type": "number"
        },
        "foreign": {
          "format": "double",
          "type": "number"
        },
        "other": {
          "format": "double",
          "type": "number"
        },
        "freeFloat": {
          "format": "double",
          "type": "number"
        },
        "foreignLimit": {
          "format": "double",
          "type": "number"
        },
        "asOf": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IROfficerItem": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "position": {
          "type": "string"
        },
        "group": {
          "description": "board | executive | supervisory | other",
          "type": "string"
        },
        "isForeigner": {
          "type": "boolean"
        },
        "individualId": {
          "format": "int32",
          "type": "integer"
        },
        "photoUrl": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRInsiderTrade": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "position": {
          "type": "string"
        },
        "kind": {
          "description": "buy | sell | other",
          "type": "string"
        },
        "registered": {
          "format": "double",
          "type": "number"
        },
        "executed": {
          "format": "double",
          "type": "number"
        },
        "startDate": {
          "type": "string"
        },
        "endDate": {
          "type": "string"
        },
        "executionDate": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRNewsItem": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int64",
          "type": "integer"
        },
        "title": {
          "type": "string"
        },
        "summary": {
          "type": "string"
        },
        "date": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "source": {
          "type": "string"
        },
        "kind": {
          "description": "disclosure | news | oa",
          "type": "string"
        },
        "image": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRBundleDocument": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "title": {
          "type": "string"
        },
        "category": {
          "format": "int32",
          "type": "integer"
        },
        "period": {
          "type": "string"
        },
        "language": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "fileName": {
          "type": "string"
        },
        "size": {
          "format": "int64",
          "type": "integer"
        },
        "contentType": {
          "type": "string"
        },
        "publishedDate": {
          "type": "string"
        },
        "downloads": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRBundleEvent": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "format": "int32",
          "type": "integer"
        },
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "start": {
          "type": "string"
        },
        "end": {
          "type": "string"
        },
        "location": {
          "type": "string"
        },
        "onlineUrl": {
          "type": "string"
        },
        "livestreamPostId": {
          "format": "int32",
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "type": "integer"
        },
        "registrable": {
          "type": "boolean"
        },
        "registrations": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRBundleQuestions": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRBundleQuestion"
          }
        },
        "total": {
          "format": "int32",
          "type": "integer"
        },
        "answered": {
          "format": "int32",
          "type": "integer"
        },
        "pending": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRBundleSurvey": {
      "type": "object",
      "properties": {
        "companySurveyId": {
          "format": "int32",
          "type": "integer"
        },
        "surveyId": {
          "format": "int32",
          "type": "integer"
        },
        "title": {
          "type": "string"
        },
        "status": {
          "format": "int32",
          "type": "integer"
        },
        "endDate": {
          "type": "string"
        },
        "responses": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRLivestreamInfo": {
      "type": "object",
      "properties": {
        "postId": {
          "format": "int32",
          "type": "integer"
        },
        "title": {
          "type": "string"
        },
        "userId": {
          "type": "string"
        },
        "started": {
          "type": "boolean"
        },
        "ended": {
          "type": "boolean"
        },
        "scheduledAt": {
          "type": "string"
        },
        "viewUrl": {
          "type": "string"
        },
        "thumbnail": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPeerRow": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "self": {
          "type": "boolean"
        },
        "values": {
          "type": "object",
          "additionalProperties": {
            "format": "double",
            "type": "number"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPlanItem": {
      "type": "object",
      "properties": {
        "metric": {
          "type": "string"
        },
        "year": {
          "format": "int32",
          "type": "integer"
        },
        "target": {
          "format": "double",
          "type": "number"
        },
        "actual": {
          "format": "double",
          "type": "number"
        },
        "ratio": {
          "format": "double",
          "type": "number"
        },
        "source": {
          "description": "company | fireant",
          "type": "string"
        },
        "quarters": {
          "type": "array",
          "items": {
            "format": "double",
            "type": "number"
          }
        },
        "asOf": {
          "type": "string"
        },
        "sourceDocumentId": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRFinancialSeries": {
      "type": "object",
      "properties": {
        "period": {
          "description": "Q | Y",
          "type": "string"
        },
        "periods": {
          "description": "\"Q1/2025\" hoặc \"2025\", cũ trước mới sau",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "values": {
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "format": "double",
              "type": "number"
            }
          }
        },
        "sector": {
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "format": "double",
              "type": "number"
            }
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPricePoint": {
      "type": "object",
      "properties": {
        "d": {
          "type": "string"
        },
        "c": {
          "format": "double",
          "type": "number"
        },
        "v": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRBundleQuestion": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "body": {
          "type": "string"
        },
        "askedByName": {
          "description": "Tên công khai; ẩn danh thì \"Nhà đầu tư ẩn danh\"",
          "type": "string"
        },
        "anonymous": {
          "type": "boolean"
        },
        "askedAt": {
          "type": "string"
        },
        "status": {
          "description": "pending | answered",
          "type": "string"
        },
        "answer": {
          "type": "string"
        },
        "answeredAt": {
          "type": "string"
        },
        "upVotes": {
          "format": "int32",
          "type": "integer"
        },
        "context": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageSuspendRequest": {
      "description": "Tạm ẩn / hiện lại trang (FireAnt)",
      "type": "object",
      "properties": {
        "suspend": {
          "type": "boolean"
        },
        "reason": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageDomainRequest": {
      "description": "Đăng ký / duyệt tên miền riêng",
      "type": "object",
      "properties": {
        "domain": {
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "FireAnt duyệt: 0 gỡ, 2 hoạt động, 3 từ chối",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageImportRequest": {
      "description": "FireAnt tạo / thay trang và xuất bản ngay",
      "type": "object",
      "properties": {
        "content": {
          "type": "object"
        },
        "origin": {
          "format": "int32",
          "description": " (0 = Company, 1 = Migrated, 2 = FireAnt)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "note": {
          "type": "string"
        },
        "publish": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRDashboard": {
      "description": "Tổng quan dashboard của một mã",
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "companyName": {
          "description": "Tên công ty",
          "type": "string"
        },
        "current": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRKpi",
          "description": "Chỉ số kỳ này"
        },
        "previous": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRKpi",
          "description": "Chỉ số kỳ liền trước, để tính phần trăm thay đổi"
        },
        "series": {
          "description": "Chuỗi số liệu theo ngày",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRMetricPoint"
          }
        },
        "topMentions": {
          "description": "Nội dung nổi bật: tương tác cao nhất và tiêu cực nặng nhất",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRMentionItem"
          }
        },
        "recentAlerts": {
          "description": "Cảnh báo gần đây",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAlertEventItem"
          }
        },
        "operations": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IROperationSummary",
          "description": "Tình hình vận hành dịch vụ"
        },
        "audienceTrackingSince": {
          "format": "date-time",
          "description": "Ngày bắt đầu ghi nhận các chỉ số về người theo dõi. Trước ngày này không có\r\nsố liệu vì hệ thống MXH chỉ lưu trạng thái hiện tại, không lưu lịch sử.",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRKpi": {
      "description": "Chỉ số tổng hợp của một kỳ.\r\nKhông có chỉ số lượt xem: hệ thống MXH không ghi nhận sự kiện đó.",
      "type": "object",
      "properties": {
        "fromDate": {
          "format": "date-time",
          "description": "Từ ngày",
          "type": "string"
        },
        "toDate": {
          "format": "date-time",
          "description": "Đến ngày",
          "type": "string"
        },
        "mentions": {
          "format": "int32",
          "description": "Tổng lượt nhắc đến mã",
          "type": "integer"
        },
        "postMentions": {
          "format": "int32",
          "description": "Bài viết của nhà đầu tư",
          "type": "integer"
        },
        "commentMentions": {
          "format": "int32",
          "description": "Bình luận",
          "type": "integer"
        },
        "newsMentions": {
          "format": "int32",
          "description": "Tin tức",
          "type": "integer"
        },
        "disclosureMentions": {
          "format": "int32",
          "description": "Công bố thông tin",
          "type": "integer"
        },
        "roomMentions": {
          "format": "int32",
          "description": "Bài trong nhóm thảo luận",
          "type": "integer"
        },
        "oaMentions": {
          "format": "int32",
          "description": "Bài của Official Account",
          "type": "integer"
        },
        "uniqueAuthors": {
          "format": "int32",
          "description": "Số tác giả duy nhất",
          "type": "integer"
        },
        "verifiedAuthors": {
          "format": "int32",
          "description": "Tác giả đã định danh",
          "type": "integer"
        },
        "expertAuthors": {
          "format": "int32",
          "description": "Tác giả là chuyên gia",
          "type": "integer"
        },
        "authorFollowerSum": {
          "format": "int64",
          "description": "Tổng số người theo dõi của các tác giả đã nhắc đến mã - độ phủ tiềm năng.\r\nĐÂY KHÔNG PHẢI LƯỢT XEM: là tổng follower, một người có thể được đếm ở nhiều tác giả.",
          "type": "integer"
        },
        "likes": {
          "format": "int32",
          "description": "Lượt thích",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "description": "Lượt trả lời",
          "type": "integer"
        },
        "shares": {
          "format": "int32",
          "description": "Lượt chia sẻ",
          "type": "integer"
        },
        "engagementScore": {
          "format": "double",
          "description": "Điểm tương tác = thích + 2 x trả lời + 3 x chia sẻ",
          "type": "number"
        },
        "positiveCount": {
          "format": "int32",
          "description": "Số nội dung tích cực",
          "type": "integer"
        },
        "neutralCount": {
          "format": "int32",
          "description": "Số nội dung trung tính",
          "type": "integer"
        },
        "negativeCount": {
          "format": "int32",
          "description": "Số nội dung tiêu cực",
          "type": "integer"
        },
        "unclassifiedCount": {
          "format": "int32",
          "description": "Số nội dung chưa phân loại - hiển thị công khai để biết độ phủ",
          "type": "integer"
        },
        "sentimentScore": {
          "format": "double",
          "description": "Điểm cảm xúc bình quân (-100..100)",
          "type": "number"
        },
        "negativeRatio": {
          "format": "double",
          "description": "Tỉ lệ nội dung tiêu cực trên tổng đã phân loại",
          "type": "number"
        },
        "severityHighCount": {
          "format": "int32",
          "description": "Số nội dung mức nghiêm trọng từ 2 trở lên",
          "type": "integer"
        },
        "watchlistUsers": {
          "format": "int32",
          "description": "Số người có mã trong danh mục theo dõi",
          "type": "integer"
        },
        "watchlistNet": {
          "format": "int32",
          "description": "Biến động ròng người theo dõi trong kỳ",
          "type": "integer"
        },
        "priceAlertUsers": {
          "format": "int32",
          "description": "Số người đặt cảnh báo giá cho mã",
          "type": "integer"
        },
        "roomMembers": {
          "format": "int32",
          "description": "Số thành viên các nhóm thảo luận gắn mã",
          "type": "integer"
        },
        "symbolRoomCount": {
          "format": "int32",
          "description": "Số nhóm thảo luận gắn mã",
          "type": "integer"
        },
        "oaFollowers": {
          "format": "int32",
          "description": "Số người theo dõi Official Account",
          "type": "integer"
        },
        "oaFollowersNet": {
          "format": "int32",
          "description": "Biến động ròng người theo dõi Official Account",
          "type": "integer"
        },
        "oaPosts": {
          "format": "int32",
          "description": "Số bài Official Account đã đăng",
          "type": "integer"
        },
        "oaLikes": {
          "format": "int32",
          "description": "Lượt thích trên bài Official Account",
          "type": "integer"
        },
        "oaReplies": {
          "format": "int32",
          "description": "Lượt trả lời trên bài Official Account",
          "type": "integer"
        },
        "shareOfVoice": {
          "format": "double",
          "description": "Tỉ trọng thảo luận trong nhóm đối chuẩn",
          "type": "number"
        },
        "peerRank": {
          "format": "int32",
          "description": "Thứ hạng trong nhóm đối chuẩn",
          "type": "integer"
        },
        "marketRank": {
          "format": "int32",
          "description": "Thứ hạng theo số bài trên toàn sàn",
          "type": "integer"
        },
        "latestDate": {
          "format": "date-time",
          "description": "Ngày cuối cùng có số liệu trong kỳ",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRMetricPoint": {
      "description": "Một điểm dữ liệu theo ngày",
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "date": {
          "format": "date-time",
          "description": "Ngày",
          "type": "string"
        },
        "mentions": {
          "format": "int32",
          "description": "Lượt nhắc đến",
          "type": "integer"
        },
        "postMentions": {
          "format": "int32",
          "description": "Bài nhà đầu tư",
          "type": "integer"
        },
        "commentMentions": {
          "format": "int32",
          "description": "Bình luận",
          "type": "integer"
        },
        "newsMentions": {
          "format": "int32",
          "description": "Tin tức",
          "type": "integer"
        },
        "disclosureMentions": {
          "format": "int32",
          "description": "Công bố thông tin",
          "type": "integer"
        },
        "roomMentions": {
          "format": "int32",
          "description": "Bài trong nhóm",
          "type": "integer"
        },
        "oaMentions": {
          "format": "int32",
          "description": "Bài Official Account",
          "type": "integer"
        },
        "uniqueAuthors": {
          "format": "int32",
          "description": "Tác giả duy nhất trong ngày",
          "type": "integer"
        },
        "authorFollowerSum": {
          "format": "int64",
          "description": "Tổng follower của tác giả (không phải lượt xem)",
          "type": "integer"
        },
        "likes": {
          "format": "int32",
          "description": "Lượt thích",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "description": "Lượt trả lời",
          "type": "integer"
        },
        "shares": {
          "format": "int32",
          "description": "Lượt chia sẻ",
          "type": "integer"
        },
        "engagementScore": {
          "format": "double",
          "description": "Điểm tương tác",
          "type": "number"
        },
        "positiveCount": {
          "format": "int32",
          "description": "Tích cực",
          "type": "integer"
        },
        "neutralCount": {
          "format": "int32",
          "description": "Trung tính",
          "type": "integer"
        },
        "negativeCount": {
          "format": "int32",
          "description": "Tiêu cực",
          "type": "integer"
        },
        "unclassifiedCount": {
          "format": "int32",
          "description": "Chưa phân loại",
          "type": "integer"
        },
        "sentimentScore": {
          "format": "double",
          "description": "Điểm cảm xúc",
          "type": "number"
        },
        "negativeRatio": {
          "format": "double",
          "description": "Tỉ lệ tiêu cực",
          "type": "number"
        },
        "severityHighCount": {
          "format": "int32",
          "description": "Nội dung nghiêm trọng",
          "type": "integer"
        },
        "watchlistUsers": {
          "format": "int32",
          "description": "Người theo dõi trong watchlist",
          "type": "integer"
        },
        "watchlistNet": {
          "format": "int32",
          "description": "Biến động ròng người theo dõi",
          "type": "integer"
        },
        "priceAlertUsers": {
          "format": "int32",
          "description": "Người đặt cảnh báo giá",
          "type": "integer"
        },
        "roomMembers": {
          "format": "int32",
          "description": "Thành viên nhóm gắn mã",
          "type": "integer"
        },
        "oaFollowers": {
          "format": "int32",
          "description": "Người theo dõi Official Account",
          "type": "integer"
        },
        "oaFollowersNet": {
          "format": "int32",
          "description": "Biến động ròng follower Official Account",
          "type": "integer"
        },
        "oaPosts": {
          "format": "int32",
          "description": "Số bài Official Account",
          "type": "integer"
        },
        "shareOfVoice": {
          "format": "double",
          "description": "Tỉ trọng thảo luận trong nhóm đối chuẩn",
          "type": "number"
        },
        "peerRank": {
          "format": "int32",
          "description": "Thứ hạng trong nhóm đối chuẩn",
          "type": "integer"
        },
        "marketRank": {
          "format": "int32",
          "description": "Thứ hạng toàn sàn",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRMentionItem": {
      "description": "Một nội dung nhắc đến mã",
      "type": "object",
      "properties": {
        "mentionId": {
          "format": "int64",
          "description": "ID bản ghi",
          "type": "integer"
        },
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "postId": {
          "format": "int32",
          "description": "ID bài viết trên mạng xã hội",
          "type": "integer"
        },
        "parentPostId": {
          "format": "int32",
          "description": "Bài gốc (với bình luận)",
          "type": "integer"
        },
        "channel": {
          "format": "int32",
          "description": "Kênh phát sinh (1 = Post, 2 = Comment, 3 = News, 4 = Disclosure, 5 = RoomPost, 6 = OfficialAccount)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "postDate": {
          "format": "date-time",
          "description": "Thời điểm đăng",
          "type": "string"
        },
        "authorUserName": {
          "description": "Tên đăng nhập của tác giả (thường là email) - chỉ dùng nội bộ FireAnt, luôn rỗng trong phản hồi cho doanh nghiệp",
          "type": "string"
        },
        "authorName": {
          "description": "Tên hiển thị công khai của tác giả trên mạng xã hội",
          "type": "string"
        },
        "authorId": {
          "description": "Mã tài khoản công khai của tác giả (trang https://fireant.vn/thanh-vien/{AuthorId})",
          "type": "string"
        },
        "authorFollowers": {
          "format": "int32",
          "description": "Số người theo dõi tác giả",
          "type": "integer"
        },
        "authorIsVerified": {
          "description": "Tác giả đã định danh",
          "type": "boolean"
        },
        "authorIsExpert": {
          "description": "Tác giả là chuyên gia",
          "type": "boolean"
        },
        "roomId": {
          "format": "int32",
          "description": "Nhóm thảo luận",
          "type": "integer"
        },
        "roomName": {
          "description": "Tên nhóm khi nội dung đăng trong nhóm",
          "type": "string"
        },
        "taggedSymbols": {
          "description": "Tất cả mã được gắn trong bài (theo bảng chữ cái). Bài gắn nhiều mã thường là bình luận chung thị trường.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "isRemoved": {
          "description": "Bài gốc không còn trên FireAnt (tác giả xoá, bị gỡ hoặc bị ẩn); nội dung là bản lưu lúc thu thập",
          "type": "boolean"
        },
        "title": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "snippet": {
          "description": "Trích đoạn nội dung",
          "type": "string"
        },
        "url": {
          "description": "Đường dẫn bài viết",
          "type": "string"
        },
        "sentiment": {
          "format": "int32",
          "description": "Điểm cảm xúc (-100..100)",
          "type": "integer"
        },
        "sentimentLabel": {
          "format": "int32",
          "description": "Nhãn cảm xúc (0 = Unknown, 1 = Negative, 2 = Neutral, 3 = Positive)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "sentimentSource": {
          "format": "int32",
          "description": "Nguồn phân loại (0 = None, 1 = Inherited, 2 = Lexicon, 3 = Ai, 4 = Manual)",
          "enum": [
            0,
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "sentimentConfidence": {
          "format": "int32",
          "description": "Độ tin cậy của phân loại (0..100)",
          "type": "integer"
        },
        "severity": {
          "format": "int32",
          "description": "Mức nghiêm trọng (0..3)",
          "type": "integer"
        },
        "topicsJson": {
          "description": "Chủ đề nhận diện được",
          "type": "string"
        },
        "matchedKeywords": {
          "description": "Từ khóa giám sát đã khớp",
          "type": "string"
        },
        "isFlagged": {
          "description": "Đã được đánh dấu theo dõi",
          "type": "boolean"
        },
        "flagReason": {
          "description": "Lý do đánh dấu",
          "type": "string"
        },
        "ticketId": {
          "format": "int32",
          "description": "Yêu cầu hỗ trợ liên quan",
          "type": "integer"
        },
        "ticketCode": {
          "description": "Mã yêu cầu hỗ trợ",
          "type": "string"
        },
        "ticketStatus": {
          "format": "int32",
          "description": "Trạng thái yêu cầu hỗ trợ (0 = New, 1 = Triaged, 2 = InProgress, 3 = WaitingCustomer, 4 = Resolved, 5 = Rejected, 6 = Closed)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "likes": {
          "format": "int32",
          "description": "Lượt thích",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "description": "Lượt trả lời",
          "type": "integer"
        },
        "shares": {
          "format": "int32",
          "description": "Lượt chia sẻ",
          "type": "integer"
        },
        "engagementScore": {
          "format": "double",
          "description": "Điểm tương tác",
          "type": "number"
        },
        "topReason": {
          "description": "Lý do lọt vào danh sách nổi bật",
          "type": "string"
        },
        "ingestedDate": {
          "format": "date-time",
          "description": "Thời điểm thu thập",
          "type": "string"
        },
        "lastSyncedDate": {
          "format": "date-time",
          "description": "Lần đồng bộ gần nhất",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRAlertEventItem": {
      "description": "Một lần cảnh báo được kích hoạt",
      "type": "object",
      "properties": {
        "eventId": {
          "format": "int64",
          "description": "ID sự kiện",
          "type": "integer"
        },
        "ruleId": {
          "format": "int32",
          "description": "ID quy tắc",
          "type": "integer"
        },
        "ruleName": {
          "description": "Tên quy tắc",
          "type": "string"
        },
        "metric": {
          "description": "Chỉ số",
          "type": "string"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "companyName": {
          "description": "Tên công ty",
          "type": "string"
        },
        "triggeredDate": {
          "format": "date-time",
          "description": "Thời điểm kích hoạt",
          "type": "string"
        },
        "metricValue": {
          "format": "double",
          "description": "Giá trị đo được",
          "type": "number"
        },
        "baselineValue": {
          "format": "double",
          "description": "Giá trị nền",
          "type": "number"
        },
        "deviationSigma": {
          "format": "double",
          "description": "Số lần độ lệch chuẩn",
          "type": "number"
        },
        "payloadJson": {
          "description": "Dữ liệu kèm theo",
          "type": "string"
        },
        "channels": {
          "description": "Kênh gửi",
          "type": "string"
        },
        "recipients": {
          "description": "Người nhận",
          "type": "string"
        },
        "notifiedCount": {
          "format": "int32",
          "description": "Số người đã được thông báo",
          "type": "integer"
        },
        "acknowledgedBy": {
          "description": "Người xác nhận đã xem",
          "type": "string"
        },
        "acknowledgedDate": {
          "format": "date-time",
          "description": "Thời điểm xác nhận",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IROperationSummary": {
      "description": "Tình hình vận hành dịch vụ của công ty",
      "type": "object",
      "properties": {
        "openTickets": {
          "format": "int32",
          "description": "Yêu cầu hỗ trợ đang mở",
          "type": "integer"
        },
        "breachedTickets": {
          "format": "int32",
          "description": "Yêu cầu quá hạn cam kết",
          "type": "integer"
        },
        "resolvedLast30Days": {
          "format": "int32",
          "description": "Đã xử lý trong 30 ngày",
          "type": "integer"
        },
        "liveSurveys": {
          "format": "int32",
          "description": "Khảo sát đang chạy",
          "type": "integer"
        },
        "surveyResponses": {
          "format": "int32",
          "description": "Tổng phản hồi khảo sát",
          "type": "integer"
        },
        "oaPostsPendingApproval": {
          "format": "int32",
          "description": "Bài Official Account chờ duyệt",
          "type": "integer"
        },
        "unansweredQuestions": {
          "format": "int32",
          "description": "Câu hỏi nhà đầu tư chưa trả lời",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRMentionItem]": {
      "description": "Kết quả phân trang dùng chung cho module IR",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRMentionItem"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTopAuthor": {
      "description": "Tác giả nhắc đến mã nhiều nhất",
      "type": "object",
      "properties": {
        "authorUserName": {
          "description": "Tên đăng nhập của tác giả (thường là email) - chỉ dùng nội bộ FireAnt, luôn rỗng trong phản hồi cho doanh nghiệp",
          "type": "string"
        },
        "authorName": {
          "description": "Tên hiển thị công khai của tác giả trên mạng xã hội",
          "type": "string"
        },
        "authorId": {
          "description": "Mã tài khoản công khai của tác giả (trang https://fireant.vn/thanh-vien/{AuthorId})",
          "type": "string"
        },
        "followers": {
          "format": "int32",
          "description": "Số người theo dõi",
          "type": "integer"
        },
        "isVerified": {
          "description": "Đã định danh",
          "type": "boolean"
        },
        "isExpert": {
          "description": "Là chuyên gia",
          "type": "boolean"
        },
        "mentionCount": {
          "format": "int32",
          "description": "Số lần nhắc đến mã",
          "type": "integer"
        },
        "likes": {
          "format": "int32",
          "description": "Lượt thích nhận được",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "description": "Lượt trả lời",
          "type": "integer"
        },
        "shares": {
          "format": "int32",
          "description": "Lượt chia sẻ",
          "type": "integer"
        },
        "engagementScore": {
          "format": "double",
          "description": "Điểm tương tác",
          "type": "number"
        },
        "negativeCount": {
          "format": "int32",
          "description": "Số nội dung tiêu cực",
          "type": "integer"
        },
        "positiveCount": {
          "format": "int32",
          "description": "Số nội dung tích cực",
          "type": "integer"
        },
        "avgSentiment": {
          "format": "double",
          "description": "Điểm cảm xúc bình quân",
          "type": "number"
        },
        "lastMentionDate": {
          "format": "date-time",
          "description": "Lần nhắc gần nhất",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRAudienceBucket": {
      "description": "Một nhóm trong cơ cấu nhà đầu tư quan tâm mã.\r\nChỉ trả về nhóm từ 50 người trở lên; nhóm nhỏ hơn được gộp vào \"Khác\".",
      "type": "object",
      "properties": {
        "dimension": {
          "description": "Chiều phân tích: tenure, activity, verified, influence",
          "type": "string"
        },
        "bucket": {
          "description": "Tên nhóm",
          "type": "string"
        },
        "userCount": {
          "format": "int32",
          "description": "Số người",
          "type": "integer"
        },
        "date": {
          "format": "date-time",
          "description": "Ngày chốt số liệu",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRSentimentCoverage": {
      "description": "Độ phủ phân loại cảm xúc theo nguồn. Hiển thị công khai cho khách hàng để họ\r\nbiết bao nhiêu phần trăm nội dung đã được phân loại và bằng cách nào.",
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "total": {
          "format": "int32",
          "description": "Tổng số nội dung trong kỳ",
          "type": "integer"
        },
        "unprocessed": {
          "format": "int32",
          "description": "Chưa xử lý",
          "type": "integer"
        },
        "inherited": {
          "format": "int32",
          "description": "Kế thừa nhãn sẵn có của tin tức",
          "type": "integer"
        },
        "lexicon": {
          "format": "int32",
          "description": "Phân loại bằng từ điển",
          "type": "integer"
        },
        "ai": {
          "format": "int32",
          "description": "Phân loại bằng mô hình ngôn ngữ",
          "type": "integer"
        },
        "manual": {
          "format": "int32",
          "description": "Nhân sự FireAnt gán nhãn tay",
          "type": "integer"
        },
        "gaveUp": {
          "format": "int32",
          "description": "Đã thử nhiều lần nhưng mô hình không trả được kết quả",
          "type": "integer"
        },
        "highConfidencePercent": {
          "format": "double",
          "description": "Tỉ lệ phần trăm nội dung được phân loại ở mức tin cậy cao (AI hoặc người)",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRShareOfVoiceItem": {
      "description": "Tỉ trọng thảo luận so với một mã đối chuẩn",
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "isSelf": {
          "description": "Là mã của chính công ty",
          "type": "boolean"
        },
        "mentions": {
          "format": "int32",
          "description": "Lượt nhắc đến",
          "type": "integer"
        },
        "engagementScore": {
          "format": "double",
          "description": "Điểm tương tác",
          "type": "number"
        },
        "negativeCount": {
          "format": "int32",
          "description": "Số nội dung tiêu cực",
          "type": "integer"
        },
        "negativeRatio": {
          "format": "double",
          "description": "Tỉ lệ tiêu cực",
          "type": "number"
        },
        "shareOfVoice": {
          "format": "double",
          "description": "Tỉ trọng trong nhóm",
          "type": "number"
        },
        "rank": {
          "format": "int32",
          "description": "Thứ hạng trong nhóm",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IREventComparison": {
      "description": "So sánh trước và sau một mốc sự kiện",
      "type": "object",
      "properties": {
        "pivotDate": {
          "format": "date-time",
          "description": "Mốc so sánh",
          "type": "string"
        },
        "windowDays": {
          "format": "int32",
          "description": "Số ngày mỗi bên",
          "type": "integer"
        },
        "before": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRKpi",
          "description": "Chỉ số trước mốc"
        },
        "after": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRKpi",
          "description": "Chỉ số sau mốc"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPeerItem": {
      "description": "Mã đối chuẩn để so sánh",
      "type": "object",
      "properties": {
        "peerSymbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự hiển thị",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPeerSetRequest": {
      "description": "Đặt lại nhóm mã đối chuẩn",
      "type": "object",
      "properties": {
        "symbols": {
          "description": "Danh sách mã, theo thứ tự hiển thị",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRKeywordItem": {
      "description": "Từ khóa giám sát riêng của công ty",
      "type": "object",
      "properties": {
        "keywordId": {
          "format": "int32",
          "description": "ID",
          "type": "integer"
        },
        "keyword": {
          "description": "Từ khóa",
          "type": "string"
        },
        "matchType": {
          "format": "int32",
          "description": "Cách khớp: 0 chứa, 1 chính xác, 2 biểu thức",
          "type": "integer"
        },
        "category": {
          "format": "int32",
          "description": "Nhóm: 1 thương hiệu, 2 lãnh đạo, 3 sản phẩm, 4 tin đồn, 5 đối thủ",
          "type": "integer"
        },
        "severity": {
          "format": "int32",
          "description": "Mức nghiêm trọng khi khớp",
          "type": "integer"
        },
        "isActive": {
          "description": "Đang bật",
          "type": "boolean"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRKeywordSetRequest": {
      "description": "Đặt lại toàn bộ từ khóa giám sát",
      "type": "object",
      "properties": {
        "keywords": {
          "description": "Danh sách từ khóa",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRKeywordChangeItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRKeywordChangeItem": {
      "description": "Một từ khóa giám sát",
      "required": [
        "keyword"
      ],
      "type": "object",
      "properties": {
        "keyword": {
          "description": "Từ khóa",
          "type": "string"
        },
        "matchType": {
          "format": "int32",
          "description": "Cách khớp: 0 chứa, 1 chính xác, 2 biểu thức",
          "type": "integer"
        },
        "category": {
          "format": "int32",
          "description": "Nhóm: 1 thương hiệu, 2 lãnh đạo, 3 sản phẩm, 4 tin đồn, 5 đối thủ",
          "type": "integer"
        },
        "severity": {
          "format": "int32",
          "description": "Mức nghiêm trọng khi khớp (0..3)",
          "type": "integer"
        },
        "isActive": {
          "description": "Đang bật",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRAlertRuleItem": {
      "description": "Quy tắc cảnh báo tự động",
      "type": "object",
      "properties": {
        "ruleId": {
          "format": "int32",
          "description": "ID quy tắc",
          "type": "integer"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "name": {
          "description": "Tên quy tắc",
          "type": "string"
        },
        "metric": {
          "description": "Chỉ số theo dõi: mentions, negative_ratio, severity_high, watchlist_net, sentiment_score, oa_followers",
          "type": "string"
        },
        "condition": {
          "format": "int32",
          "description": "Điều kiện kích hoạt (1 = SpikeSigma, 2 = Above, 3 = Below, 4 = PercentChange)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "threshold": {
          "format": "double",
          "description": "Ngưỡng",
          "type": "number"
        },
        "windowHours": {
          "format": "int32",
          "description": "Cửa sổ quan sát (giờ)",
          "type": "integer"
        },
        "channels": {
          "description": "Kênh gửi: push, email, lark",
          "type": "string"
        },
        "recipients": {
          "description": "Người nhận (danh sách tên đăng nhập, phân tách bằng dấu phẩy)",
          "type": "string"
        },
        "cooldownMinutes": {
          "format": "int32",
          "description": "Thời gian nghỉ giữa hai lần cảnh báo (phút)",
          "type": "integer"
        },
        "isActive": {
          "description": "Đang bật",
          "type": "boolean"
        },
        "lastTriggeredDate": {
          "format": "date-time",
          "description": "Lần kích hoạt gần nhất",
          "type": "string"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRAlertRuleChangeRequest": {
      "description": "Tạo hoặc sửa quy tắc cảnh báo",
      "required": [
        "name",
        "metric"
      ],
      "type": "object",
      "properties": {
        "name": {
          "description": "Tên quy tắc",
          "type": "string"
        },
        "metric": {
          "description": "Chỉ số theo dõi",
          "type": "string"
        },
        "condition": {
          "format": "int32",
          "description": "Điều kiện kích hoạt (1 = SpikeSigma, 2 = Above, 3 = Below, 4 = PercentChange)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "threshold": {
          "format": "double",
          "description": "Ngưỡng (bắt buộc trừ khi dùng phát hiện đột biến)",
          "type": "number"
        },
        "windowHours": {
          "format": "int32",
          "description": "Cửa sổ quan sát (giờ)",
          "type": "integer"
        },
        "channels": {
          "description": "Kênh gửi: push, email, lark",
          "type": "string"
        },
        "recipients": {
          "description": "Người nhận",
          "type": "string"
        },
        "cooldownMinutes": {
          "format": "int32",
          "description": "Thời gian nghỉ giữa hai lần cảnh báo (phút)",
          "type": "integer"
        },
        "isActive": {
          "description": "Đang bật",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRAlertEventItem]": {
      "description": "Kết quả phân trang dùng chung cho module IR",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAlertEventItem"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRImpersonationItem": {
      "description": "Dấu hiệu mạo danh công ty",
      "type": "object",
      "properties": {
        "objectType": {
          "description": "Loại đối tượng: user hoặc room",
          "type": "string"
        },
        "objectKey": {
          "description": "Khóa đối tượng",
          "type": "string"
        },
        "displayName": {
          "description": "Tên hiển thị",
          "type": "string"
        },
        "followers": {
          "format": "int32",
          "description": "Số người theo dõi hoặc thành viên",
          "type": "integer"
        },
        "isVerified": {
          "description": "Đã được xác minh trên nền tảng",
          "type": "boolean"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo tài khoản hoặc nhóm",
          "type": "string"
        },
        "totalPosts": {
          "format": "int32",
          "description": "Số bài đã đăng",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IREventItem": {
      "description": "Sự kiện trong lịch quan hệ nhà đầu tư",
      "type": "object",
      "properties": {
        "eventId": {
          "format": "int32",
          "description": "ID sự kiện",
          "type": "integer"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "type": {
          "format": "int32",
          "description": "Loại sự kiện (1 = AnnualMeeting, 2 = ExtraordinaryMeeting, 3 = EarningsRelease, 4 = AnalystMeeting, 5 = ExRightsDate, 6 = Roadshow, 7 = Other)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7
          ],
          "type": "integer"
        },
        "title": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "description": {
          "description": "Mô tả",
          "type": "string"
        },
        "startDate": {
          "format": "date-time",
          "description": "Thời điểm bắt đầu",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Thời điểm kết thúc",
          "type": "string"
        },
        "location": {
          "description": "Địa điểm",
          "type": "string"
        },
        "onlineUrl": {
          "description": "Đường dẫn tham dự trực tuyến",
          "type": "string"
        },
        "livestreamPostId": {
          "format": "int32",
          "description": "Bài livestream trên mạng xã hội",
          "type": "integer"
        },
        "allowRegistration": {
          "description": "Cho nhà đầu tư đăng ký tham dự trên Trang IR",
          "type": "boolean"
        },
        "registrations": {
          "format": "int32",
          "description": "Số nhà đầu tư đã đăng ký tham dự",
          "type": "integer"
        },
        "publishToSymbolPage": {
          "description": "Hiện trên trang mã chứng khoán",
          "type": "boolean"
        },
        "publishedPostId": {
          "format": "int32",
          "description": "Bài đã đăng để công bố sự kiện",
          "type": "integer"
        },
        "reminderEnabled": {
          "description": "Bật nhắc nhà đầu tư trước giờ diễn ra",
          "type": "boolean"
        },
        "reminderLeadHours": {
          "format": "int32",
          "description": "Nhắc trước bao nhiêu giờ",
          "type": "integer"
        },
        "reminderSentDate": {
          "format": "date-time",
          "description": "Thời điểm đã gửi nhắc",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = Draft, 1 = Published, 2 = Cancelled, 3 = Done)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "modifiedBy": {
          "description": "Người sửa gần nhất",
          "type": "string"
        },
        "modifiedDate": {
          "format": "date-time",
          "description": "Thời điểm sửa gần nhất",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IREventChangeRequest": {
      "description": "Tạo hoặc sửa sự kiện IR",
      "required": [
        "title"
      ],
      "type": "object",
      "properties": {
        "type": {
          "format": "int32",
          "description": "Loại sự kiện (1 = AnnualMeeting, 2 = ExtraordinaryMeeting, 3 = EarningsRelease, 4 = AnalystMeeting, 5 = ExRightsDate, 6 = Roadshow, 7 = Other)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7
          ],
          "type": "integer"
        },
        "title": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "description": {
          "description": "Mô tả",
          "type": "string"
        },
        "startDate": {
          "format": "date-time",
          "description": "Thời điểm bắt đầu",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Thời điểm kết thúc",
          "type": "string"
        },
        "location": {
          "description": "Địa điểm",
          "type": "string"
        },
        "onlineUrl": {
          "description": "Đường dẫn tham dự trực tuyến",
          "type": "string"
        },
        "publishToSymbolPage": {
          "description": "Hiện trên trang mã chứng khoán",
          "type": "boolean"
        },
        "reminderEnabled": {
          "description": "Nhắc nhà đầu tư trước giờ diễn ra",
          "type": "boolean"
        },
        "reminderLeadHours": {
          "format": "int32",
          "description": "Nhắc trước bao nhiêu giờ",
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = Draft, 1 = Published, 2 = Cancelled, 3 = Done)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "allowRegistration": {
          "description": "Cho nhà đầu tư đăng ký tham dự trên Trang IR (null = giữ nguyên khi sửa)",
          "type": "boolean"
        },
        "livestreamPostId": {
          "format": "int32",
          "description": "Bài livestream FireAnt gắn với sự kiện (null = giữ nguyên khi sửa)",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRDocumentItem": {
      "description": "Tài liệu trong thư viện quan hệ nhà đầu tư",
      "type": "object",
      "properties": {
        "documentId": {
          "format": "int32",
          "description": "ID tài liệu",
          "type": "integer"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "category": {
          "format": "int32",
          "description": "Loại tài liệu (1 = FinancialReport, 2 = AnnualReport, 3 = Presentation, 4 = Governance, 5 = Prospectus, 6 = Other)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "title": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "period": {
          "description": "Kỳ báo cáo, ví dụ 2026-Q2",
          "type": "string"
        },
        "language": {
          "description": "Ngôn ngữ",
          "type": "string"
        },
        "fileUrl": {
          "description": "Đường dẫn tệp",
          "type": "string"
        },
        "fileName": {
          "description": "Tên tệp",
          "type": "string"
        },
        "fileSize": {
          "format": "int64",
          "description": "Kích thước tệp",
          "type": "integer"
        },
        "contentType": {
          "description": "Kiểu nội dung",
          "type": "string"
        },
        "publishedDate": {
          "format": "date-time",
          "description": "Thời điểm công bố",
          "type": "string"
        },
        "downloadCount": {
          "format": "int32",
          "description": "Tổng lượt tải - đây là sự kiện đo được thật, khác với lượt xem",
          "type": "integer"
        },
        "downloadsLast30Days": {
          "format": "int32",
          "description": "Lượt tải trong 30 ngày",
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái: 0 nháp, 1 đã công bố, 2 lưu trữ",
          "type": "integer"
        },
        "uploadedBy": {
          "description": "Người tải lên",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "modifiedBy": {
          "description": "Người sửa gần nhất",
          "type": "string"
        },
        "modifiedDate": {
          "format": "date-time",
          "description": "Thời điểm sửa gần nhất",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRDocumentChangeRequest": {
      "description": "Tạo hoặc sửa tài liệu IR",
      "required": [
        "title",
        "fileUrl"
      ],
      "type": "object",
      "properties": {
        "category": {
          "format": "int32",
          "description": "Loại tài liệu (1 = FinancialReport, 2 = AnnualReport, 3 = Presentation, 4 = Governance, 5 = Prospectus, 6 = Other)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "title": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "period": {
          "description": "Kỳ báo cáo",
          "type": "string"
        },
        "language": {
          "description": "Ngôn ngữ",
          "type": "string"
        },
        "fileUrl": {
          "description": "Đường dẫn tệp (lấy từ API tải tệp lên)",
          "type": "string"
        },
        "fileName": {
          "description": "Tên tệp",
          "type": "string"
        },
        "fileSize": {
          "format": "int64",
          "description": "Kích thước",
          "type": "integer"
        },
        "contentType": {
          "description": "Kiểu nội dung",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái: 0 nháp, 1 công bố, 2 lưu trữ",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRQuestionItem]": {
      "description": "Kết quả phân trang dùng chung cho module IR",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRQuestionItem"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRQuestionItem": {
      "description": "Câu hỏi của nhà đầu tư gửi công ty",
      "type": "object",
      "properties": {
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "askedByUserName": {
          "description": "Tên đăng nhập người hỏi - không bao giờ trả cho doanh nghiệp",
          "type": "string"
        },
        "askedByName": {
          "description": "Tên hiển thị của người hỏi; rỗng khi người hỏi chọn ẩn danh",
          "type": "string"
        },
        "isAnonymous": {
          "description": "Người hỏi chọn ẩn danh",
          "type": "boolean"
        },
        "sourcePostId": {
          "format": "int32",
          "description": "Bài viết phát sinh câu hỏi",
          "type": "integer"
        },
        "body": {
          "description": "Nội dung câu hỏi",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = New, 1 = Answered, 2 = Rejected, 3 = Published)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "answerBody": {
          "description": "Nội dung trả lời",
          "type": "string"
        },
        "answeredBy": {
          "description": "Người trả lời",
          "type": "string"
        },
        "answeredDate": {
          "format": "date-time",
          "description": "Thời điểm trả lời",
          "type": "string"
        },
        "rejectReason": {
          "description": "Lý do từ chối",
          "type": "string"
        },
        "publishedPostId": {
          "format": "int32",
          "description": "Bài đã đăng công khai câu trả lời",
          "type": "integer"
        },
        "upVotes": {
          "format": "int32",
          "description": "Số lượt quan tâm",
          "type": "integer"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Thời điểm hỏi",
          "type": "string"
        },
        "context": {
          "description": "Chủ đề gom câu hỏi trên Trang IR, ví dụ agm:2027",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRQuestionRequest": {
      "description": "Nhà đầu tư gửi câu hỏi cho công ty",
      "required": [
        "body"
      ],
      "type": "object",
      "properties": {
        "body": {
          "description": "Nội dung câu hỏi",
          "type": "string"
        },
        "isAnonymous": {
          "description": "Gửi ẩn danh",
          "type": "boolean"
        },
        "sourcePostId": {
          "format": "int32",
          "description": "Bài viết phát sinh câu hỏi",
          "type": "integer"
        },
        "context": {
          "description": "Chủ đề gom câu hỏi trên Trang IR, ví dụ agm:2027",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRQuestionAnswerRequest": {
      "description": "Công ty trả lời hoặc từ chối câu hỏi",
      "type": "object",
      "properties": {
        "status": {
          "format": "int32",
          "description": "Trạng thái mới: đã trả lời, từ chối, hoặc đăng công khai (0 = New, 1 = Answered, 2 = Rejected, 3 = Published)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "answerBody": {
          "description": "Nội dung trả lời",
          "type": "string"
        },
        "rejectReason": {
          "description": "Lý do từ chối",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRReportScheduleItem": {
      "description": "Lịch báo cáo định kỳ",
      "type": "object",
      "properties": {
        "scheduleId": {
          "format": "int32",
          "description": "ID lịch",
          "type": "integer"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "period": {
          "format": "int32",
          "description": "Kỳ: 1 tuần, 2 tháng",
          "type": "integer"
        },
        "format": {
          "format": "int32",
          "description": "Định dạng: 1 PDF, 2 Excel, 3 cả hai",
          "type": "integer"
        },
        "recipients": {
          "description": "Danh sách email nhận",
          "type": "string"
        },
        "isActive": {
          "description": "Đang bật",
          "type": "boolean"
        },
        "hangfireJobId": {
          "description": "Mã công việc nền",
          "type": "string"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRReportScheduleRequest": {
      "description": "Tạo hoặc sửa lịch báo cáo định kỳ",
      "required": [
        "recipients"
      ],
      "type": "object",
      "properties": {
        "period": {
          "format": "int32",
          "description": "Kỳ: 1 tuần, 2 tháng",
          "type": "integer"
        },
        "format": {
          "format": "int32",
          "description": "Định dạng: 1 PDF, 2 Excel, 3 cả hai",
          "type": "integer"
        },
        "recipients": {
          "description": "Danh sách email nhận, phân tách bằng dấu phẩy",
          "type": "string"
        },
        "isActive": {
          "description": "Đang bật",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRReportRunItem": {
      "description": "Một lần dựng báo cáo",
      "type": "object",
      "properties": {
        "runId": {
          "format": "int32",
          "description": "ID",
          "type": "integer"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "scheduleId": {
          "format": "int32",
          "description": "Lịch phát sinh (null = chạy thủ công)",
          "type": "integer"
        },
        "periodStart": {
          "format": "date-time",
          "description": "Từ ngày",
          "type": "string"
        },
        "periodEnd": {
          "format": "date-time",
          "description": "Đến ngày",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái: 0 chờ, 1 đang chạy, 2 xong, 3 lỗi",
          "type": "integer"
        },
        "fileUrl": {
          "description": "Đường dẫn tệp báo cáo",
          "type": "string"
        },
        "generatedDate": {
          "format": "date-time",
          "description": "Thời điểm dựng xong",
          "type": "string"
        },
        "sentCount": {
          "format": "int32",
          "description": "Số người đã gửi",
          "type": "integer"
        },
        "error": {
          "description": "Lỗi",
          "type": "string"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyChangeRequest": {
      "description": "Yêu cầu tạo mới / cập nhật khảo sát (Admin)",
      "required": [
        "title"
      ],
      "type": "object",
      "properties": {
        "code": {
          "description": "Mã/slug khảo sát (tùy chọn, duy nhất)",
          "type": "string"
        },
        "title": {
          "description": "Tiêu đề (bắt buộc)",
          "type": "string"
        },
        "description": {
          "description": "Mô tả",
          "type": "string"
        },
        "thankYouMessage": {
          "description": "Lời cảm ơn sau khi gửi",
          "type": "string"
        },
        "imageUrl": {
          "description": "Ảnh minh họa",
          "type": "string"
        },
        "isAnonymous": {
          "description": "Cho phép trả lời không cần đăng nhập",
          "type": "boolean"
        },
        "allowMultipleResponses": {
          "description": "Cho phép một người trả lời nhiều lần",
          "type": "boolean"
        },
        "showResults": {
          "description": "Cho phép người trả lời xem kết quả tổng hợp",
          "type": "boolean"
        },
        "startDate": {
          "format": "date-time",
          "description": "Thời điểm bắt đầu nhận phản hồi",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Thời điểm kết thúc nhận phản hồi",
          "type": "string"
        },
        "maxResponses": {
          "format": "int32",
          "description": "Số phản hồi tối đa",
          "type": "integer"
        },
        "targetAudience": {
          "description": "Nhóm đối tượng",
          "type": "string"
        },
        "priority": {
          "format": "int32",
          "description": "Ưu tiên hiển thị",
          "type": "integer"
        },
        "displayMode": {
          "format": "int32",
          "description": "Cách hiển thị trên App/Web: 0 ListOnly, 1 Banner (mặc định), 2 Prompt (0 = ListOnly, 1 = Banner, 2 = Prompt)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "dismissible": {
          "description": "Cho phép người dùng \"Để sau\" / \"Không quan tâm\" (mặc định true)",
          "type": "boolean"
        },
        "snoozeDays": {
          "format": "int32",
          "description": "Số ngày ẩn khi \"Để sau\" (1..90, mặc định 3)",
          "type": "integer"
        },
        "showToGuests": {
          "description": "Khảo sát yêu cầu đăng nhập vẫn hiện với khách chưa đăng nhập, bấm vào thì mời đăng nhập (mặc định true)",
          "type": "boolean"
        },
        "questions": {
          "description": "Danh sách câu hỏi theo thứ tự hiển thị (Section dùng để chia nhóm / ngắt trang).\r\nKhi cập nhật: null = giữ nguyên; khác null = thay thế toàn bộ (chỉ khi khảo sát chưa có phản hồi).\r\nĐiều kiện rẽ nhánh tham chiếu câu hỏi/lựa chọn bằng chỉ số trong mảng (0-based).",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyQuestionChangeRequest"
          }
        },
        "audienceRules": {
          "description": "Quy tắc nhắm đối tượng (AND). Khi cập nhật: null = giữ nguyên; khác null (kể cả rỗng) = thay thế toàn bộ.\r\nĐược phép thay đổi kể cả khi khảo sát đã có phản hồi.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyAudienceRuleChangeRequest"
          }
        },
        "targets": {
          "description": "Đối tượng khảo sát gắn vào (post, symbol, room...). Khi cập nhật: null = giữ nguyên; khác null (kể cả rỗng) = thay thế toàn bộ.\r\nKhảo sát có gắn đối tượng chỉ hiện theo ngữ cảnh (GET /surveys/target/{type}/{key}), không được mời chung ở Home.",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyTargetChangeRequest"
          }
        },
        "outcomeRules": {
          "description": "Hành động sau khảo sát (nút bấm dẫn tới URL / màn hình app / khảo sát khác / mã CK theo câu trả lời).\r\nKhi cập nhật: null = giữ nguyên; khác null (kể cả rỗng) = thay thế toàn bộ. Được phép đổi kể cả khi đã có phản hồi.\r\nĐiều kiện tham chiếu câu hỏi theo chỉ số trong mảng questions (hoặc theo thứ tự câu hỏi hiện có nếu không gửi questions).",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyOutcomeRuleChangeRequest"
          }
        },
        "presentationMode": {
          "format": "int32",
          "description": "Chế độ trình bày: 0 cuộn một trang (mặc định), 1 mỗi Section một trang, 2 mỗi câu một màn hình (0 = Scroll, 1 = SectionPages, 2 = OneByOne)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "settings": {
          "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveySettings",
          "description": "Thiết lập trình bày (null = mặc định)"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyQuestionChangeRequest": {
      "description": "Câu hỏi trong yêu cầu tạo/cập nhật khảo sát",
      "required": [
        "questionText"
      ],
      "type": "object",
      "properties": {
        "questionText": {
          "description": "Nội dung câu hỏi (bắt buộc; với Section là tiêu đề nhóm)",
          "type": "string"
        },
        "description": {
          "description": "Mô tả / hướng dẫn thêm",
          "type": "string"
        },
        "questionType": {
          "format": "int32",
          "description": "Loại câu hỏi (1 = SingleChoice, 2 = MultipleChoice, 3 = Text, 4 = Rating, 5 = YesNo, 6 = Number, 7 = Date, 8 = Dropdown, 9 = Matrix, 10 = Ranking, 11 = FileUpload, 12 = Symbol, 13 = DateRange, 14 = Slider, 15 = Section, 16 = Hotspot, 17 = FillInBlank)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17
          ],
          "type": "integer"
        },
        "isRequired": {
          "description": "Bắt buộc trả lời",
          "type": "boolean"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự hiển thị (null = theo vị trí trong mảng)",
          "type": "integer"
        },
        "minValue": {
          "format": "int32",
          "description": "Rating/Slider/Number/Matrix(thang điểm): giá trị nhỏ nhất (Rating mặc định 1, Slider mặc định 0)",
          "type": "integer"
        },
        "maxValue": {
          "format": "int32",
          "description": "Rating/Slider/Number/Matrix(thang điểm): giá trị lớn nhất (Rating mặc định 5, Slider mặc định 100)",
          "type": "integer"
        },
        "minLabel": {
          "description": "Rating/Slider: nhãn đầu thang",
          "type": "string"
        },
        "maxLabel": {
          "description": "Rating/Slider: nhãn cuối thang",
          "type": "string"
        },
        "maxSelections": {
          "format": "int32",
          "description": "MultipleChoice/Ranking/Symbol/FileUpload: số lượng tối đa",
          "type": "integer"
        },
        "allowOtherOption": {
          "description": "Tự động thêm lựa chọn \"Khác\" cho phép nhập text",
          "type": "boolean"
        },
        "placeholder": {
          "description": "Gợi ý nhập",
          "type": "string"
        },
        "maxLength": {
          "format": "int32",
          "description": "Text: độ dài tối đa",
          "type": "integer"
        },
        "settings": {
          "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyQuestionSettings",
          "description": "Cấu hình bổ sung theo loại (step, allowedFileTypes, minDate...)"
        },
        "randomizeOptions": {
          "description": "Xáo thứ tự lựa chọn khi hiển thị",
          "type": "boolean"
        },
        "conditionLogic": {
          "format": "int32",
          "description": "Cách kết hợp điều kiện hiển thị (All = AND, Any = OR) (0 = All, 1 = Any)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "options": {
          "description": "Danh sách lựa chọn (bắt buộc với SingleChoice/MultipleChoice/Dropdown/Ranking/Matrix).\r\nMatrix: dòng có optionGroup = Choice, cột có optionGroup = MatrixColumn (bỏ cột nếu dùng thang điểm minValue..maxValue).",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyOptionChangeRequest"
          }
        },
        "conditions": {
          "description": "Điều kiện hiển thị (rỗng = luôn hiển thị)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyConditionChangeRequest"
          }
        },
        "carryForwardQuestionIndex": {
          "format": "int32",
          "description": "Lấy lựa chọn từ đáp án câu trước: chỉ số (0-based) câu nguồn, phải đứng trước và có cùng số lựa chọn",
          "type": "integer"
        },
        "carryForwardMode": {
          "format": "int32",
          "description": "Cách lấy lựa chọn (bắt buộc khi có carryForwardQuestionIndex) (1 = Selected, 2 = NotSelected)",
          "enum": [
            1,
            2
          ],
          "type": "integer"
        },
        "jumps": {
          "description": "Quy tắc nhảy sau câu này (xét theo thứ tự, quy tắc đầu tiên khớp được dùng)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyJumpChangeRequest"
          }
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyAudienceRuleChangeRequest": {
      "description": "Quy tắc nhắm đối tượng trong yêu cầu tạo/cập nhật khảo sát",
      "required": [
        "value"
      ],
      "type": "object",
      "properties": {
        "ruleType": {
          "format": "int32",
          "description": "Loại quy tắc (1 = Platform, 2 = AppVersion, 3 = MembershipLevel, 4 = Role, 5 = UserName, 6 = IdentityVerified, 7 = Tag)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7
          ],
          "type": "integer"
        },
        "operator": {
          "format": "int32",
          "description": "Phép so sánh (1 = In, 2 = NotIn, 3 = GreaterOrEqual, 4 = LessOrEqual, 5 = Equals, 6 = NotEquals)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "value": {
          "description": "Giá trị so sánh (bắt buộc)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyTargetChangeRequest": {
      "description": "Đối tượng gắn kèm trong yêu cầu tạo/cập nhật khảo sát (Admin)",
      "required": [
        "targetType",
        "targetKey"
      ],
      "type": "object",
      "properties": {
        "targetType": {
          "description": "Loại đối tượng: post, symbol, room, user, event, article, url (chữ thường, a-z0-9_-)",
          "type": "string"
        },
        "targetKey": {
          "description": "Khóa đối tượng (postId, mã CK, roomId...)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyOutcomeRuleChangeRequest": {
      "description": "Hành động sau khảo sát trong yêu cầu tạo/cập nhật khảo sát (Admin).\r\nĐiều kiện tham chiếu câu hỏi bằng chỉ số trong mảng questions (như rẽ nhánh).",
      "required": [
        "buttonLabel",
        "actionValue"
      ],
      "type": "object",
      "properties": {
        "title": {
          "description": "Tiêu đề hiển thị (tùy chọn, tối đa 256)",
          "type": "string"
        },
        "description": {
          "description": "Mô tả ngắn (tùy chọn, tối đa 1024)",
          "type": "string"
        },
        "buttonLabel": {
          "description": "Nhãn nút bấm (bắt buộc, tối đa 128)",
          "type": "string"
        },
        "actionType": {
          "format": "int32",
          "description": "Loại hành động: 1 Url, 2 AppRoute, 3 Survey, 4 Symbol (1 = Url, 2 = AppRoute, 3 = Survey, 4 = Symbol)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "actionValue": {
          "description": "Giá trị hành động (bắt buộc, tối đa 1024). Hỗ trợ placeholder {answer:N}, {surveyId}, {responseId}, {userName}, {anonymousId}.",
          "type": "string"
        },
        "openInNewTab": {
          "description": "Mở trong tab mới (Url trên web)",
          "type": "boolean"
        },
        "conditionLogic": {
          "format": "int32",
          "description": "Cách kết hợp điều kiện (0 = All, 1 = Any)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "isDefault": {
          "description": "Quy tắc mặc định (không cần điều kiện; tối đa một quy tắc)",
          "type": "boolean"
        },
        "conditions": {
          "description": "Điều kiện; quy tắc không mặc định cần ít nhất một điều kiện",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyConditionChangeRequest"
          }
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyOptionChangeRequest": {
      "description": "Lựa chọn trong yêu cầu tạo/cập nhật câu hỏi",
      "required": [
        "optionText"
      ],
      "type": "object",
      "properties": {
        "optionText": {
          "description": "Nội dung lựa chọn (bắt buộc)",
          "type": "string"
        },
        "optionValue": {
          "description": "Giá trị nội bộ (tùy chọn)",
          "type": "string"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự hiển thị (null = theo vị trí trong mảng)",
          "type": "integer"
        },
        "isOther": {
          "description": "Là lựa chọn \"Khác\"",
          "type": "boolean"
        },
        "imageUrl": {
          "description": "Ảnh minh họa",
          "type": "string"
        },
        "optionGroup": {
          "format": "int32",
          "description": "Nhóm: Choice (mặc định), MatrixColumn, Blank (ô trống), BlankChoice (lựa chọn của ô trống) (0 = Choice, 1 = MatrixColumn, 2 = Blank, 3 = BlankChoice)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "settings": {
          "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyOptionSettings",
          "description": "Thiết lập: vùng hotspot, kiểu ô trống, icon, mô tả"
        },
        "parentOptionIndex": {
          "format": "int32",
          "description": "BlankChoice: chỉ số (0-based) của ô trống cha trong cùng mảng options",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyConditionChangeRequest": {
      "description": "Điều kiện hiển thị trong yêu cầu tạo/cập nhật. Tham chiếu bằng chỉ số 0-based trong mảng questions/options.",
      "type": "object",
      "properties": {
        "sourceQuestionIndex": {
          "format": "int32",
          "description": "Chỉ số (0-based) của câu hỏi nguồn trong mảng questions - phải nhỏ hơn chỉ số câu hỏi hiện tại",
          "type": "integer"
        },
        "operator": {
          "format": "int32",
          "description": "Phép so sánh (1 = Equals, 2 = NotEquals, 3 = Contains, 4 = GreaterThan, 5 = LessThan, 6 = Answered, 7 = NotAnswered)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7
          ],
          "type": "integer"
        },
        "sourceOptionIndex": {
          "format": "int32",
          "description": "Chỉ số (0-based) của lựa chọn trong mảng options của câu nguồn (cho các loại chọn)",
          "type": "integer"
        },
        "value": {
          "description": "Giá trị so sánh (số, text, true/false, ngày ISO yyyy-MM-dd)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyJumpChangeRequest": {
      "description": "Quy tắc nhảy trong yêu cầu tạo/cập nhật câu hỏi (tham chiếu bằng chỉ số 0-based trong mảng questions)",
      "type": "object",
      "properties": {
        "targetQuestionIndex": {
          "format": "int32",
          "description": "Chỉ số câu/phần đích (phải lớn hơn chỉ số câu hiện tại). Null = kết thúc khảo sát",
          "type": "integer"
        },
        "conditionLogic": {
          "format": "int32",
          "description": "Cách kết hợp điều kiện (0 = All, 1 = Any)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "conditions": {
          "description": "Điều kiện (sourceQuestionIndex ≤ chỉ số câu hiện tại). Rỗng = luôn nhảy",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyConditionChangeRequest"
          }
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyStatistics": {
      "description": "Thống kê tổng hợp của một khảo sát",
      "type": "object",
      "properties": {
        "surveyId": {
          "format": "int32",
          "description": "ID khảo sát",
          "type": "integer"
        },
        "title": {
          "description": "Tiêu đề khảo sát",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = Draft, 1 = Published, 2 = Closed, 3 = Archived)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "totalResponses": {
          "format": "int32",
          "description": "Tổng số phản hồi đã hoàn thành",
          "type": "integer"
        },
        "draftCount": {
          "format": "int32",
          "description": "Số bản nháp chưa gửi",
          "type": "integer"
        },
        "dismissCount": {
          "format": "int32",
          "description": "Số người đã bỏ qua (\"Để sau\" hoặc \"Không quan tâm\")",
          "type": "integer"
        },
        "permanentDismissCount": {
          "format": "int32",
          "description": "Số người chọn \"Không quan tâm\"",
          "type": "integer"
        },
        "uniqueUsers": {
          "format": "int32",
          "description": "Số người dùng (đăng nhập) duy nhất",
          "type": "integer"
        },
        "anonymousResponses": {
          "format": "int32",
          "description": "Số phản hồi ẩn danh",
          "type": "integer"
        },
        "firstResponseDate": {
          "format": "date-time",
          "description": "Phản hồi đầu tiên",
          "type": "string"
        },
        "lastResponseDate": {
          "format": "date-time",
          "description": "Phản hồi gần nhất",
          "type": "string"
        },
        "avgDurationSeconds": {
          "format": "double",
          "description": "Thời gian hoàn thành trung bình (giây)",
          "type": "number"
        },
        "responsesToday": {
          "format": "int32",
          "description": "Số phản hồi hôm nay",
          "type": "integer"
        },
        "responsesLast7Days": {
          "format": "int32",
          "description": "Số phản hồi 7 ngày gần nhất",
          "type": "integer"
        },
        "outcomeCount": {
          "format": "int32",
          "description": "Số phản hồi có hành động sau khảo sát",
          "type": "integer"
        },
        "viewCount": {
          "format": "int64",
          "description": "Tổng lượt xem khảo sát (admin)",
          "type": "integer"
        },
        "startedCount": {
          "format": "int32",
          "description": "Số người bắt đầu (bản nháp + hoàn thành) (admin)",
          "type": "integer"
        },
        "funnel": {
          "description": "Phễu: số người đi tới từng câu và dừng ở câu đó (admin)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyFunnelStep"
          }
        },
        "questions": {
          "description": "Thống kê theo từng câu hỏi (không gồm Section)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyQuestionStatistics"
          }
        },
        "outcomes": {
          "description": "Số phản hồi khớp từng hành động sau khảo sát",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyOutcomeStatistics"
          }
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyFunnelStep": {
      "description": "Một bước của phễu: số người đi tới câu hỏi và số người dừng ở câu đó (bản nháp)",
      "type": "object",
      "properties": {
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "reached": {
          "format": "int32",
          "description": "Số người đi tới câu này (gồm mọi phản hồi hoàn thành)",
          "type": "integer"
        },
        "droppedHere": {
          "format": "int32",
          "description": "Số bản nháp đang dừng ở câu này",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyQuestionStatistics": {
      "description": "Thống kê một câu hỏi",
      "type": "object",
      "properties": {
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "questionText": {
          "description": "Nội dung câu hỏi",
          "type": "string"
        },
        "questionType": {
          "format": "int32",
          "description": "Loại câu hỏi (1 = SingleChoice, 2 = MultipleChoice, 3 = Text, 4 = Rating, 5 = YesNo, 6 = Number, 7 = Date, 8 = Dropdown, 9 = Matrix, 10 = Ranking, 11 = FileUpload, 12 = Symbol, 13 = DateRange, 14 = Slider, 15 = Section, 16 = Hotspot, 17 = FillInBlank)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17
          ],
          "type": "integer"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự",
          "type": "integer"
        },
        "isRequired": {
          "description": "Bắt buộc",
          "type": "boolean"
        },
        "answerCount": {
          "format": "int32",
          "description": "Số phản hồi có trả lời câu này",
          "type": "integer"
        },
        "skippedCount": {
          "format": "int32",
          "description": "Số phản hồi bỏ qua câu này",
          "type": "integer"
        },
        "avgNumber": {
          "format": "double",
          "description": "Trung bình (Rating/Number/Slider)",
          "type": "number"
        },
        "minNumber": {
          "format": "double",
          "description": "Nhỏ nhất",
          "type": "number"
        },
        "maxNumber": {
          "format": "double",
          "description": "Lớn nhất",
          "type": "number"
        },
        "textAnswerCount": {
          "format": "int32",
          "description": "Số câu trả lời dạng text (tự luận, \"Khác\", URL tệp, mã CK)",
          "type": "integer"
        },
        "options": {
          "description": "Thống kê theo lựa chọn (Matrix: cả dòng và cột; Ranking: avgNumber = thứ hạng trung bình)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyOptionStatistics"
          }
        },
        "valueDistribution": {
          "description": "Phân phối giá trị (Rating/Number/Slider)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyValueDistribution"
          }
        },
        "matrixCells": {
          "description": "Matrix: số lần chọn theo từng ô (dòng, cột)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyMatrixCellStatistics"
          }
        },
        "textValues": {
          "description": "Symbol: các mã được chọn nhiều nhất",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyTextValueStatistics"
          }
        },
        "hotspotBins": {
          "description": "Hotspot: điểm chạm gộp theo lưới 40 x 40 (bản đồ nhiệt)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyHotspotBin"
          }
        },
        "rangeEndDistribution": {
          "description": "Slider chọn khoảng: phân bố đầu cuối (valueDistribution là đầu đầu)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyValueDistribution"
          }
        },
        "blankValues": {
          "description": "FillInBlank: giá trị hay gặp của từng ô trống dạng chữ / số / mã CK (ô dạng chọn nằm ở matrixCells)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyBlankValueStatistics"
          }
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyOutcomeStatistics": {
      "description": "Thống kê số phản hồi khớp từng hành động sau khảo sát",
      "type": "object",
      "properties": {
        "ruleId": {
          "format": "int32",
          "description": "ID quy tắc",
          "type": "integer"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự",
          "type": "integer"
        },
        "title": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "buttonLabel": {
          "description": "Nhãn nút",
          "type": "string"
        },
        "actionType": {
          "format": "int32",
          "description": "Loại hành động (1 = Url, 2 = AppRoute, 3 = Survey, 4 = Symbol)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "actionValue": {
          "description": "Giá trị hành động (chưa thay placeholder)",
          "type": "string"
        },
        "isDefault": {
          "description": "Quy tắc mặc định",
          "type": "boolean"
        },
        "count": {
          "format": "int32",
          "description": "Số phản hồi đã khớp quy tắc này",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyOptionStatistics": {
      "description": "Thống kê một lựa chọn",
      "type": "object",
      "properties": {
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "optionId": {
          "format": "int32",
          "description": "ID lựa chọn",
          "type": "integer"
        },
        "optionText": {
          "description": "Nội dung lựa chọn",
          "type": "string"
        },
        "optionValue": {
          "description": "Giá trị nội bộ",
          "type": "string"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự",
          "type": "integer"
        },
        "isOther": {
          "description": "Là lựa chọn \"Khác\"",
          "type": "boolean"
        },
        "optionGroup": {
          "format": "int32",
          "description": "Nhóm (Choice / MatrixColumn) (0 = Choice, 1 = MatrixColumn, 2 = Blank, 3 = BlankChoice)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "imageUrl": {
          "description": "Ảnh minh họa",
          "type": "string"
        },
        "selectionCount": {
          "format": "int32",
          "description": "Số lần được chọn (Matrix cột: số lần cột được chọn)",
          "type": "integer"
        },
        "avgNumber": {
          "format": "double",
          "description": "Ranking: thứ hạng trung bình (thấp hơn = được ưu tiên hơn); Matrix thang điểm: điểm trung bình của dòng",
          "type": "number"
        },
        "percentage": {
          "format": "double",
          "description": "Tỷ lệ % trên số phản hồi trả lời câu hỏi này",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyValueDistribution": {
      "description": "Một mức giá trị và số lần xuất hiện (Rating/Number/Slider)",
      "type": "object",
      "properties": {
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "value": {
          "format": "double",
          "description": "Giá trị",
          "type": "number"
        },
        "count": {
          "format": "int32",
          "description": "Số lần",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyMatrixCellStatistics": {
      "description": "Một ô của ma trận và số lần được chọn",
      "type": "object",
      "properties": {
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "rowOptionId": {
          "format": "int32",
          "description": "ID dòng",
          "type": "integer"
        },
        "columnOptionId": {
          "format": "int32",
          "description": "ID cột",
          "type": "integer"
        },
        "count": {
          "format": "int32",
          "description": "Số lần",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyTextValueStatistics": {
      "description": "Một giá trị text và số lần xuất hiện (Symbol)",
      "type": "object",
      "properties": {
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "value": {
          "description": "Giá trị",
          "type": "string"
        },
        "count": {
          "format": "int32",
          "description": "Số lần",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyHotspotBin": {
      "description": "Hotspot: số điểm chạm trong một ô của lưới 40 x 40",
      "type": "object",
      "properties": {
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "binX": {
          "format": "int32",
          "description": "Cột 0..39 (trái sang phải)",
          "type": "integer"
        },
        "binY": {
          "format": "int32",
          "description": "Dòng 0..39 (trên xuống dưới)",
          "type": "integer"
        },
        "count": {
          "format": "int32",
          "description": "Số điểm chạm",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyBlankValueStatistics": {
      "description": "FillInBlank: giá trị hay gặp của một ô trống dạng chữ / số / mã CK",
      "type": "object",
      "properties": {
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "optionId": {
          "format": "int32",
          "description": "optionId của ô trống",
          "type": "integer"
        },
        "value": {
          "description": "Giá trị (chữ thường)",
          "type": "string"
        },
        "count": {
          "format": "int32",
          "description": "Số lần",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRSurveyStatsPoint": {
      "description": "Một điểm trong chuỗi phản hồi khảo sát theo ngày",
      "type": "object",
      "properties": {
        "date": {
          "format": "date-time",
          "description": "Ngày",
          "type": "string"
        },
        "responses": {
          "format": "int32",
          "description": "Số phản hồi hoàn thành tích lũy",
          "type": "integer"
        },
        "drafts": {
          "format": "int32",
          "description": "Số bản đang làm dở",
          "type": "integer"
        },
        "dismissals": {
          "format": "int32",
          "description": "Số lượt bỏ qua",
          "type": "integer"
        },
        "completionRate": {
          "format": "double",
          "description": "Tỉ lệ hoàn thành",
          "type": "number"
        },
        "avgDurationSeconds": {
          "format": "double",
          "description": "Thời gian làm trung bình (giây)",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRSurveyResponseItem]": {
      "description": "Kết quả phân trang dùng chung cho module IR",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRSurveyResponseItem"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRSurveyResponseItem": {
      "description": "Một phản hồi khảo sát đã ẩn danh.\r\nKhông có tên đăng nhập, địa chỉ IP, thiết bị hay bất cứ dấu vết định danh nào:\r\ncông ty đọc được nội dung trả lời nhưng không biết ai trả lời.",
      "type": "object",
      "properties": {
        "respondentNumber": {
          "format": "int32",
          "description": "Số thứ tự người trả lời trong phạm vi khảo sát này",
          "type": "integer"
        },
        "submittedDate": {
          "format": "date-time",
          "description": "Thời điểm gửi",
          "type": "string"
        },
        "durationSeconds": {
          "format": "int32",
          "description": "Thời gian hoàn thành (giây)",
          "type": "integer"
        },
        "answerCount": {
          "format": "int32",
          "description": "Số câu đã trả lời",
          "type": "integer"
        },
        "answers": {
          "description": "Nội dung trả lời từng câu",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyAnswerItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyAnswerItem": {
      "description": "Một câu trả lời (một dòng SurveyAnswers)",
      "type": "object",
      "properties": {
        "answerId": {
          "format": "int64",
          "description": "ID câu trả lời",
          "type": "integer"
        },
        "responseId": {
          "format": "int64",
          "description": "ID phản hồi",
          "type": "integer"
        },
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "questionText": {
          "description": "Nội dung câu hỏi",
          "type": "string"
        },
        "questionType": {
          "format": "int32",
          "description": "Loại câu hỏi (1 = SingleChoice, 2 = MultipleChoice, 3 = Text, 4 = Rating, 5 = YesNo, 6 = Number, 7 = Date, 8 = Dropdown, 9 = Matrix, 10 = Ranking, 11 = FileUpload, 12 = Symbol, 13 = DateRange, 14 = Slider, 15 = Section, 16 = Hotspot, 17 = FillInBlank)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17
          ],
          "type": "integer"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự câu hỏi",
          "type": "integer"
        },
        "optionId": {
          "format": "int32",
          "description": "ID lựa chọn (các loại chọn; Matrix: dòng; Ranking: lựa chọn được xếp hạng)",
          "type": "integer"
        },
        "optionText": {
          "description": "Nội dung lựa chọn",
          "type": "string"
        },
        "optionValue": {
          "description": "Giá trị nội bộ của lựa chọn",
          "type": "string"
        },
        "isOther": {
          "description": "Lựa chọn là \"Khác\"",
          "type": "boolean"
        },
        "subOptionId": {
          "format": "int32",
          "description": "Matrix: ID cột được chọn",
          "type": "integer"
        },
        "subOptionText": {
          "description": "Matrix: nội dung cột được chọn",
          "type": "string"
        },
        "answerText": {
          "description": "Text trả lời (Text, \"Khác\", URL tệp, mã cổ phiếu)",
          "type": "string"
        },
        "answerNumber": {
          "format": "double",
          "description": "Giá trị số (Rating/Number/Slider/YesNo; Ranking: thứ hạng; Matrix thang điểm: điểm)",
          "type": "number"
        },
        "answerDate": {
          "format": "date-time",
          "description": "Giá trị ngày (Date; DateRange: ngày bắt đầu)",
          "type": "string"
        },
        "answerDateEnd": {
          "format": "date-time",
          "description": "DateRange: ngày kết thúc",
          "type": "string"
        },
        "answerNumberEnd": {
          "format": "double",
          "description": "Hotspot: tọa độ Y (answerNumber là X); Slider chọn khoảng: đầu cuối",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyPagedResult[FireAnt.Api.Models.Surveys.SurveyTextAnswerItem]": {
      "description": "Kết quả phân trang",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách phần tử của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyTextAnswerItem"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa của trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyTextAnswerItem": {
      "description": "Câu trả lời dạng text kèm thông tin người trả lời (Admin duyệt câu tự luận)",
      "type": "object",
      "properties": {
        "userName": {
          "description": "Tên đăng nhập người trả lời",
          "type": "string"
        },
        "submittedDate": {
          "format": "date-time",
          "description": "Thời điểm gửi",
          "type": "string"
        },
        "answerId": {
          "format": "int64",
          "description": "ID câu trả lời",
          "type": "integer"
        },
        "responseId": {
          "format": "int64",
          "description": "ID phản hồi",
          "type": "integer"
        },
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "questionText": {
          "description": "Nội dung câu hỏi",
          "type": "string"
        },
        "questionType": {
          "format": "int32",
          "description": "Loại câu hỏi (1 = SingleChoice, 2 = MultipleChoice, 3 = Text, 4 = Rating, 5 = YesNo, 6 = Number, 7 = Date, 8 = Dropdown, 9 = Matrix, 10 = Ranking, 11 = FileUpload, 12 = Symbol, 13 = DateRange, 14 = Slider, 15 = Section, 16 = Hotspot, 17 = FillInBlank)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17
          ],
          "type": "integer"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự câu hỏi",
          "type": "integer"
        },
        "optionId": {
          "format": "int32",
          "description": "ID lựa chọn (các loại chọn; Matrix: dòng; Ranking: lựa chọn được xếp hạng)",
          "type": "integer"
        },
        "optionText": {
          "description": "Nội dung lựa chọn",
          "type": "string"
        },
        "optionValue": {
          "description": "Giá trị nội bộ của lựa chọn",
          "type": "string"
        },
        "isOther": {
          "description": "Lựa chọn là \"Khác\"",
          "type": "boolean"
        },
        "subOptionId": {
          "format": "int32",
          "description": "Matrix: ID cột được chọn",
          "type": "integer"
        },
        "subOptionText": {
          "description": "Matrix: nội dung cột được chọn",
          "type": "string"
        },
        "answerText": {
          "description": "Text trả lời (Text, \"Khác\", URL tệp, mã cổ phiếu)",
          "type": "string"
        },
        "answerNumber": {
          "format": "double",
          "description": "Giá trị số (Rating/Number/Slider/YesNo; Ranking: thứ hạng; Matrix thang điểm: điểm)",
          "type": "number"
        },
        "answerDate": {
          "format": "date-time",
          "description": "Giá trị ngày (Date; DateRange: ngày bắt đầu)",
          "type": "string"
        },
        "answerDateEnd": {
          "format": "date-time",
          "description": "DateRange: ngày kết thúc",
          "type": "string"
        },
        "answerNumberEnd": {
          "format": "double",
          "description": "Hotspot: tọa độ Y (answerNumber là X); Slider chọn khoảng: đầu cuối",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRCampaignItem": {
      "type": "object",
      "properties": {
        "campaignId": {
          "format": "int32",
          "description": "ID chiến dịch",
          "type": "integer"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "type": {
          "format": "int32",
          "description": "Loại (1 = Push, 2 = Email)",
          "enum": [
            1,
            2
          ],
          "type": "integer"
        },
        "title": {
          "description": "Tiêu đề thông báo",
          "type": "string"
        },
        "body": {
          "description": "Nội dung",
          "type": "string"
        },
        "targetType": {
          "format": "int32",
          "description": "Đối tượng nhận (1 = SymbolFollowers, 2 = OaFollowers, 3 = EventRegistrants)",
          "enum": [
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "linkPostId": {
          "format": "int32",
          "description": "Bài viết sẽ mở khi bấm vào",
          "type": "integer"
        },
        "linkRoute": {
          "description": "Đường dẫn trong ứng dụng",
          "type": "string"
        },
        "scheduledDate": {
          "format": "date-time",
          "description": "Thời điểm hẹn gửi",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = Draft, 1 = Scheduled, 2 = Sending, 3 = Sent, 4 = Failed, 5 = Cancelled)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5
          ],
          "type": "integer"
        },
        "sendMethod": {
          "format": "int32",
          "description": "Cách gửi thực tế. Gửi qua topic thì SentCount là số thiết bị đang đăng ký\r\ntopic tại thời điểm gửi, không phải số máy xác nhận đã nhận. (0 = NotSent, 1 = PerUser, 2 = Topic)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "targetCount": {
          "format": "int32",
          "description": "Số người thuộc đối tượng nhận",
          "type": "integer"
        },
        "reachableCount": {
          "format": "int32",
          "description": "Số người thực sự nhận được: chỉ tính người còn thiết bị hoạt động trong 180 ngày.\r\nLuôn nhỏ hơn TargetCount và đây mới là con số cam kết được với khách hàng.",
          "type": "integer"
        },
        "sentCount": {
          "format": "int32",
          "description": "Số đã gửi thành công",
          "type": "integer"
        },
        "failedCount": {
          "format": "int32",
          "description": "Số gửi lỗi",
          "type": "integer"
        },
        "postEngagement24h": {
          "format": "int32",
          "description": "Lượt tương tác trên bài đích trong 24 giờ sau khi gửi.\r\nHệ thống không đo được số người bấm vào thông báo nên không có chỉ số đó.",
          "type": "integer"
        },
        "hangfireJobId": {
          "description": "Mã công việc nền",
          "type": "string"
        },
        "quotaConsumed": {
          "description": "Đã trừ hạn mức",
          "type": "boolean"
        },
        "lastError": {
          "description": "Lỗi gần nhất",
          "type": "string"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "sentDate": {
          "format": "date-time",
          "description": "Thời điểm gửi",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IROaAccountChangeRequest": {
      "description": "Đăng ký hoặc cập nhật Official Account",
      "type": "object",
      "properties": {
        "userName": {
          "description": "Tài khoản FireAnt dùng làm Official Account",
          "type": "string"
        },
        "displayName": {
          "description": "Tên hiển thị",
          "type": "string"
        },
        "bio": {
          "description": "Giới thiệu",
          "type": "string"
        },
        "avatarUrl": {
          "description": "Ảnh đại diện",
          "type": "string"
        },
        "coverUrl": {
          "description": "Ảnh bìa",
          "type": "string"
        },
        "verificationDocUrl": {
          "description": "Giấy ủy quyền có dấu công ty",
          "type": "string"
        },
        "autoDraftDisclosures": {
          "description": "Tự tạo bản nháp từ công bố thông tin của sở",
          "type": "boolean"
        },
        "commentMode": {
          "format": "int32",
          "description": "Chế độ bình luận (0 = Open, 1 = Moderated, 2 = Closed)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "requireApproval": {
          "description": "Bắt buộc duyệt nội bộ trước khi đăng",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IROaPostItem]": {
      "description": "Kết quả phân trang dùng chung cho module IR",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaPostItem"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IROaPostItem": {
      "description": "Bài viết của Official Account",
      "type": "object",
      "properties": {
        "oaPostId": {
          "format": "int32",
          "description": "ID bài trong hệ thống IR",
          "type": "integer"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "postId": {
          "format": "int32",
          "description": "ID bài trên mạng xã hội sau khi đăng",
          "type": "integer"
        },
        "title": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "content": {
          "description": "Nội dung",
          "type": "string"
        },
        "mediaJson": {
          "description": "Ảnh và tệp đính kèm",
          "type": "string"
        },
        "symbolsJson": {
          "description": "Mã chứng khoán gắn kèm",
          "type": "string"
        },
        "templateId": {
          "format": "int32",
          "description": "Mẫu công bố đã dùng",
          "type": "integer"
        },
        "templateName": {
          "description": "Tên mẫu",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái trong quy trình duyệt (0 = Draft, 1 = PendingApproval, 2 = Approved, 3 = Scheduled, 4 = Published, 5 = Rejected, 6 = Failed)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "scheduledDate": {
          "format": "date-time",
          "description": "Thời điểm hẹn đăng",
          "type": "string"
        },
        "publishedDate": {
          "format": "date-time",
          "description": "Thời điểm đã đăng",
          "type": "string"
        },
        "pushOnPublish": {
          "description": "Gửi thông báo đẩy khi đăng",
          "type": "boolean"
        },
        "pushTitle": {
          "description": "Tiêu đề thông báo đẩy",
          "type": "string"
        },
        "createdBy": {
          "description": "Người soạn",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày soạn",
          "type": "string"
        },
        "modifiedBy": {
          "description": "Người sửa gần nhất",
          "type": "string"
        },
        "modifiedDate": {
          "format": "date-time",
          "description": "Thời điểm sửa gần nhất",
          "type": "string"
        },
        "submittedBy": {
          "description": "Người trình duyệt",
          "type": "string"
        },
        "submittedDate": {
          "format": "date-time",
          "description": "Thời điểm trình duyệt",
          "type": "string"
        },
        "approvedBy": {
          "description": "Người duyệt",
          "type": "string"
        },
        "approvedDate": {
          "format": "date-time",
          "description": "Thời điểm duyệt",
          "type": "string"
        },
        "rejectedBy": {
          "description": "Người từ chối",
          "type": "string"
        },
        "rejectedDate": {
          "format": "date-time",
          "description": "Thời điểm từ chối",
          "type": "string"
        },
        "rejectReason": {
          "description": "Lý do từ chối",
          "type": "string"
        },
        "hangfireJobId": {
          "description": "Mã công việc nền đã hẹn giờ",
          "type": "string"
        },
        "lastError": {
          "description": "Lỗi gần nhất khi đăng",
          "type": "string"
        },
        "likes": {
          "format": "int32",
          "description": "Lượt thích",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "description": "Lượt trả lời",
          "type": "integer"
        },
        "shares": {
          "format": "int32",
          "description": "Lượt chia sẻ",
          "type": "integer"
        },
        "engagementScore": {
          "format": "double",
          "description": "Điểm tương tác",
          "type": "number"
        },
        "metrics": {
          "description": "Hiệu quả theo ngày",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IROaPostMetricPoint"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IROaPostMetricPoint": {
      "description": "Hiệu quả bài Official Account theo ngày",
      "type": "object",
      "properties": {
        "date": {
          "format": "date-time",
          "description": "Ngày",
          "type": "string"
        },
        "likes": {
          "format": "int32",
          "description": "Lượt thích",
          "type": "integer"
        },
        "replies": {
          "format": "int32",
          "description": "Lượt trả lời",
          "type": "integer"
        },
        "shares": {
          "format": "int32",
          "description": "Lượt chia sẻ",
          "type": "integer"
        },
        "engagementScore": {
          "format": "double",
          "description": "Điểm tương tác",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.IR.IROaPostChangeRequest": {
      "description": "Soạn hoặc sửa bài Official Account",
      "required": [
        "content"
      ],
      "type": "object",
      "properties": {
        "title": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "content": {
          "description": "Nội dung",
          "type": "string"
        },
        "mediaJson": {
          "description": "Ảnh và tệp đính kèm",
          "type": "string"
        },
        "symbolsJson": {
          "description": "Mã chứng khoán gắn kèm",
          "type": "string"
        },
        "templateId": {
          "format": "int32",
          "description": "Mẫu công bố đã dùng",
          "type": "integer"
        },
        "scheduledDate": {
          "format": "date-time",
          "description": "Thời điểm hẹn đăng",
          "type": "string"
        },
        "pushOnPublish": {
          "description": "Gửi thông báo đẩy khi đăng (trừ hạn mức chiến dịch)",
          "type": "boolean"
        },
        "pushTitle": {
          "description": "Tiêu đề thông báo đẩy",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IROaPostStatusRequest": {
      "description": "Chuyển trạng thái bài Official Account",
      "type": "object",
      "properties": {
        "status": {
          "format": "int32",
          "description": "Trạng thái mới (0 = Draft, 1 = PendingApproval, 2 = Approved, 3 = Scheduled, 4 = Published, 5 = Rejected, 6 = Failed)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "rejectReason": {
          "description": "Lý do từ chối (bắt buộc khi từ chối)",
          "type": "string"
        },
        "scheduledDate": {
          "format": "date-time",
          "description": "Thời điểm hẹn đăng (khi chuyển sang đã lên lịch)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IROaTemplateItem": {
      "description": "Mẫu công bố dựng sẵn",
      "type": "object",
      "properties": {
        "templateId": {
          "format": "int32",
          "description": "ID mẫu",
          "type": "integer"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty (null = mẫu hệ thống dùng chung)",
          "type": "integer"
        },
        "code": {
          "description": "Mã mẫu",
          "type": "string"
        },
        "name": {
          "description": "Tên mẫu",
          "type": "string"
        },
        "category": {
          "description": "Nhóm mẫu",
          "type": "string"
        },
        "titleTemplate": {
          "description": "Khung tiêu đề",
          "type": "string"
        },
        "contentTemplate": {
          "description": "Khung nội dung",
          "type": "string"
        },
        "placeholdersJson": {
          "description": "Danh sách chỗ cần điền",
          "type": "string"
        },
        "orderIndex": {
          "format": "int32",
          "description": "Thứ tự hiển thị",
          "type": "integer"
        },
        "isActive": {
          "description": "Đang bật",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IROaCommentActionItem": {
      "description": "Hành động kiểm duyệt bình luận dưới bài của công ty",
      "type": "object",
      "properties": {
        "actionId": {
          "format": "int32",
          "description": "ID hành động",
          "type": "integer"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "postId": {
          "format": "int32",
          "description": "Bài viết",
          "type": "integer"
        },
        "commentPostId": {
          "format": "int32",
          "description": "Bình luận",
          "type": "integer"
        },
        "action": {
          "format": "int32",
          "description": "Hành động (1 = Hide, 2 = Reply, 3 = Pin, 4 = Report)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "reason": {
          "description": "Lý do",
          "type": "string"
        },
        "actorUserName": {
          "description": "Người thực hiện",
          "type": "string"
        },
        "resultStatus": {
          "format": "int32",
          "description": "Kết quả: 0 chờ, 1 thành công, 2 lỗi",
          "type": "integer"
        },
        "resultNote": {
          "description": "Ghi chú kết quả",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Thời điểm",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IROaCommentActionRequest": {
      "description": "Kiểm duyệt một bình luận dưới bài của công ty",
      "type": "object",
      "properties": {
        "commentPostId": {
          "format": "int32",
          "description": "Bình luận cần xử lý",
          "type": "integer"
        },
        "action": {
          "format": "int32",
          "description": "Hành động (1 = Hide, 2 = Reply, 3 = Pin, 4 = Report)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "reason": {
          "description": "Lý do",
          "type": "string"
        },
        "replyBody": {
          "description": "Nội dung trả lời (khi hành động là trả lời)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRCampaignItem]": {
      "description": "Kết quả phân trang dùng chung cho module IR",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRCampaignItem"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRCampaignChangeRequest": {
      "description": "Tạo chiến dịch thông báo",
      "required": [
        "title",
        "body"
      ],
      "type": "object",
      "properties": {
        "type": {
          "format": "int32",
          "description": "Loại (1 = Push, 2 = Email)",
          "enum": [
            1,
            2
          ],
          "type": "integer"
        },
        "title": {
          "description": "Tiêu đề thông báo",
          "type": "string"
        },
        "body": {
          "description": "Nội dung",
          "type": "string"
        },
        "targetType": {
          "format": "int32",
          "description": "Đối tượng nhận (1 = SymbolFollowers, 2 = OaFollowers, 3 = EventRegistrants)",
          "enum": [
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "linkPostId": {
          "format": "int32",
          "description": "Bài viết mở khi bấm vào",
          "type": "integer"
        },
        "linkRoute": {
          "description": "Đường dẫn trong ứng dụng",
          "type": "string"
        },
        "scheduledDate": {
          "format": "date-time",
          "description": "Thời điểm hẹn gửi (bỏ trống = gửi ngay)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRCampaignReach": {
      "description": "Số người nhận được ước tính trước khi gửi chiến dịch",
      "type": "object",
      "properties": {
        "totalUsers": {
          "format": "int32",
          "description": "Tổng số người thuộc đối tượng",
          "type": "integer"
        },
        "reachableUsers": {
          "format": "int32",
          "description": "Số người còn thiết bị hoạt động trong 180 ngày - con số thực sự nhận được",
          "type": "integer"
        },
        "remainingQuota": {
          "format": "int32",
          "description": "Hạn mức còn lại trong kỳ",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageDraftRequest": {
      "description": "Lưu bản nháp",
      "type": "object",
      "properties": {
        "content": {
          "description": "Tài liệu trang (JSON theo @fireant-media/ir-page)",
          "type": "object"
        },
        "expectedRevision": {
          "format": "int32",
          "description": "Revision client đang giữ; khác máy chủ thì 409. Bỏ trống = ghi đè",
          "type": "integer"
        },
        "note": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagePublishRequest": {
      "description": "Xuất bản (hoặc gửi duyệt nếu có thay đổi cần duyệt)",
      "type": "object",
      "properties": {
        "note": {
          "type": "string"
        },
        "scheduledDate": {
          "format": "date-time",
          "description": "Hẹn giờ lên trang",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagePublishResult": {
      "description": "Kết quả xuất bản",
      "type": "object",
      "properties": {
        "outcome": {
          "description": "published | scheduled | pending_review",
          "type": "string"
        },
        "version": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageVersionItem"
        },
        "reasons": {
          "description": "Lý do cần duyệt",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageRiskReason"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageRiskReason": {
      "description": "Một lý do cần FireAnt duyệt (khớp RiskReason của ir-page)",
      "type": "object",
      "properties": {
        "kind": {
          "description": "first_publish | risky_block | external_link | custom_tab",
          "type": "string"
        },
        "blockId": {
          "type": "string"
        },
        "blockType": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "message": {
          "$ref": "#/definitions/FireAnt.Api.Models.IR.IRLText"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageEnableRequest": {
      "description": "Doanh nghiệp tắt / bật trang",
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRMediaAsset]": {
      "description": "Kết quả phân trang dùng chung cho module IR",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRMediaAsset"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRMediaAsset": {
      "type": "object",
      "properties": {
        "assetId": {
          "format": "int32",
          "type": "integer"
        },
        "symbol": {
          "type": "string"
        },
        "kind": {
          "format": "int32",
          "description": " (1 = Image, 2 = Pdf)",
          "enum": [
            1,
            2
          ],
          "type": "integer"
        },
        "url": {
          "type": "string"
        },
        "fileName": {
          "type": "string"
        },
        "contentType": {
          "type": "string"
        },
        "sizeBytes": {
          "format": "int64",
          "type": "integer"
        },
        "width": {
          "format": "int32",
          "type": "integer"
        },
        "height": {
          "format": "int32",
          "type": "integer"
        },
        "altVi": {
          "type": "string"
        },
        "altEn": {
          "type": "string"
        },
        "uploadedBy": {
          "type": "string"
        },
        "uploadedDate": {
          "format": "date-time",
          "type": "string"
        },
        "ref": {
          "description": "Tham chiếu dùng trong tài liệu trang: media:&lt;id&gt;",
          "type": "string",
          "readOnly": true
        }
      }
    },
    "FireAnt.Api.Models.IR.IRMediaUpdateRequest": {
      "type": "object",
      "properties": {
        "altVi": {
          "type": "string"
        },
        "altEn": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRContactMessagePage": {
      "type": "object",
      "properties": {
        "newCount": {
          "format": "int32",
          "type": "integer"
        },
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRContactMessage"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRContactMessage": {
      "type": "object",
      "properties": {
        "messageId": {
          "format": "int32",
          "type": "integer"
        },
        "senderName": {
          "type": "string"
        },
        "senderEmail": {
          "type": "string"
        },
        "senderPhone": {
          "type": "string"
        },
        "subject": {
          "type": "string"
        },
        "body": {
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "0 mới, 1 đã đọc, 2 đã trả lời, 3 lưu trữ",
          "type": "integer"
        },
        "handledBy": {
          "type": "string"
        },
        "handledDate": {
          "format": "date-time",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRContactStatusRequest": {
      "type": "object",
      "properties": {
        "status": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageStats": {
      "type": "object",
      "properties": {
        "days": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageStatsDay"
          }
        },
        "tabs": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageTabViews"
          }
        },
        "topDocuments": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRPageTopDocument"
          }
        },
        "followers": {
          "format": "int32",
          "type": "integer"
        },
        "newFollowers": {
          "format": "int32",
          "type": "integer"
        },
        "upcomingRegistrations": {
          "format": "int32",
          "type": "integer"
        },
        "questionsAsked": {
          "format": "int32",
          "type": "integer"
        },
        "questionsAnswered": {
          "format": "int32",
          "type": "integer"
        },
        "pendingQuestions": {
          "format": "int32",
          "type": "integer"
        },
        "oldestPendingDays": {
          "format": "int32",
          "type": "integer"
        },
        "downloads": {
          "format": "int32",
          "type": "integer"
        },
        "newMessages": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageStatsDay": {
      "type": "object",
      "properties": {
        "date": {
          "format": "date-time",
          "type": "string"
        },
        "platform": {
          "format": "int32",
          "description": "1 web, 2 app, 3 nhúng",
          "type": "integer"
        },
        "views": {
          "format": "int32",
          "type": "integer"
        },
        "visitors": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageTabViews": {
      "type": "object",
      "properties": {
        "tab": {
          "type": "string"
        },
        "views": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageTopDocument": {
      "type": "object",
      "properties": {
        "documentId": {
          "format": "int32",
          "type": "integer"
        },
        "title": {
          "type": "string"
        },
        "downloads": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageChecklistContext": {
      "description": "Dữ liệu cho bảng kiểm hoàn thiện (checklist.ts của ir-page)",
      "type": "object",
      "properties": {
        "documents": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRChecklistDocument"
          }
        },
        "answered": {
          "format": "int32",
          "type": "integer"
        },
        "pending": {
          "format": "int32",
          "type": "integer"
        },
        "oldestPendingDays": {
          "format": "int32",
          "type": "integer"
        },
        "upcomingEvents": {
          "format": "int32",
          "type": "integer"
        },
        "oaVerified": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRChecklistDocument": {
      "type": "object",
      "properties": {
        "documentId": {
          "format": "int32",
          "type": "integer"
        },
        "title": {
          "type": "string"
        },
        "category": {
          "format": "int32",
          "type": "integer"
        },
        "language": {
          "type": "string"
        },
        "period": {
          "type": "string"
        },
        "publishedDate": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRAiTranslateRequest": {
      "type": "object",
      "properties": {
        "items": {
          "description": "Các chuỗi cần dịch (khóa do client đặt để ráp lại)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAiTranslateItem"
          }
        },
        "from": {
          "description": "vi → en (mặc định) hoặc en → vi",
          "type": "string"
        },
        "to": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRAiTranslateItem": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "text": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRAiTranslateResult": {
      "type": "object",
      "properties": {
        "items": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAiTranslateItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRAiSummaryRequest": {
      "type": "object",
      "properties": {
        "period": {
          "description": "Kỳ cần tóm tắt, ví dụ \"Q2/2026\"; bỏ trống = kỳ gần nhất",
          "type": "string"
        },
        "lang": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRAiSummaryResult": {
      "description": "Bản nháp tóm tắt kỳ báo cáo (khớp props khối earnings_summary)",
      "type": "object",
      "properties": {
        "period": {
          "type": "string"
        },
        "headline": {
          "type": "string"
        },
        "summaryMarkup": {
          "description": "Markup rich text (## tiêu đề, - ý, **đậm**) để Portal đổi sang cây",
          "type": "string"
        },
        "highlights": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRCompanyUserItem": {
      "description": "Người dùng thuộc workspace của công ty",
      "type": "object",
      "properties": {
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "userName": {
          "description": "Tên đăng nhập",
          "type": "string"
        },
        "name": {
          "description": "Tên hiển thị trên FireAnt",
          "type": "string"
        },
        "role": {
          "format": "int32",
          "description": "Vai trò (1 = Owner, 2 = Admin, 3 = Editor, 4 = Analyst, 5 = Viewer)",
          "enum": [
            1,
            2,
            3,
            4,
            5
          ],
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = Invited, 1 = Active, 2 = Disabled)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "invitedBy": {
          "description": "Người mời",
          "type": "string"
        },
        "invitedDate": {
          "format": "date-time",
          "description": "Thời điểm mời",
          "type": "string"
        },
        "joinedDate": {
          "format": "date-time",
          "description": "Thời điểm tham gia",
          "type": "string"
        },
        "lastAccessDate": {
          "format": "date-time",
          "description": "Lần truy cập gần nhất",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRInvitationItem": {
      "description": "Lời mời tham gia workspace",
      "type": "object",
      "properties": {
        "invitationId": {
          "format": "int32",
          "description": "ID lời mời",
          "type": "integer"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "companyName": {
          "description": "Tên công ty",
          "type": "string"
        },
        "email": {
          "description": "Email được mời",
          "type": "string"
        },
        "role": {
          "format": "int32",
          "description": "Vai trò sẽ được cấp (1 = Owner, 2 = Admin, 3 = Editor, 4 = Analyst, 5 = Viewer)",
          "enum": [
            1,
            2,
            3,
            4,
            5
          ],
          "type": "integer"
        },
        "token": {
          "description": "Mã lời mời (chỉ trả về cho người quản lý workspace)",
          "type": "string"
        },
        "expiresDate": {
          "format": "date-time",
          "description": "Hạn dùng",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = Pending, 1 = Accepted, 2 = Revoked, 3 = Expired)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "acceptedUserName": {
          "description": "Tài khoản đã chấp nhận",
          "type": "string"
        },
        "acceptedDate": {
          "format": "date-time",
          "description": "Thời điểm chấp nhận",
          "type": "string"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRInvitationRequest": {
      "description": "Mời người dùng vào workspace",
      "required": [
        "email"
      ],
      "type": "object",
      "properties": {
        "email": {
          "description": "Email người được mời",
          "type": "string"
        },
        "role": {
          "format": "int32",
          "description": "Vai trò sẽ cấp (1 = Owner, 2 = Admin, 3 = Editor, 4 = Analyst, 5 = Viewer)",
          "enum": [
            1,
            2,
            3,
            4,
            5
          ],
          "type": "integer"
        },
        "expiresInDays": {
          "format": "int32",
          "description": "Số ngày hiệu lực (mặc định 14)",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRQuotaItem": {
      "description": "Hạn mức đã dùng trong kỳ",
      "type": "object",
      "properties": {
        "featureKey": {
          "description": "Khóa tính năng",
          "type": "string"
        },
        "periodKey": {
          "description": "Kỳ tính hạn mức (2026-09 theo tháng, 2026-Q3 theo quý)",
          "type": "string"
        },
        "used": {
          "format": "int32",
          "description": "Đã dùng",
          "type": "integer"
        },
        "limitValue": {
          "format": "int32",
          "description": "Giới hạn (null = không giới hạn)",
          "type": "integer"
        },
        "remaining": {
          "format": "int32",
          "description": "Còn lại (null = không giới hạn)",
          "type": "integer"
        },
        "lastUsedDate": {
          "format": "date-time",
          "description": "Lần dùng gần nhất",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPagedResult[FireAnt.Api.Models.IR.IRAuditLogItem]": {
      "description": "Kết quả phân trang dùng chung cho module IR",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách bản ghi của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRAuditLogItem"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa mỗi trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRAuditLogItem": {
      "type": "object",
      "properties": {
        "logId": {
          "format": "int64",
          "description": "ID bản ghi",
          "type": "integer"
        },
        "companyId": {
          "format": "int32",
          "description": "ID công ty",
          "type": "integer"
        },
        "userName": {
          "description": "Người thực hiện",
          "type": "string"
        },
        "action": {
          "description": "Hành động",
          "type": "string"
        },
        "objectType": {
          "description": "Loại đối tượng",
          "type": "string"
        },
        "objectKey": {
          "description": "Khóa đối tượng",
          "type": "string"
        },
        "dataJson": {
          "description": "Dữ liệu kèm theo",
          "type": "string"
        },
        "ip": {
          "description": "Địa chỉ IP",
          "type": "string"
        },
        "date": {
          "format": "date-time",
          "description": "Thời điểm",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageSummary": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "available": {
          "description": "Có Trang IR để mở: trang chính thức đang xuất bản từ IR Portal (không còn trang tự động)",
          "type": "boolean"
        },
        "official": {
          "type": "boolean"
        },
        "brand": {
          "type": "string"
        },
        "logo": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "updatedAt": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPublicPageListItem": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "publishedDate": {
          "format": "date-time",
          "type": "string"
        },
        "locales": {
          "type": "string"
        },
        "customDomain": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPublicAskRequest": {
      "type": "object",
      "properties": {
        "body": {
          "type": "string"
        },
        "isAnonymous": {
          "type": "boolean"
        },
        "context": {
          "description": "Chủ đề gom câu hỏi (vd agm:2027)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTrackRequest": {
      "type": "object",
      "properties": {
        "platform": {
          "description": "web | app | embed",
          "type": "string"
        },
        "tab": {
          "type": "string"
        },
        "firstOfDay": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRViewerState": {
      "type": "object",
      "properties": {
        "following": {
          "type": "boolean"
        },
        "prefs": {
          "description": "disclosures | events | answers | documents",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "votedQuestionIds": {
          "type": "array",
          "items": {
            "format": "int32",
            "type": "integer"
          }
        },
        "registeredEventIds": {
          "type": "array",
          "items": {
            "format": "int32",
            "type": "integer"
          }
        },
        "myQuestions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRBundleQuestion"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRVoteRequest": {
      "type": "object",
      "properties": {
        "on": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRVoteResult": {
      "type": "object",
      "properties": {
        "questionId": {
          "format": "int32",
          "type": "integer"
        },
        "upVotes": {
          "format": "int32",
          "type": "integer"
        },
        "voted": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRFollowRequest": {
      "type": "object",
      "properties": {
        "follow": {
          "type": "boolean"
        },
        "prefs": {
          "description": "disclosures | events | answers | documents (bỏ trống = tất cả)",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRFollowResult": {
      "type": "object",
      "properties": {
        "following": {
          "type": "boolean"
        },
        "prefs": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "followerCount": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IREventRegisterRequest": {
      "type": "object",
      "properties": {
        "register": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.IR.IREventRegisterResult": {
      "type": "object",
      "properties": {
        "eventId": {
          "format": "int32",
          "type": "integer"
        },
        "registered": {
          "type": "boolean"
        },
        "registrations": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRContactRequest": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        },
        "subject": {
          "type": "string"
        },
        "body": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRPageClaimRequest": {
      "type": "object",
      "properties": {
        "contactName": {
          "type": "string"
        },
        "position": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "phone": {
          "type": "string"
        },
        "message": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTicketChangeRequest": {
      "description": "Tạo yêu cầu hỗ trợ",
      "required": [
        "subject"
      ],
      "type": "object",
      "properties": {
        "type": {
          "format": "int32",
          "description": "Loại yêu cầu (1 = NegativeContent, 2 = Rumor, 3 = Impersonation, 4 = DataCorrection, 5 = OaSupport, 6 = Advertising, 7 = Other)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6,
            7
          ],
          "type": "integer"
        },
        "priority": {
          "format": "int32",
          "description": "Mức ưu tiên (1 = Low, 2 = Normal, 3 = High, 4 = Urgent)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "subject": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "description": {
          "description": "Mô tả chi tiết",
          "type": "string"
        },
        "items": {
          "description": "Bằng chứng đính kèm",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.IR.IRTicketEvidenceRequest"
          }
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTicketEvidenceRequest": {
      "description": "Một bằng chứng đính kèm yêu cầu hỗ trợ",
      "required": [
        "itemKey"
      ],
      "type": "object",
      "properties": {
        "itemType": {
          "format": "int32",
          "description": "Loại bằng chứng (1 = Post, 2 = Comment, 3 = User, 4 = Room, 5 = Url, 6 = File)",
          "enum": [
            1,
            2,
            3,
            4,
            5,
            6
          ],
          "type": "integer"
        },
        "itemKey": {
          "description": "Khóa đối tượng: ID bài, tên tài khoản, đường dẫn",
          "type": "string"
        },
        "fileUrl": {
          "description": "Tệp đính kèm",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.IR.IRTicketRatingRequest": {
      "description": "Đánh giá chất lượng xử lý",
      "type": "object",
      "properties": {
        "rating": {
          "format": "int32",
          "description": "Điểm từ 1 đến 5",
          "type": "integer"
        },
        "comment": {
          "description": "Nhận xét",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Macro.MacroIndicatorType": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Macro.MacroIndicatorInfo": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "type": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "nameVN": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "lastValue": {
          "format": "double",
          "type": "number"
        },
        "lastDate": {
          "format": "date-time",
          "type": "string"
        },
        "previousValue": {
          "format": "double",
          "type": "number"
        },
        "previousDate": {
          "format": "date-time",
          "type": "string"
        },
        "firstDate": {
          "format": "date-time",
          "type": "string"
        },
        "maxValue": {
          "format": "double",
          "type": "number"
        },
        "maxDate": {
          "format": "date-time",
          "type": "string"
        },
        "minValue": {
          "format": "double",
          "type": "number"
        },
        "minDate": {
          "format": "date-time",
          "type": "string"
        },
        "averageValue": {
          "format": "double",
          "type": "number"
        },
        "unit": {
          "type": "string"
        },
        "frequency": {
          "type": "string"
        },
        "range": {
          "type": "string"
        },
        "nextRelease": {
          "format": "date-time",
          "type": "string"
        },
        "source": {
          "type": "string"
        },
        "historicalValue": {
          "type": "object"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroDataInfo": {
      "description": "Tổng quan kho dữ liệu vĩ mô FireAnt_MacroEconomic (GET macro-economic/info)",
      "type": "object",
      "properties": {
        "dataVersion": {
          "format": "int64",
          "description": "Phiên bản dữ liệu - tăng sau mỗi lượt nạp (dùng để làm mới cache phía client)",
          "type": "integer"
        },
        "dataUpdatedAt": {
          "format": "date-time",
          "description": "Thời điểm phiên bản dữ liệu thay đổi gần nhất (giờ máy chủ, +07:00)",
          "type": "string"
        },
        "lastLoadedAt": {
          "format": "date-time",
          "description": "Thời điểm lượt nạp dữ liệu thành công gần nhất (giờ máy chủ)",
          "type": "string"
        },
        "sourceCount": {
          "format": "int32",
          "description": "Số nguồn dữ liệu",
          "type": "integer"
        },
        "indicatorCount": {
          "format": "int32",
          "description": "Số chỉ tiêu",
          "type": "integer"
        },
        "seriesCount": {
          "format": "int32",
          "description": "Số chuỗi số liệu đang hiệu lực",
          "type": "integer"
        },
        "observationCount": {
          "format": "int64",
          "description": "Số quan sát hiện hành",
          "type": "integer"
        },
        "firstPeriodDate": {
          "format": "date-time",
          "description": "Kỳ sớm nhất có số liệu (ngày bắt đầu kỳ)",
          "type": "string"
        },
        "lastPeriodDate": {
          "format": "date-time",
          "description": "Kỳ muộn nhất có số liệu (ngày bắt đầu kỳ - có thể là kỳ dự báo, vd. IMF WEO)",
          "type": "string"
        },
        "eventCount": {
          "format": "int32",
          "description": "Số sự kiện vĩ mô",
          "type": "integer"
        },
        "lastEventDate": {
          "format": "date-time",
          "description": "Ngày của sự kiện vĩ mô mới nhất",
          "type": "string"
        },
        "serverTime": {
          "format": "date-time",
          "description": "Giờ máy chủ CSDL",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroDictionary": {
      "description": "Từ điển mã -&gt; nhãn vi/en của các chiều dữ liệu (GET macro-economic/dictionary)",
      "type": "object",
      "properties": {
        "frequencies": {
          "description": "Tần suất kỳ: A | MY | H | Q | M | SM | D (Rank = thứ tự hiển thị)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroCodeLabel"
          }
        },
        "stages": {
          "description": "Giai đoạn công bố: official | adjusted | preliminary | estimate | flash | unspecified (Rank cao = chắc chắn hơn)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroCodeLabel"
          }
        },
        "timeAggregations": {
          "description": "Cách cộng dồn thời gian (period, month, quarter, year, ytd, point_in_time...)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroCodeLabel"
          }
        },
        "priceBases": {
          "description": "Loại giá: current (danh nghĩa) | constant (thực)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroCodeLabel"
          }
        },
        "measures": {
          "description": "Vai trò thước đo (Class: level | index | rate | share)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroCodeLabel"
          }
        },
        "units": {
          "description": "Đơn vị (Symbol, StandardCode, ConversionFactor sang đơn vị chuẩn, DecimalPlaces)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroCodeLabel"
          }
        },
        "tradeFlows": {
          "description": "Dòng thương mại: export | import | balance",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroCodeLabel"
          }
        },
        "tradeScopes": {
          "description": "Phạm vi thương mại: total | fdi | domestic | province",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroCodeLabel"
          }
        },
        "tradeBases": {
          "description": "Điều kiện giá thương mại: fob | cif",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroCodeLabel"
          }
        },
        "derivedMetrics": {
          "description": "Chỉ số kho tự tính: yoy_pct | mom_pct | qoq_pct",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroCodeLabel"
          }
        },
        "concepts": {
          "description": "Khái niệm (dân số, lao động...; Group = nhóm khái niệm)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroCodeLabel"
          }
        },
        "itemSchemes": {
          "description": "Bộ phân loại mục",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroCodeLabel"
          }
        },
        "valueStatuses": {
          "description": "Trạng thái giá trị: valid | provisional | missing | suppressed",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroCodeLabel"
          }
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroCodeLabel": {
      "description": "Một mục của từ điển. Ngoài Code / Name / NameEn, các trường khác chỉ có ở loại từ điển tương ứng\r\n(trường null bị bỏ khỏi JSON)",
      "type": "object",
      "properties": {
        "code": {
          "description": "Mã",
          "type": "string"
        },
        "name": {
          "description": "Nhãn tiếng Việt",
          "type": "string"
        },
        "nameEn": {
          "description": "Nhãn tiếng Anh",
          "type": "string"
        },
        "rank": {
          "format": "int32",
          "description": "Thứ tự / hạng (tần suất, giai đoạn công bố)",
          "type": "integer"
        },
        "class": {
          "description": "Phân loại (thước đo: level | index | rate | share; đơn vị: CURRENCY | QUANTITY | INDEX...)",
          "type": "string"
        },
        "group": {
          "description": "Nhóm (khái niệm)",
          "type": "string"
        },
        "comparisonBase": {
          "description": "Kỳ so sánh (thước đo, chỉ số tự tính)",
          "type": "string"
        },
        "isPercent": {
          "description": "Giá trị là phần trăm (thước đo)",
          "type": "boolean"
        },
        "symbol": {
          "description": "Ký hiệu tiếng Việt (đơn vị)",
          "type": "string"
        },
        "symbolEn": {
          "description": "Ký hiệu tiếng Anh (đơn vị)",
          "type": "string"
        },
        "standardCode": {
          "description": "Mã đơn vị chuẩn (đơn vị)",
          "type": "string"
        },
        "conversionFactor": {
          "format": "double",
          "description": "Hệ số đổi sang đơn vị chuẩn (đơn vị)",
          "type": "number"
        },
        "decimalPlaces": {
          "format": "int32",
          "description": "Số chữ số thập phân nên hiển thị (đơn vị)",
          "type": "integer"
        },
        "isHierarchical": {
          "description": "Bộ phân loại có cấp cha - con (bộ phân loại mục)",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroSource": {
      "description": "Nguồn dữ liệu (Cục Thống kê, Hải quan, NHNN, IMF, World Bank, USDA...)",
      "type": "object",
      "properties": {
        "code": {
          "description": "Mã nguồn: nso | customs | sbv | imf | imf_weo | worldbank | vietcombank | treasury | mard | petrolimex | usda...",
          "type": "string"
        },
        "name": {
          "description": "Tên tiếng Việt",
          "type": "string"
        },
        "nameEn": {
          "description": "Tên tiếng Anh",
          "type": "string"
        },
        "defaultAreaCode": {
          "description": "Địa bàn mặc định của nguồn (VN với nguồn trong nước), null với nguồn quốc tế",
          "type": "string"
        },
        "indicatorCount": {
          "format": "int32",
          "description": "Số chỉ tiêu",
          "type": "integer"
        },
        "seriesCount": {
          "format": "int32",
          "description": "Số chuỗi số liệu",
          "type": "integer"
        },
        "observationCount": {
          "format": "int64",
          "description": "Số quan sát hiện hành",
          "type": "integer"
        },
        "firstPeriodDate": {
          "format": "date-time",
          "description": "Kỳ sớm nhất có số liệu",
          "type": "string"
        },
        "lastPeriodDate": {
          "format": "date-time",
          "description": "Kỳ muộn nhất có số liệu",
          "type": "string"
        },
        "lastLoadedAt": {
          "format": "date-time",
          "description": "Lượt nạp thành công gần nhất của nguồn (giờ máy chủ)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroIndicator": {
      "description": "Chỉ tiêu của một nguồn (vd. nso/cpi, customs/export). Một chỉ tiêu gồm nhiều chuỗi số liệu\r\n(theo mục, thước đo, đơn vị, tần suất, cách cộng dồn, địa bàn, đối tác...)",
      "type": "object",
      "properties": {
        "sourceCode": {
          "description": "Mã nguồn",
          "type": "string"
        },
        "sourceName": {
          "description": "Tên nguồn tiếng Việt",
          "type": "string"
        },
        "sourceNameEn": {
          "description": "Tên nguồn tiếng Anh",
          "type": "string"
        },
        "code": {
          "description": "Mã chỉ tiêu (duy nhất trong một nguồn)",
          "type": "string"
        },
        "name": {
          "description": "Tên tiếng Việt",
          "type": "string"
        },
        "nameEn": {
          "description": "Tên tiếng Anh (null nếu chưa có bản dịch)",
          "type": "string"
        },
        "frequency": {
          "description": "Tần suất công bố điển hình: A (năm) | MY (niên vụ) | H (nửa năm) | Q (quý) | M (tháng) | SM (nửa tháng) | D (ngày)",
          "type": "string"
        },
        "frequencies": {
          "description": "Các tần suất có chuỗi số liệu (thứ tự A, MY, H, Q, M, SM, D)",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "seriesCount": {
          "format": "int32",
          "description": "Số chuỗi số liệu",
          "type": "integer"
        },
        "itemCount": {
          "format": "int32",
          "description": "Số mục (item) khác nhau",
          "type": "integer"
        },
        "observationCount": {
          "format": "int64",
          "description": "Số quan sát hiện hành",
          "type": "integer"
        },
        "firstPeriodDate": {
          "format": "date-time",
          "description": "Kỳ sớm nhất có số liệu",
          "type": "string"
        },
        "lastPeriodDate": {
          "format": "date-time",
          "description": "Kỳ muộn nhất có số liệu",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroIndicatorDetail": {
      "description": "Chi tiết chỉ tiêu: thông tin + thống kê theo tần suất + các thước đo + giá trị của từng chiều lọc\r\n(GET macro-economic/indicators/{source}/{indicator})",
      "type": "object",
      "properties": {
        "methodologyNote": {
          "description": "Ghi chú phương pháp (null nếu nguồn chưa có)",
          "type": "string"
        },
        "effectiveFrom": {
          "format": "date-time",
          "description": "Hiệu lực từ ngày (null = không giới hạn)",
          "type": "string"
        },
        "effectiveTo": {
          "format": "date-time",
          "description": "Hiệu lực đến ngày (null = còn hiệu lực)",
          "type": "string"
        },
        "lastLoadedAt": {
          "format": "date-time",
          "description": "Lần nạp số liệu gần nhất của chỉ tiêu (giờ máy chủ)",
          "type": "string"
        },
        "frequencyStats": {
          "description": "Thống kê theo tần suất",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroIndicatorFrequency"
          }
        },
        "measures": {
          "description": "Thước đo (mã cột nguồn + vai trò + đơn vị + cách cộng dồn + loại giá)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroIndicatorMeasure"
          }
        },
        "dimensions": {
          "description": "Giá trị của từng chiều lọc, khoá là tên tham số lọc của GET macro-economic/series:\r\ntimeAggregation | priceBasis | basePeriod | unit | area | partner | concept | tradeFlow | tradeScope | tradeBasis | seasonallyAdjusted.\r\nChỉ có các chiều mà chỉ tiêu thực sự dùng.",
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroDimensionValue"
            }
          }
        },
        "sourceCode": {
          "description": "Mã nguồn",
          "type": "string"
        },
        "sourceName": {
          "description": "Tên nguồn tiếng Việt",
          "type": "string"
        },
        "sourceNameEn": {
          "description": "Tên nguồn tiếng Anh",
          "type": "string"
        },
        "code": {
          "description": "Mã chỉ tiêu (duy nhất trong một nguồn)",
          "type": "string"
        },
        "name": {
          "description": "Tên tiếng Việt",
          "type": "string"
        },
        "nameEn": {
          "description": "Tên tiếng Anh (null nếu chưa có bản dịch)",
          "type": "string"
        },
        "frequency": {
          "description": "Tần suất công bố điển hình: A (năm) | MY (niên vụ) | H (nửa năm) | Q (quý) | M (tháng) | SM (nửa tháng) | D (ngày)",
          "type": "string"
        },
        "frequencies": {
          "description": "Các tần suất có chuỗi số liệu (thứ tự A, MY, H, Q, M, SM, D)",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "seriesCount": {
          "format": "int32",
          "description": "Số chuỗi số liệu",
          "type": "integer"
        },
        "itemCount": {
          "format": "int32",
          "description": "Số mục (item) khác nhau",
          "type": "integer"
        },
        "observationCount": {
          "format": "int64",
          "description": "Số quan sát hiện hành",
          "type": "integer"
        },
        "firstPeriodDate": {
          "format": "date-time",
          "description": "Kỳ sớm nhất có số liệu",
          "type": "string"
        },
        "lastPeriodDate": {
          "format": "date-time",
          "description": "Kỳ muộn nhất có số liệu",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroIndicatorFrequency": {
      "description": "Thống kê chuỗi số liệu của chỉ tiêu theo một tần suất",
      "type": "object",
      "properties": {
        "frequency": {
          "description": "Mã tần suất (A | MY | H | Q | M | SM | D)",
          "type": "string"
        },
        "name": {
          "description": "Tên tần suất tiếng Việt",
          "type": "string"
        },
        "nameEn": {
          "description": "Tên tần suất tiếng Anh",
          "type": "string"
        },
        "seriesCount": {
          "format": "int32",
          "description": "Số chuỗi",
          "type": "integer"
        },
        "observationCount": {
          "format": "int64",
          "description": "Số quan sát hiện hành",
          "type": "integer"
        },
        "firstPeriodDate": {
          "format": "date-time",
          "description": "Kỳ sớm nhất",
          "type": "string"
        },
        "lastPeriodDate": {
          "format": "date-time",
          "description": "Kỳ muộn nhất",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroIndicatorMeasure": {
      "description": "Một thước đo của chỉ tiêu",
      "type": "object",
      "properties": {
        "measureCode": {
          "description": "Mã thước đo theo cột nguồn (tham số measure của GET macro-economic/series)",
          "type": "string"
        },
        "measureRole": {
          "description": "Vai trò thước đo đã chuẩn hoá (level, index_yoy, yoy, mom...) - xem từ điển measures",
          "type": "string"
        },
        "measureName": {
          "description": "Tên thước đo tiếng Việt",
          "type": "string"
        },
        "measureNameEn": {
          "description": "Tên thước đo tiếng Anh",
          "type": "string"
        },
        "measureClass": {
          "description": "Loại: level (mức) | index (chỉ số) | rate (tốc độ, %) | share (tỷ trọng, %)",
          "type": "string"
        },
        "comparisonBase": {
          "description": "Kỳ so sánh: same_period_py | prev_period | base_period | dec_py | plan...",
          "type": "string"
        },
        "isPercent": {
          "description": "Giá trị là phần trăm",
          "type": "boolean"
        },
        "timeAggregation": {
          "description": "Cách cộng dồn thời gian: period | month | quarter | year | ytd | point_in_time | ytd_average...",
          "type": "string"
        },
        "priceBasis": {
          "description": "Loại giá (GDP): current (danh nghĩa) | constant (thực); null nếu không áp dụng",
          "type": "string"
        },
        "unitCode": {
          "description": "Mã đơn vị",
          "type": "string"
        },
        "unitName": {
          "description": "Ký hiệu / tên đơn vị tiếng Việt",
          "type": "string"
        },
        "unitNameEn": {
          "description": "Ký hiệu / tên đơn vị tiếng Anh",
          "type": "string"
        },
        "seriesCount": {
          "format": "int32",
          "description": "Số chuỗi",
          "type": "integer"
        },
        "firstPeriodDate": {
          "format": "date-time",
          "description": "Kỳ sớm nhất",
          "type": "string"
        },
        "lastPeriodDate": {
          "format": "date-time",
          "description": "Kỳ muộn nhất",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroDimensionValue": {
      "description": "Một giá trị của chiều lọc (mã + nhãn + số chuỗi có giá trị này)",
      "type": "object",
      "properties": {
        "code": {
          "description": "Mã (giá trị truyền vào tham số lọc tương ứng)",
          "type": "string"
        },
        "name": {
          "description": "Nhãn tiếng Việt",
          "type": "string"
        },
        "nameEn": {
          "description": "Nhãn tiếng Anh",
          "type": "string"
        },
        "seriesCount": {
          "format": "int32",
          "description": "Số chuỗi",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroIndicatorItem": {
      "description": "Mục (item) của chỉ tiêu - nút của cây phân loại (ngành GDP, nhóm hàng CPI, mặt hàng xuất khẩu...)",
      "type": "object",
      "properties": {
        "scheme": {
          "description": "Bộ phân loại của mục",
          "type": "string"
        },
        "code": {
          "description": "Mã mục (tham số item của GET macro-economic/series)",
          "type": "string"
        },
        "name": {
          "description": "Tên tiếng Việt",
          "type": "string"
        },
        "nameEn": {
          "description": "Tên tiếng Anh",
          "type": "string"
        },
        "note": {
          "description": "Ghi chú cách tính (chỉ có ở mục mà con số dễ bị đọc sai nếu không biết quy ước)",
          "type": "string"
        },
        "noteEn": {
          "description": "Ghi chú cách tính tiếng Anh",
          "type": "string"
        },
        "level": {
          "format": "int32",
          "description": "Cấp trong cây (0 = gốc)",
          "type": "integer"
        },
        "isTotal": {
          "description": "Mục là dòng tổng",
          "type": "boolean"
        },
        "parentCode": {
          "description": "Mã mục cha (null = mục gốc)",
          "type": "string"
        },
        "childCount": {
          "format": "int32",
          "description": "Số mục con trực tiếp",
          "type": "integer"
        },
        "seriesCount": {
          "format": "int32",
          "description": "Số chuỗi của mục",
          "type": "integer"
        },
        "firstPeriodDate": {
          "format": "date-time",
          "description": "Kỳ sớm nhất",
          "type": "string"
        },
        "lastPeriodDate": {
          "format": "date-time",
          "description": "Kỳ muộn nhất",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroArea": {
      "description": "Địa bàn / quốc gia / khu vực (giá trị cho tham số area, partner)",
      "type": "object",
      "properties": {
        "code": {
          "description": "Mã địa bàn (VN, JP, mã tỉnh...)",
          "type": "string"
        },
        "type": {
          "description": "Loại: world | wregion | wsubregion | egroup | nation | country | province",
          "type": "string"
        },
        "name": {
          "description": "Tên tiếng Việt",
          "type": "string"
        },
        "nameEn": {
          "description": "Tên tiếng Anh",
          "type": "string"
        },
        "shortName": {
          "description": "Tên ngắn",
          "type": "string"
        },
        "iso2": {
          "description": "Mã ISO 3166-1 alpha-2",
          "type": "string"
        },
        "iso3": {
          "description": "Mã ISO 3166-1 alpha-3",
          "type": "string"
        },
        "unCode": {
          "description": "Mã số M49 của Liên Hợp Quốc",
          "type": "string"
        },
        "isoSubdivision": {
          "description": "Mã ISO 3166-2 (tỉnh / thành phố)",
          "type": "string"
        },
        "gsoCode": {
          "description": "Mã đơn vị hành chính của Cục Thống kê",
          "type": "string"
        },
        "parentCode": {
          "description": "Mã địa bàn cha",
          "type": "string"
        },
        "latitude": {
          "format": "double",
          "description": "Vĩ độ",
          "type": "number"
        },
        "longitude": {
          "format": "double",
          "description": "Kinh độ",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroDataUpdate": {
      "description": "Kỳ số liệu mới nhất về kho của một bộ dữ liệu (nguồn × chỉ tiêu × tần suất) - \"Dữ liệu mới cập nhật\"",
      "type": "object",
      "properties": {
        "sourceCode": {
          "description": "Mã nguồn",
          "type": "string"
        },
        "sourceName": {
          "description": "Tên nguồn tiếng Việt",
          "type": "string"
        },
        "sourceNameEn": {
          "description": "Tên nguồn tiếng Anh",
          "type": "string"
        },
        "indicatorCode": {
          "description": "Mã chỉ tiêu",
          "type": "string"
        },
        "indicatorName": {
          "description": "Tên chỉ tiêu tiếng Việt",
          "type": "string"
        },
        "indicatorNameEn": {
          "description": "Tên chỉ tiêu tiếng Anh",
          "type": "string"
        },
        "frequency": {
          "description": "Tần suất",
          "type": "string"
        },
        "period": {
          "description": "Mã kỳ mới nhất (2026M09, 2026Q3, 2026, 2026D1005, 2026M09K1...)",
          "type": "string"
        },
        "periodName": {
          "description": "Tên kỳ tiếng Việt (Tháng 9/2026)",
          "type": "string"
        },
        "periodNameEn": {
          "description": "Tên kỳ tiếng Anh (Sep 2026)",
          "type": "string"
        },
        "startDate": {
          "format": "date-time",
          "description": "Ngày bắt đầu kỳ",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Ngày kết thúc kỳ",
          "type": "string"
        },
        "arrivedAt": {
          "format": "date-time",
          "description": "Lần đầu kỳ này có số liệu trong kho (giờ máy chủ)",
          "type": "string"
        },
        "lastLoadedAt": {
          "format": "date-time",
          "description": "Lần nạp gần nhất của kỳ này (giờ máy chủ)",
          "type": "string"
        },
        "seriesCount": {
          "format": "int32",
          "description": "Số chuỗi có số liệu ở kỳ này",
          "type": "integer"
        },
        "observationCount": {
          "format": "int32",
          "description": "Số quan sát có giá trị ở kỳ này",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroSeriesPagedResult": {
      "description": "Trang kết quả tìm chuỗi số liệu",
      "type": "object",
      "properties": {
        "total": {
          "format": "int32",
          "description": "Tổng số chuỗi khớp điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bắt đầu",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số chuỗi tối đa mỗi trang",
          "type": "integer"
        },
        "items": {
          "description": "Các chuỗi trong trang (kèm giá trị mới nhất)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroSeries"
          }
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroSeries": {
      "description": "Một chuỗi số liệu: một chỉ tiêu × mục × thước đo × đơn vị × tần suất × cách cộng dồn × loại giá × kỳ gốc ×\r\nđịa bàn × đối tác... Trường null bị bỏ khỏi JSON (phần lớn chiều chỉ có ở một số nguồn).",
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "description": "ID chuỗi (số nguyên, dùng trong URL)",
          "type": "integer"
        },
        "uid": {
          "description": "Mã băm ổn định của chuỗi (64 ký tự hex) - không đổi khi kho được dựng lại, nên dùng để lưu cấu hình biểu đồ / widget",
          "type": "string"
        },
        "sourceCode": {
          "description": "Mã nguồn",
          "type": "string"
        },
        "indicatorCode": {
          "description": "Mã chỉ tiêu",
          "type": "string"
        },
        "indicatorName": {
          "description": "Tên chỉ tiêu tiếng Việt",
          "type": "string"
        },
        "indicatorNameEn": {
          "description": "Tên chỉ tiêu tiếng Anh",
          "type": "string"
        },
        "itemScheme": {
          "description": "Bộ phân loại của mục",
          "type": "string"
        },
        "itemCode": {
          "description": "Mã mục",
          "type": "string"
        },
        "itemName": {
          "description": "Tên mục tiếng Việt",
          "type": "string"
        },
        "itemNameEn": {
          "description": "Tên mục tiếng Anh",
          "type": "string"
        },
        "itemNote": {
          "description": "Ghi chú cách tính của mục",
          "type": "string"
        },
        "itemNoteEn": {
          "description": "Ghi chú cách tính của mục (tiếng Anh)",
          "type": "string"
        },
        "itemLevel": {
          "format": "int32",
          "description": "Cấp của mục trong cây (0 = gốc)",
          "type": "integer"
        },
        "isTotal": {
          "description": "Mục là dòng tổng",
          "type": "boolean"
        },
        "parentItemCode": {
          "description": "Mã mục cha",
          "type": "string"
        },
        "parentItemName": {
          "description": "Tên mục cha tiếng Việt",
          "type": "string"
        },
        "parentItemNameEn": {
          "description": "Tên mục cha tiếng Anh",
          "type": "string"
        },
        "conceptCode": {
          "description": "Mã khái niệm (dân số, lao động...)",
          "type": "string"
        },
        "conceptName": {
          "description": "Tên khái niệm tiếng Việt",
          "type": "string"
        },
        "conceptNameEn": {
          "description": "Tên khái niệm tiếng Anh",
          "type": "string"
        },
        "conceptGroup": {
          "description": "Nhóm khái niệm",
          "type": "string"
        },
        "measureCode": {
          "description": "Mã thước đo theo cột nguồn",
          "type": "string"
        },
        "measureRole": {
          "description": "Vai trò thước đo đã chuẩn hoá (level, index_yoy, yoy, mom, rate, share...)",
          "type": "string"
        },
        "measureName": {
          "description": "Tên thước đo tiếng Việt",
          "type": "string"
        },
        "measureNameEn": {
          "description": "Tên thước đo tiếng Anh",
          "type": "string"
        },
        "measureClass": {
          "description": "Loại thước đo: level | index | rate | share",
          "type": "string"
        },
        "comparisonBase": {
          "description": "Kỳ so sánh: same_period_py | prev_period | base_period | dec_py | plan...",
          "type": "string"
        },
        "isPercent": {
          "description": "Giá trị là phần trăm",
          "type": "boolean"
        },
        "unitCode": {
          "description": "Mã đơn vị",
          "type": "string"
        },
        "unitName": {
          "description": "Ký hiệu / tên đơn vị tiếng Việt",
          "type": "string"
        },
        "unitNameEn": {
          "description": "Ký hiệu / tên đơn vị tiếng Anh",
          "type": "string"
        },
        "standardUnitCode": {
          "description": "Mã đơn vị chuẩn",
          "type": "string"
        },
        "standardUnitName": {
          "description": "Đơn vị chuẩn tiếng Việt",
          "type": "string"
        },
        "standardUnitNameEn": {
          "description": "Đơn vị chuẩn tiếng Anh",
          "type": "string"
        },
        "unitConversionFactor": {
          "format": "double",
          "description": "Hệ số đổi giá trị sang đơn vị chuẩn (giá trị chuẩn = Value × hệ số)",
          "type": "number"
        },
        "frequency": {
          "description": "Tần suất: A | MY | H | Q | M | SM | D",
          "type": "string"
        },
        "timeAggregation": {
          "description": "Cách cộng dồn thời gian: period | month | quarter | year | ytd | point_in_time | ytd_average...",
          "type": "string"
        },
        "priceBasis": {
          "description": "Loại giá: current | constant",
          "type": "string"
        },
        "basePeriod": {
          "description": "Kỳ gốc của chỉ số (2019, 2024...)",
          "type": "string"
        },
        "isSeasonallyAdjusted": {
          "description": "Đã hiệu chỉnh mùa vụ (null = nguồn không nêu)",
          "type": "boolean"
        },
        "tradeFlow": {
          "description": "Dòng thương mại: export | import | balance",
          "type": "string"
        },
        "tradeScope": {
          "description": "Phạm vi thương mại: total | fdi | domestic | province",
          "type": "string"
        },
        "tradeBasis": {
          "description": "Điều kiện giá thương mại: fob | cif",
          "type": "string"
        },
        "areaCode": {
          "description": "Mã địa bàn của số liệu",
          "type": "string"
        },
        "areaLevel": {
          "description": "Cấp địa bàn: nation | province | country...",
          "type": "string"
        },
        "areaName": {
          "description": "Tên địa bàn tiếng Việt",
          "type": "string"
        },
        "areaNameEn": {
          "description": "Tên địa bàn tiếng Anh",
          "type": "string"
        },
        "areaIsoCode": {
          "description": "Mã ISO của địa bàn",
          "type": "string"
        },
        "areaGsoCode": {
          "description": "Mã hành chính của Cục Thống kê",
          "type": "string"
        },
        "partnerCode": {
          "description": "Mã đối tác (nước / khu vực đối tác thương mại, đầu tư, du lịch...)",
          "type": "string"
        },
        "partnerType": {
          "description": "Loại đối tác: country | world | wregion | wsubregion...",
          "type": "string"
        },
        "partnerName": {
          "description": "Tên đối tác tiếng Việt",
          "type": "string"
        },
        "partnerNameEn": {
          "description": "Tên đối tác tiếng Anh",
          "type": "string"
        },
        "partnerIso2": {
          "description": "Mã ISO alpha-2 của đối tác",
          "type": "string"
        },
        "partnerIso3": {
          "description": "Mã ISO alpha-3 của đối tác",
          "type": "string"
        },
        "isDerived": {
          "description": "Chuỗi do kho tự tính (không phải nguồn công bố)",
          "type": "boolean"
        },
        "firstPeriodDate": {
          "format": "date-time",
          "description": "Kỳ sớm nhất có số liệu (ngày bắt đầu kỳ)",
          "type": "string"
        },
        "lastPeriodDate": {
          "format": "date-time",
          "description": "Kỳ muộn nhất có số liệu (ngày bắt đầu kỳ)",
          "type": "string"
        },
        "observationCount": {
          "format": "int32",
          "description": "Số quan sát hiện hành",
          "type": "integer"
        },
        "latest": {
          "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroLatestValue",
          "description": "Giá trị mới nhất và giá trị kỳ trước (null nếu chuỗi chưa có số)"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroLatestValue": {
      "description": "Giá trị mới nhất của chuỗi. Ưu tiên số đã kết thúc kỳ (Status = valid) trước số tạm tính / dự báo (provisional),\r\nnên chuỗi có dự báo (IMF WEO tới 2031) vẫn trả số thực tế gần nhất.",
      "type": "object",
      "properties": {
        "period": {
          "description": "Mã kỳ",
          "type": "string"
        },
        "startDate": {
          "format": "date-time",
          "description": "Ngày bắt đầu kỳ",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Ngày kết thúc kỳ",
          "type": "string"
        },
        "value": {
          "format": "double",
          "description": "Giá trị (đơn vị của chuỗi)",
          "type": "number"
        },
        "status": {
          "description": "Trạng thái: valid | provisional",
          "type": "string"
        },
        "stage": {
          "description": "Giai đoạn công bố: official | adjusted | preliminary | estimate | flash | unspecified",
          "type": "string"
        },
        "loadedAt": {
          "format": "date-time",
          "description": "Thời điểm nạp giá trị này (giờ máy chủ)",
          "type": "string"
        },
        "previousPeriod": {
          "description": "Mã kỳ liền trước có số",
          "type": "string"
        },
        "previousValue": {
          "format": "double",
          "description": "Giá trị kỳ liền trước",
          "type": "number"
        },
        "change": {
          "format": "double",
          "description": "Chênh lệch Value - PreviousValue (cùng đơn vị; với chuỗi % là điểm phần trăm)",
          "type": "number"
        },
        "changePercent": {
          "format": "double",
          "description": "Thay đổi % so với kỳ trước - chỉ tính cho chuỗi mức (level) và chỉ số (index), null với chuỗi tỷ lệ / tỷ trọng",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroSeriesData": {
      "description": "Chuỗi kèm quan sát (GET macro-economic/series/{key}/data, GET macro-economic/data)",
      "type": "object",
      "properties": {
        "series": {
          "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroSeries",
          "description": "Metadata chuỗi (kèm giá trị mới nhất)"
        },
        "observations": {
          "description": "Quan sát theo kỳ tăng dần",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroObservation"
          }
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroObservation": {
      "description": "Một quan sát hiện hành (bản công bố mới nhất của kỳ)",
      "type": "object",
      "properties": {
        "period": {
          "description": "Mã kỳ: 2026 | 2026H1 | 2026Q3 | 2026M09 | 2026M09K1 | 2026D1005 | MY2026",
          "type": "string"
        },
        "startDate": {
          "format": "date-time",
          "description": "Ngày bắt đầu kỳ",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Ngày kết thúc kỳ",
          "type": "string"
        },
        "value": {
          "format": "double",
          "description": "Giá trị (đơn vị của chuỗi); null khi Status = missing / suppressed",
          "type": "number"
        },
        "status": {
          "description": "Trạng thái: valid | provisional (kỳ chưa kết thúc / dự báo) | missing | suppressed",
          "type": "string"
        },
        "stage": {
          "description": "Giai đoạn công bố: official | adjusted | preliminary | estimate | flash | unspecified",
          "type": "string"
        },
        "isEstimated": {
          "description": "Số ước tính / dự báo (Stage = estimate, flash hoặc Status = provisional)",
          "type": "boolean"
        },
        "isEdited": {
          "description": "Giá trị đã được sửa tay trong kho",
          "type": "boolean"
        },
        "loadedAt": {
          "format": "date-time",
          "description": "Thời điểm nạp (giờ máy chủ)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroSeriesVintages": {
      "description": "Chuỗi kèm lịch sử điều chỉnh (GET macro-economic/series/{key}/vintages)",
      "type": "object",
      "properties": {
        "series": {
          "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroSeries",
          "description": "Metadata chuỗi"
        },
        "vintages": {
          "description": "Các bản công bố theo kỳ, giai đoạn, thời điểm nạp tăng dần",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroVintage"
          }
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroVintage": {
      "description": "Một bản công bố (vintage) của một kỳ - lịch sử điều chỉnh số liệu",
      "type": "object",
      "properties": {
        "period": {
          "description": "Mã kỳ",
          "type": "string"
        },
        "startDate": {
          "format": "date-time",
          "description": "Ngày bắt đầu kỳ",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Ngày kết thúc kỳ",
          "type": "string"
        },
        "releaseId": {
          "format": "int32",
          "description": "ID lần công bố",
          "type": "integer"
        },
        "releaseCode": {
          "description": "Mã lần công bố (nguồn:kỳ báo cáo:giai đoạn)",
          "type": "string"
        },
        "reportPeriod": {
          "description": "Kỳ báo cáo chứa số liệu này",
          "type": "string"
        },
        "stage": {
          "description": "Giai đoạn công bố",
          "type": "string"
        },
        "stageRank": {
          "format": "int32",
          "description": "Hạng giai đoạn (chính thức 5 &gt; điều chỉnh 4 &gt; sơ bộ 3 &gt; ước tính 2 &gt; ước nhanh 1 &gt; không rõ 0)",
          "type": "integer"
        },
        "publishedDate": {
          "format": "date-time",
          "description": "Ngày công bố (thường trống - nguồn không ghi)",
          "type": "string"
        },
        "value": {
          "format": "double",
          "description": "Giá trị",
          "type": "number"
        },
        "status": {
          "description": "Trạng thái giá trị",
          "type": "string"
        },
        "isCurrent": {
          "description": "Là bản hiện hành của kỳ",
          "type": "boolean"
        },
        "isEdited": {
          "description": "Đã sửa tay",
          "type": "boolean"
        },
        "loadedAt": {
          "format": "date-time",
          "description": "Thời điểm nạp (giờ máy chủ)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroSeriesDerived": {
      "description": "Chuỗi kèm các chỉ số kho tự tính (GET macro-economic/series/{key}/derived)",
      "type": "object",
      "properties": {
        "series": {
          "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroSeries",
          "description": "Metadata chuỗi gốc"
        },
        "values": {
          "description": "Giá trị theo chỉ số, kỳ tăng dần",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroDerivedValue"
          }
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroDerivedValue": {
      "description": "Giá trị chỉ số kho tự tính (tăng trưởng so cùng kỳ / kỳ trước)",
      "type": "object",
      "properties": {
        "metric": {
          "description": "Mã chỉ số: yoy_pct | mom_pct | qoq_pct",
          "type": "string"
        },
        "metricName": {
          "description": "Tên chỉ số tiếng Việt",
          "type": "string"
        },
        "metricNameEn": {
          "description": "Tên chỉ số tiếng Anh",
          "type": "string"
        },
        "period": {
          "description": "Mã kỳ",
          "type": "string"
        },
        "startDate": {
          "format": "date-time",
          "description": "Ngày bắt đầu kỳ",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Ngày kết thúc kỳ",
          "type": "string"
        },
        "value": {
          "format": "double",
          "description": "Giá trị (%)",
          "type": "number"
        },
        "basePeriod": {
          "description": "Kỳ so sánh",
          "type": "string"
        },
        "qualityFlag": {
          "format": "int32",
          "description": "Cờ chất lượng của kho (0 = bình thường)",
          "type": "integer"
        },
        "refreshedAt": {
          "format": "date-time",
          "description": "Thời điểm tính lại (giờ máy chủ)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroEventPagedResult": {
      "description": "Trang danh sách sự kiện",
      "type": "object",
      "properties": {
        "total": {
          "format": "int32",
          "description": "Tổng số sự kiện khớp điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bắt đầu",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số sự kiện tối đa mỗi trang",
          "type": "integer"
        },
        "items": {
          "description": "Sự kiện, mới trước (kèm kênh tác động)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroEvent"
          }
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroEvent": {
      "description": "Sự kiện vĩ mô (chính sách tiền tệ, lạm phát, địa chính trị, hàng hoá...) kèm đánh giá tác động lên Việt Nam",
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "description": "ID sự kiện (dùng cho GET macro-economic/events/{id})",
          "type": "integer"
        },
        "uid": {
          "description": "Mã ổn định của sự kiện (vd. \"2026-09-21:ftse-vietnam-upgrade-effective\")",
          "type": "string"
        },
        "date": {
          "format": "date-time",
          "description": "Ngày diễn ra",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Ngày kết thúc (sự kiện kéo dài)",
          "type": "string"
        },
        "datePrecision": {
          "description": "Độ chính xác của ngày: day | month | quarter",
          "type": "string"
        },
        "period": {
          "description": "Mã kỳ chứa sự kiện (2026M09)",
          "type": "string"
        },
        "title": {
          "description": "Tiêu đề tiếng Việt",
          "type": "string"
        },
        "titleEn": {
          "description": "Tiêu đề tiếng Anh",
          "type": "string"
        },
        "summary": {
          "description": "Tóm tắt tiếng Việt (không có ở danh sách sự kiện liên quan)",
          "type": "string"
        },
        "summaryEn": {
          "description": "Tóm tắt tiếng Anh",
          "type": "string"
        },
        "categoryCode": {
          "description": "Mã nhóm sự kiện (monetary_policy, inflation, growth, geopolitical...)",
          "type": "string"
        },
        "categoryName": {
          "description": "Tên nhóm tiếng Việt",
          "type": "string"
        },
        "categoryNameEn": {
          "description": "Tên nhóm tiếng Anh",
          "type": "string"
        },
        "type": {
          "description": "Loại: policy | data | shock | structural",
          "type": "string"
        },
        "originScope": {
          "description": "Phạm vi phát sinh: global | vietnam",
          "type": "string"
        },
        "exposure": {
          "description": "Mức độ ảnh hưởng tới Việt Nam: high | medium | low",
          "type": "string"
        },
        "originAreaCode": {
          "description": "Mã nơi phát sinh (WORLD, US, VN...)",
          "type": "string"
        },
        "originAreaName": {
          "description": "Tên nơi phát sinh tiếng Việt",
          "type": "string"
        },
        "originAreaNameEn": {
          "description": "Tên nơi phát sinh tiếng Anh",
          "type": "string"
        },
        "impactScore": {
          "format": "int32",
          "description": "Điểm tác động (1-5)",
          "type": "integer"
        },
        "impactRationale": {
          "description": "Lý do chấm điểm tác động (tiếng Việt)",
          "type": "string"
        },
        "impactRationaleEn": {
          "description": "Lý do chấm điểm tác động (tiếng Anh)",
          "type": "string"
        },
        "confidence": {
          "description": "Độ tin cậy: verified | reported",
          "type": "string"
        },
        "parentUid": {
          "description": "Uid sự kiện cha",
          "type": "string"
        },
        "sourceNote": {
          "description": "Ghi chú nguồn",
          "type": "string"
        },
        "createdAt": {
          "format": "date-time",
          "description": "Thời điểm tạo",
          "type": "string"
        },
        "updatedAt": {
          "format": "date-time",
          "description": "Thời điểm cập nhật",
          "type": "string"
        },
        "impacts": {
          "description": "Kênh tác động (lạm phát, tăng trưởng, USD, vàng, lãi suất, năng lượng...)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroEventImpact"
          }
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroEventImpact": {
      "description": "Tác động của sự kiện qua một kênh truyền dẫn",
      "type": "object",
      "properties": {
        "channelCode": {
          "description": "Mã kênh: inflation | growth | usd | gold | rates | energy | trade | capital_flow | fx_vnd | credit",
          "type": "string"
        },
        "channelName": {
          "description": "Tên kênh tiếng Việt",
          "type": "string"
        },
        "channelNameEn": {
          "description": "Tên kênh tiếng Anh",
          "type": "string"
        },
        "direction": {
          "description": "Chiều tác động: up | down | mixed...",
          "type": "string"
        },
        "magnitude": {
          "format": "int32",
          "description": "Độ lớn (1-3)",
          "type": "integer"
        },
        "lagDays": {
          "format": "int32",
          "description": "Độ trễ ước tính (ngày)",
          "type": "integer"
        },
        "note": {
          "description": "Ghi chú tiếng Việt",
          "type": "string"
        },
        "noteEn": {
          "description": "Ghi chú tiếng Anh",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroEventCategories": {
      "description": "Nhóm sự kiện và kênh tác động (GET macro-economic/events/categories)",
      "type": "object",
      "properties": {
        "categories": {
          "description": "Nhóm sự kiện",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroEventCategory"
          }
        },
        "channels": {
          "description": "Kênh tác động",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroEventChannel"
          }
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroEventCategory": {
      "description": "Nhóm sự kiện kèm định nghĩa và cơ chế truyền dẫn",
      "type": "object",
      "properties": {
        "code": {
          "description": "Mã nhóm",
          "type": "string"
        },
        "name": {
          "description": "Tên tiếng Việt",
          "type": "string"
        },
        "nameEn": {
          "description": "Tên tiếng Anh",
          "type": "string"
        },
        "definition": {
          "description": "Định nghĩa tiếng Việt",
          "type": "string"
        },
        "definitionEn": {
          "description": "Định nghĩa tiếng Anh",
          "type": "string"
        },
        "transmission": {
          "description": "Cơ chế truyền dẫn tới Việt Nam (tiếng Việt)",
          "type": "string"
        },
        "transmissionEn": {
          "description": "Cơ chế truyền dẫn (tiếng Anh)",
          "type": "string"
        },
        "sortOrder": {
          "format": "int32",
          "description": "Thứ tự hiển thị",
          "type": "integer"
        },
        "eventCount": {
          "format": "int32",
          "description": "Số sự kiện của nhóm",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroEventChannel": {
      "description": "Kênh tác động",
      "type": "object",
      "properties": {
        "code": {
          "description": "Mã kênh",
          "type": "string"
        },
        "name": {
          "description": "Tên tiếng Việt",
          "type": "string"
        },
        "nameEn": {
          "description": "Tên tiếng Anh",
          "type": "string"
        },
        "definition": {
          "description": "Định nghĩa tiếng Việt",
          "type": "string"
        },
        "definitionEn": {
          "description": "Định nghĩa tiếng Anh",
          "type": "string"
        },
        "sortOrder": {
          "format": "int32",
          "description": "Thứ tự hiển thị",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroEventDetail": {
      "description": "Chi tiết sự kiện (GET macro-economic/events/{id})",
      "type": "object",
      "properties": {
        "sources": {
          "description": "Nguồn tham khảo",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroEventSource"
          }
        },
        "related": {
          "description": "Sự kiện cha / con",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroEventRelated"
          }
        },
        "id": {
          "format": "int32",
          "description": "ID sự kiện (dùng cho GET macro-economic/events/{id})",
          "type": "integer"
        },
        "uid": {
          "description": "Mã ổn định của sự kiện (vd. \"2026-09-21:ftse-vietnam-upgrade-effective\")",
          "type": "string"
        },
        "date": {
          "format": "date-time",
          "description": "Ngày diễn ra",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Ngày kết thúc (sự kiện kéo dài)",
          "type": "string"
        },
        "datePrecision": {
          "description": "Độ chính xác của ngày: day | month | quarter",
          "type": "string"
        },
        "period": {
          "description": "Mã kỳ chứa sự kiện (2026M09)",
          "type": "string"
        },
        "title": {
          "description": "Tiêu đề tiếng Việt",
          "type": "string"
        },
        "titleEn": {
          "description": "Tiêu đề tiếng Anh",
          "type": "string"
        },
        "summary": {
          "description": "Tóm tắt tiếng Việt (không có ở danh sách sự kiện liên quan)",
          "type": "string"
        },
        "summaryEn": {
          "description": "Tóm tắt tiếng Anh",
          "type": "string"
        },
        "categoryCode": {
          "description": "Mã nhóm sự kiện (monetary_policy, inflation, growth, geopolitical...)",
          "type": "string"
        },
        "categoryName": {
          "description": "Tên nhóm tiếng Việt",
          "type": "string"
        },
        "categoryNameEn": {
          "description": "Tên nhóm tiếng Anh",
          "type": "string"
        },
        "type": {
          "description": "Loại: policy | data | shock | structural",
          "type": "string"
        },
        "originScope": {
          "description": "Phạm vi phát sinh: global | vietnam",
          "type": "string"
        },
        "exposure": {
          "description": "Mức độ ảnh hưởng tới Việt Nam: high | medium | low",
          "type": "string"
        },
        "originAreaCode": {
          "description": "Mã nơi phát sinh (WORLD, US, VN...)",
          "type": "string"
        },
        "originAreaName": {
          "description": "Tên nơi phát sinh tiếng Việt",
          "type": "string"
        },
        "originAreaNameEn": {
          "description": "Tên nơi phát sinh tiếng Anh",
          "type": "string"
        },
        "impactScore": {
          "format": "int32",
          "description": "Điểm tác động (1-5)",
          "type": "integer"
        },
        "impactRationale": {
          "description": "Lý do chấm điểm tác động (tiếng Việt)",
          "type": "string"
        },
        "impactRationaleEn": {
          "description": "Lý do chấm điểm tác động (tiếng Anh)",
          "type": "string"
        },
        "confidence": {
          "description": "Độ tin cậy: verified | reported",
          "type": "string"
        },
        "parentUid": {
          "description": "Uid sự kiện cha",
          "type": "string"
        },
        "sourceNote": {
          "description": "Ghi chú nguồn",
          "type": "string"
        },
        "createdAt": {
          "format": "date-time",
          "description": "Thời điểm tạo",
          "type": "string"
        },
        "updatedAt": {
          "format": "date-time",
          "description": "Thời điểm cập nhật",
          "type": "string"
        },
        "impacts": {
          "description": "Kênh tác động (lạm phát, tăng trưởng, USD, vàng, lãi suất, năng lượng...)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroEventImpact"
          }
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroEventSource": {
      "description": "Nguồn tham khảo của sự kiện",
      "type": "object",
      "properties": {
        "kind": {
          "description": "Loại nguồn: primary | secondary",
          "type": "string"
        },
        "publisher": {
          "description": "Đơn vị công bố",
          "type": "string"
        },
        "title": {
          "description": "Tiêu đề bài / văn bản",
          "type": "string"
        },
        "url": {
          "description": "Đường dẫn",
          "type": "string"
        },
        "publishedDate": {
          "format": "date-time",
          "description": "Ngày công bố",
          "type": "string"
        },
        "retrievedAt": {
          "format": "date-time",
          "description": "Ngày truy cập",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroEventRelated": {
      "description": "Sự kiện liên quan (cha / con) - không kèm tóm tắt và kênh tác động",
      "type": "object",
      "properties": {
        "relation": {
          "description": "Quan hệ với sự kiện đang xem: parent | child",
          "type": "string"
        },
        "id": {
          "format": "int32",
          "description": "ID sự kiện (dùng cho GET macro-economic/events/{id})",
          "type": "integer"
        },
        "uid": {
          "description": "Mã ổn định của sự kiện (vd. \"2026-09-21:ftse-vietnam-upgrade-effective\")",
          "type": "string"
        },
        "date": {
          "format": "date-time",
          "description": "Ngày diễn ra",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Ngày kết thúc (sự kiện kéo dài)",
          "type": "string"
        },
        "datePrecision": {
          "description": "Độ chính xác của ngày: day | month | quarter",
          "type": "string"
        },
        "period": {
          "description": "Mã kỳ chứa sự kiện (2026M09)",
          "type": "string"
        },
        "title": {
          "description": "Tiêu đề tiếng Việt",
          "type": "string"
        },
        "titleEn": {
          "description": "Tiêu đề tiếng Anh",
          "type": "string"
        },
        "summary": {
          "description": "Tóm tắt tiếng Việt (không có ở danh sách sự kiện liên quan)",
          "type": "string"
        },
        "summaryEn": {
          "description": "Tóm tắt tiếng Anh",
          "type": "string"
        },
        "categoryCode": {
          "description": "Mã nhóm sự kiện (monetary_policy, inflation, growth, geopolitical...)",
          "type": "string"
        },
        "categoryName": {
          "description": "Tên nhóm tiếng Việt",
          "type": "string"
        },
        "categoryNameEn": {
          "description": "Tên nhóm tiếng Anh",
          "type": "string"
        },
        "type": {
          "description": "Loại: policy | data | shock | structural",
          "type": "string"
        },
        "originScope": {
          "description": "Phạm vi phát sinh: global | vietnam",
          "type": "string"
        },
        "exposure": {
          "description": "Mức độ ảnh hưởng tới Việt Nam: high | medium | low",
          "type": "string"
        },
        "originAreaCode": {
          "description": "Mã nơi phát sinh (WORLD, US, VN...)",
          "type": "string"
        },
        "originAreaName": {
          "description": "Tên nơi phát sinh tiếng Việt",
          "type": "string"
        },
        "originAreaNameEn": {
          "description": "Tên nơi phát sinh tiếng Anh",
          "type": "string"
        },
        "impactScore": {
          "format": "int32",
          "description": "Điểm tác động (1-5)",
          "type": "integer"
        },
        "impactRationale": {
          "description": "Lý do chấm điểm tác động (tiếng Việt)",
          "type": "string"
        },
        "impactRationaleEn": {
          "description": "Lý do chấm điểm tác động (tiếng Anh)",
          "type": "string"
        },
        "confidence": {
          "description": "Độ tin cậy: verified | reported",
          "type": "string"
        },
        "parentUid": {
          "description": "Uid sự kiện cha",
          "type": "string"
        },
        "sourceNote": {
          "description": "Ghi chú nguồn",
          "type": "string"
        },
        "createdAt": {
          "format": "date-time",
          "description": "Thời điểm tạo",
          "type": "string"
        },
        "updatedAt": {
          "format": "date-time",
          "description": "Thời điểm cập nhật",
          "type": "string"
        },
        "impacts": {
          "description": "Kênh tác động (lạm phát, tăng trưởng, USD, vàng, lãi suất, năng lượng...)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MacroEconomic.MacroEventImpact"
          }
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroOmoAuction": {
      "description": "Kết quả một phiên đấu thầu nghiệp vụ thị trường mở (OMO) của NHNN cho một kỳ hạn. Khối lượng: tỷ đồng.",
      "type": "object",
      "properties": {
        "date": {
          "format": "date-time",
          "description": "Ngày đấu thầu",
          "type": "string"
        },
        "type": {
          "description": "Loại giao dịch (mua_ky_han = NHNN mua kỳ hạn giấy tờ có giá, tức bơm thanh khoản)",
          "type": "string"
        },
        "typeName": {
          "description": "Tên loại giao dịch tiếng Việt",
          "type": "string"
        },
        "typeNameEn": {
          "description": "Tên loại giao dịch tiếng Anh",
          "type": "string"
        },
        "itemCode": {
          "description": "Mã mục của nguồn (loại + kỳ hạn)",
          "type": "string"
        },
        "tenorDays": {
          "format": "int32",
          "description": "Kỳ hạn (ngày)",
          "type": "integer"
        },
        "maturityDate": {
          "format": "date-time",
          "description": "Ngày đáo hạn",
          "type": "string"
        },
        "maturesOnWeekend": {
          "description": "Đáo hạn rơi vào cuối tuần",
          "type": "boolean"
        },
        "volume": {
          "format": "double",
          "description": "Khối lượng trúng thầu (tỷ đồng)",
          "type": "number"
        },
        "interestRate": {
          "format": "double",
          "description": "Lãi suất trúng thầu (%/năm)",
          "type": "number"
        },
        "participants": {
          "format": "double",
          "description": "Số thành viên tham gia",
          "type": "number"
        },
        "winners": {
          "format": "double",
          "description": "Số thành viên trúng thầu",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroOmoPosition": {
      "description": "Trạng thái OMO theo ngày lịch và loại giao dịch (kể cả ngày không có phiên). Khối lượng: tỷ đồng.",
      "type": "object",
      "properties": {
        "date": {
          "format": "date-time",
          "description": "Ngày",
          "type": "string"
        },
        "type": {
          "description": "Loại giao dịch",
          "type": "string"
        },
        "injection": {
          "format": "double",
          "description": "Bơm mới trong ngày (khối lượng trúng thầu của các phiên ngày đó)",
          "type": "number"
        },
        "maturity": {
          "format": "double",
          "description": "Đến hạn trong ngày",
          "type": "number"
        },
        "netInjection": {
          "format": "double",
          "description": "Bơm ròng = bơm mới - đến hạn",
          "type": "number"
        },
        "outstanding": {
          "format": "double",
          "description": "Dư nợ cuối ngày (đã đấu thầu, chưa đáo hạn)",
          "type": "number"
        },
        "cumulativeInjection": {
          "format": "double",
          "description": "Bơm mới luỹ kế từ ngày đầu có dữ liệu",
          "type": "number"
        },
        "cumulativeMaturity": {
          "format": "double",
          "description": "Đến hạn luỹ kế từ ngày đầu có dữ liệu",
          "type": "number"
        },
        "outstandingContracts": {
          "format": "int32",
          "description": "Số khoản đang lưu hành",
          "type": "integer"
        },
        "averageRate": {
          "format": "double",
          "description": "Lãi suất bình quân của sổ dư nợ, gia quyền theo khối lượng (%/năm) - số tự tính",
          "type": "number"
        },
        "dataQuality": {
          "description": "Độ tin cậy: complete (đủ lịch sử) | partial_history (thiếu dữ liệu nhìn lại, dư nợ có thể thấp hơn thực) |\r\nafter_last_auction (sau phiên cuối có dữ liệu, chỉ còn phần đáo hạn tương lai)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroOmoTenorPosition": {
      "description": "Trạng thái OMO theo ngày × kỳ hạn (chỉ ngày có khoản lưu hành / phát sinh). Khối lượng: tỷ đồng.",
      "type": "object",
      "properties": {
        "date": {
          "format": "date-time",
          "description": "Ngày",
          "type": "string"
        },
        "type": {
          "description": "Loại giao dịch",
          "type": "string"
        },
        "tenorDays": {
          "format": "int32",
          "description": "Kỳ hạn (ngày)",
          "type": "integer"
        },
        "injection": {
          "format": "double",
          "description": "Bơm mới trong ngày",
          "type": "number"
        },
        "maturity": {
          "format": "double",
          "description": "Đến hạn trong ngày",
          "type": "number"
        },
        "outstanding": {
          "format": "double",
          "description": "Dư nợ cuối ngày",
          "type": "number"
        },
        "outstandingContracts": {
          "format": "int32",
          "description": "Số khoản đang lưu hành",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.MacroEconomic.MacroOmoLadderItem": {
      "description": "Bậc thang đáo hạn tại một ngày: khối lượng đang lưu hành sẽ đến hạn vào ngày nào. Khối lượng: tỷ đồng.",
      "type": "object",
      "properties": {
        "type": {
          "description": "Loại giao dịch",
          "type": "string"
        },
        "maturityDate": {
          "format": "date-time",
          "description": "Ngày đáo hạn",
          "type": "string"
        },
        "daysRemaining": {
          "format": "int32",
          "description": "Số ngày còn lại tính từ ngày xem",
          "type": "integer"
        },
        "bucket": {
          "description": "Nhóm thời gian còn lại: 1-7 | 8-14 | 15-30 | 31-60 | 61-90 | 90+",
          "type": "string"
        },
        "bucketName": {
          "description": "Tên nhóm thời gian còn lại (tiếng Việt)",
          "type": "string"
        },
        "volume": {
          "format": "double",
          "description": "Khối lượng sẽ đáo hạn",
          "type": "number"
        },
        "contracts": {
          "format": "int32",
          "description": "Số khoản",
          "type": "integer"
        },
        "averageRate": {
          "format": "double",
          "description": "Lãi suất bình quân gia quyền (%/năm)",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Users.PushTokenUpdateRequest": {
      "type": "object",
      "properties": {
        "anonymousUserID": {
          "type": "string"
        },
        "token": {
          "type": "string"
        },
        "type": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.RecentSymbolsUpdateRequest": {
      "type": "object",
      "properties": {
        "anonymousUserID": {
          "type": "string"
        },
        "symbols": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.WebPushMessage": {
      "type": "object",
      "properties": {
        "topic": {
          "type": "string"
        },
        "userName": {
          "type": "string"
        },
        "token": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "content": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "icon": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.WebPushTopicSubscription": {
      "type": "object",
      "properties": {
        "topic": {
          "type": "string"
        },
        "tokens": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "userNames": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "FireAnt.Api.Models.Users.EmailMessage": {
      "type": "object",
      "properties": {
        "sender": {
          "type": "string"
        },
        "receiver": {
          "type": "string"
        },
        "subject": {
          "type": "string"
        },
        "template": {
          "type": "string"
        },
        "parameters": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.UserPhoneNumber": {
      "type": "object",
      "properties": {
        "phoneNumber": {
          "type": "string"
        },
        "confirmed": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Users.AddPhoneNumberRequest": {
      "type": "object",
      "properties": {
        "phoneNumber": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.AddPhoneNumberResult": {
      "type": "object",
      "properties": {
        "verificationRequired": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Users.PhoneNumberVerificationRequest": {
      "type": "object",
      "properties": {
        "phoneNumber": {
          "type": "string"
        },
        "code": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.PhoneNumberVerificationResult": {
      "type": "object",
      "properties": {
        "verified": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Users.UserProfileUpdateRequest": {
      "type": "object",
      "properties": {
        "userName": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "bio": {
          "type": "string"
        },
        "address": {
          "type": "string"
        },
        "facebookLink": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.UserSettings": {
      "type": "object",
      "properties": {
        "userName": {
          "type": "string"
        },
        "mobileQuoteAlerts": {
          "type": "boolean"
        },
        "mobileNewsAlerts": {
          "type": "boolean"
        },
        "mobileRealtime": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Users.PurchasedItem": {
      "type": "object",
      "properties": {
        "serviceID": {
          "format": "int32",
          "type": "integer"
        },
        "packageID": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "orderID": {
          "format": "int32",
          "type": "integer"
        },
        "amount": {
          "format": "double",
          "type": "number"
        },
        "orderDate": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.UserAccount": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "membership": {
          "$ref": "#/definitions/FireAnt.Api.Models.Users.UserMembership"
        },
        "investorRelation": {
          "$ref": "#/definitions/FireAnt.Api.Models.Users.UserInvestorRelation"
        },
        "profile": {
          "$ref": "#/definitions/FireAnt.Api.Models.Users.UserProfile"
        },
        "moneyAccount": {
          "$ref": "#/definitions/FireAnt.Api.Models.Money.Account"
        },
        "identityData": {
          "$ref": "#/definitions/FireAnt.Api.Models.Users.UserIdentityData"
        },
        "identityVerified": {
          "type": "boolean"
        },
        "hasPinCode": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Users.UserMembership": {
      "type": "object",
      "properties": {
        "level": {
          "format": "int32",
          "type": "integer"
        },
        "endDate": {
          "format": "date-time",
          "type": "string"
        },
        "applications": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Users.SubscribedApplication"
          }
        }
      }
    },
    "FireAnt.Api.Models.Users.UserInvestorRelation": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Money.Account": {
      "type": "object",
      "properties": {
        "accountID": {
          "format": "int32",
          "type": "integer"
        },
        "totalBalance": {
          "format": "double",
          "type": "number"
        },
        "blockedBalance": {
          "format": "double",
          "type": "number"
        },
        "availableBalance": {
          "format": "double",
          "type": "number",
          "readOnly": true
        },
        "userName": {
          "type": "string"
        },
        "updatedDate": {
          "format": "date-time",
          "type": "string"
        },
        "mxvInvestorCode": {
          "type": "string"
        },
        "fMarketID": {
          "type": "string"
        },
        "fMarketStatus": {
          "type": "string"
        },
        "fMarketAccountDate": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.UserIdentityData": {
      "type": "object",
      "properties": {
        "phoneNumber": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "identityName": {
          "type": "string"
        },
        "identityNumber": {
          "type": "string"
        },
        "address": {
          "type": "string"
        },
        "dateOfBirth": {
          "format": "date-time",
          "type": "string"
        },
        "sex": {
          "type": "string"
        },
        "hometown": {
          "type": "string"
        },
        "nationality": {
          "type": "string"
        },
        "features": {
          "type": "string"
        },
        "issueDate": {
          "format": "date-time",
          "type": "string"
        },
        "issueLocation": {
          "type": "string"
        },
        "expiredDate": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.SubscribedApplication": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "description": " (0 = Web, 1 = Mobile, 2 = MetaKit, 3 = Excel, 4 = Copilot, 5 = MagicSignal, 6 = MagicChart, 7 = MobileCopilot)",
          "enum": [
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7
          ],
          "type": "integer"
        },
        "version": {
          "format": "int32",
          "type": "integer"
        },
        "endDate": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.ChangePasswordRequest": {
      "type": "object",
      "properties": {
        "oldPassword": {
          "type": "string"
        },
        "newPassword": {
          "type": "string"
        },
        "confirmPassword": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.SetPasswordRequest": {
      "type": "object",
      "properties": {
        "newPassword": {
          "type": "string"
        },
        "confirmPassword": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.UpdateAvatarRequest": {
      "type": "object",
      "properties": {
        "avatar": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.UserExtraInfoUpdateRequest": {
      "type": "object",
      "properties": {
        "sex": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Posts.HashTag": {
      "type": "object",
      "properties": {
        "hashTagID": {
          "format": "int32",
          "type": "integer"
        },
        "symbol": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Notification.UserNotification": {
      "type": "object",
      "properties": {
        "notificationID": {
          "format": "int64",
          "type": "integer"
        },
        "link": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "formattedTitle": {
          "type": "string"
        },
        "data": {
          "type": "string"
        },
        "date": {
          "format": "date-time",
          "type": "string"
        },
        "viewed": {
          "type": "boolean"
        },
        "read": {
          "type": "boolean"
        },
        "actorUser_1": {
          "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
        },
        "actorUser_2": {
          "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
        }
      }
    },
    "FireAnt.Api.Models.Watchlists.Watchlist": {
      "type": "object",
      "properties": {
        "watchlistID": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "userName": {
          "type": "string"
        },
        "symbols": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "displayIndex": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Watchlists.WatchlistOrders": {
      "type": "object",
      "properties": {
        "orders": {
          "type": "object",
          "additionalProperties": {
            "format": "int32",
            "type": "integer"
          }
        }
      }
    },
    "FireAnt.Api.Models.Chart.ChartTemplate": {
      "type": "object",
      "properties": {
        "chartTemplateID": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "userName": {
          "type": "string"
        },
        "symbol": {
          "type": "string"
        },
        "interval": {
          "type": "string"
        },
        "state": {
          "type": "string"
        },
        "template": {
          "type": "string"
        },
        "lastUpdated": {
          "format": "date-time",
          "type": "string"
        },
        "sharing": {
          "type": "boolean"
        },
        "isSystem": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Alerts.AlertNotification": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "date": {
          "format": "date-time",
          "type": "string"
        },
        "definitionId": {
          "type": "string"
        },
        "symbol": {
          "type": "string"
        },
        "title": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Alerts.AlertRegistration": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "definitionId": {
          "type": "string"
        },
        "options": {
          "type": "object"
        },
        "parameters": {
          "type": "object"
        },
        "preventPopup": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Alerts.MobileAlertRegistration": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "priceAbove": {
          "format": "double",
          "type": "number"
        },
        "priceBelow": {
          "format": "double",
          "type": "number"
        },
        "volumeAbove": {
          "format": "double",
          "type": "number"
        },
        "new52WeekHigh": {
          "type": "boolean"
        },
        "new52WeekLow": {
          "type": "boolean"
        },
        "aboveMA5": {
          "type": "boolean"
        },
        "aboveMA10": {
          "type": "boolean"
        },
        "aboveMA20": {
          "type": "boolean"
        },
        "belowMA5": {
          "type": "boolean"
        },
        "belowMA10": {
          "type": "boolean"
        },
        "belowMA20": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Screeners.Screener": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "lastUpdated": {
          "format": "date-time",
          "type": "string"
        },
        "conditions": {
          "type": "object"
        }
      }
    },
    "FireAnt.Api.Models.Workspaces.Workspace": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "lastUpdated": {
          "format": "date-time",
          "type": "string"
        },
        "state": {
          "type": "object"
        }
      }
    },
    "FireAnt.Api.Models.Rooms.RoomInvitationAction": {
      "description": "Hành động với lời mời",
      "type": "object",
      "properties": {
        "accepted": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Rooms.Room": {
      "type": "object",
      "properties": {
        "roomID": {
          "format": "int32",
          "type": "integer"
        },
        "status": {
          "format": "int32",
          "type": "integer"
        },
        "privacy": {
          "format": "int32",
          "type": "integer"
        },
        "visibility": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "approved": {
          "type": "boolean"
        },
        "createdDate": {
          "format": "date-time",
          "type": "string"
        },
        "promotionLevel": {
          "format": "int32",
          "type": "integer"
        },
        "invitationID": {
          "format": "int32",
          "type": "integer"
        },
        "requestID": {
          "format": "int32",
          "type": "integer"
        },
        "role": {
          "format": "int32",
          "type": "integer"
        },
        "blocked": {
          "type": "boolean"
        },
        "verified": {
          "type": "boolean"
        },
        "lastActivityDate": {
          "format": "date-time",
          "type": "string"
        },
        "topics": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Rooms.Topic"
          }
        },
        "symbols": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Rooms.RoomSymbol"
          }
        }
      }
    },
    "FireAnt.Api.Models.Rooms.Topic": {
      "type": "object",
      "properties": {
        "topicID": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Rooms.RoomSymbol": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "weight": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Users.UserIdentityVerificationRequest": {
      "type": "object",
      "properties": {
        "photo": {
          "type": "string"
        },
        "documentType": {
          "type": "string"
        },
        "frontImage": {
          "type": "string"
        },
        "backImage": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.UserIdentityVerificationResult": {
      "type": "object",
      "properties": {
        "succeeded": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "data": {
          "$ref": "#/definitions/FireAnt.Api.Models.Users.UserIdentityData"
        }
      }
    },
    "FireAnt.Api.Models.Trading.SuggestAccountNumber": {
      "type": "object",
      "properties": {
        "accountNumber": {
          "type": "string"
        },
        "type": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.CheckSuggestAccountNumberRequest": {
      "type": "object",
      "properties": {
        "accountNumber": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.EContractInformation": {
      "type": "object",
      "properties": {
        "contractId": {
          "type": "string"
        },
        "envId": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "cookieName": {
          "type": "string"
        },
        "cookieValue": {
          "type": "string"
        },
        "expireTime": {
          "format": "int32",
          "type": "integer"
        },
        "userName": {
          "type": "string"
        },
        "password": {
          "type": "string"
        },
        "iframeUrl": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.VerifyOtpDataRequest": {
      "type": "object",
      "properties": {
        "otpNumber": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.OpenAccountResult": {
      "description": "Kết quả mở tài khoản tại CTCK",
      "type": "object",
      "properties": {
        "brokerUserName": {
          "type": "string"
        },
        "brokerRequestID": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "eContractUrl": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.BrokerUserStatus": {
      "description": "Yêu cầu mở tài khoản tại CTCK",
      "type": "object",
      "properties": {
        "brokerUserName": {
          "type": "string"
        },
        "brokerRequestID": {
          "type": "string"
        },
        "status": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Money.Transaction": {
      "type": "object",
      "properties": {
        "transactionID": {
          "format": "int32",
          "type": "integer"
        },
        "transactionTypeID": {
          "format": "int32",
          "type": "integer"
        },
        "amount": {
          "format": "double",
          "type": "number"
        },
        "status": {
          "type": "string"
        },
        "accountID": {
          "format": "int32",
          "type": "integer"
        },
        "destinationBankID": {
          "format": "int32",
          "type": "integer"
        },
        "destinationBankAccountNo": {
          "type": "string"
        },
        "destinationBankAccountName": {
          "type": "string"
        },
        "destinationBankBranch": {
          "type": "string"
        },
        "notes": {
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "type": "string"
        },
        "updatedDate": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Money.CreateTransactionRequest": {
      "type": "object",
      "properties": {
        "transactionTypeID": {
          "format": "int32",
          "type": "integer"
        },
        "amount": {
          "format": "double",
          "type": "number"
        },
        "destinationBankID": {
          "format": "int32",
          "type": "integer"
        },
        "destinationBankAccountNo": {
          "type": "string"
        },
        "destinationBankAccountName": {
          "type": "string"
        },
        "destinationBankBranch": {
          "type": "string"
        },
        "otp": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Money.Bank": {
      "type": "object",
      "properties": {
        "bankID": {
          "format": "int32",
          "type": "integer"
        },
        "code": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "shortName": {
          "type": "string"
        },
        "swiftCode": {
          "type": "string"
        },
        "bin": {
          "type": "string"
        },
        "logo": {
          "type": "string"
        },
        "transferSupported": {
          "type": "boolean"
        },
        "lookupSupported": {
          "type": "boolean"
        },
        "fMarketBankID": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Money.BankAccount": {
      "type": "object",
      "properties": {
        "bankAccountID": {
          "format": "int32",
          "type": "integer"
        },
        "bankID": {
          "format": "int32",
          "type": "integer"
        },
        "userName": {
          "type": "string"
        },
        "bankBranch": {
          "type": "string"
        },
        "accountNo": {
          "type": "string"
        },
        "accountName": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Money.AddBankAccountRequest": {
      "type": "object",
      "properties": {
        "bankID": {
          "format": "int32",
          "type": "integer"
        },
        "accountNo": {
          "type": "string"
        },
        "accountName": {
          "type": "string"
        },
        "bankBranch": {
          "type": "string"
        },
        "otp": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Money.LookupBankAccountNameRequest": {
      "type": "object",
      "properties": {
        "bankID": {
          "format": "int32",
          "type": "integer"
        },
        "accountNo": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.InvestorAccount": {
      "type": "object",
      "properties": {
        "investorCode": {
          "type": "string"
        },
        "investorName": {
          "type": "string"
        },
        "brokerCode": {
          "type": "string"
        },
        "brokerName": {
          "type": "string"
        },
        "collaboratorCode": {
          "type": "string"
        },
        "collaboratorName": {
          "type": "string"
        },
        "currency": {
          "type": "string"
        },
        "sodBalance": {
          "format": "double",
          "type": "number"
        },
        "sodBalanceUSD": {
          "format": "double",
          "type": "number"
        },
        "changedAmount": {
          "format": "double",
          "type": "number"
        },
        "changedAmountUSD": {
          "format": "double",
          "type": "number"
        },
        "actualProfitVND": {
          "format": "double",
          "type": "number"
        },
        "actualProfitUSD": {
          "format": "double",
          "type": "number"
        },
        "initialRequiredMargin": {
          "format": "double",
          "type": "number"
        },
        "initialRequiredMarginUSD": {
          "format": "double",
          "type": "number"
        },
        "estimatedProfitVND": {
          "format": "double",
          "type": "number"
        },
        "estimatedProfitUSD": {
          "format": "double",
          "type": "number"
        },
        "netMargin": {
          "format": "double",
          "type": "number"
        },
        "netMarginUSD": {
          "format": "double",
          "type": "number"
        },
        "eodBalance": {
          "format": "double",
          "type": "number"
        },
        "eodBalanceUSD": {
          "format": "double",
          "type": "number"
        },
        "marginRatio": {
          "format": "double",
          "type": "number"
        },
        "depositProcessMethod": {
          "type": "string"
        },
        "transactionFee": {
          "format": "double",
          "type": "number"
        },
        "pendingTransactionFee": {
          "format": "double",
          "type": "number"
        },
        "interest": {
          "format": "double",
          "type": "number"
        },
        "initialRequiredMarginProvisional": {
          "format": "double",
          "type": "number"
        },
        "initialRequiredMarginProvisionalUSD": {
          "format": "double",
          "type": "number"
        },
        "availableMargin": {
          "format": "double",
          "type": "number"
        },
        "availableMarginProvisional": {
          "format": "double",
          "type": "number"
        },
        "currentBalance": {
          "format": "double",
          "type": "number"
        },
        "additionalMargin": {
          "format": "double",
          "type": "number"
        },
        "maxInitialRequiredMarginProvisional": {
          "format": "double",
          "type": "number"
        },
        "defaultPositionLimit": {
          "format": "int32",
          "type": "integer"
        },
        "totalProfitVND": {
          "format": "double",
          "type": "number"
        },
        "change": {
          "format": "double",
          "type": "number"
        },
        "changePercentage": {
          "format": "double",
          "type": "number"
        },
        "generalFee": {
          "format": "double",
          "type": "number"
        },
        "marginRatioColor": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.Order": {
      "type": "object",
      "properties": {
        "_id": {
          "type": "string"
        },
        "orderID": {
          "type": "string"
        },
        "partnerCode": {
          "type": "string"
        },
        "partnerName": {
          "type": "string"
        },
        "duration": {
          "type": "string"
        },
        "orderForm": {
          "type": "string"
        },
        "filledQty": {
          "format": "double",
          "type": "number"
        },
        "transactionFee": {
          "format": "double",
          "type": "number"
        },
        "memberFee": {
          "format": "double",
          "type": "number"
        },
        "brokerFee": {
          "format": "double",
          "type": "number"
        },
        "status": {
          "type": "string"
        },
        "inputMethod": {
          "type": "string"
        },
        "orderCode": {
          "type": "string"
        },
        "cqgOrderCode": {
          "type": "string"
        },
        "cqgStatus": {
          "format": "int32",
          "type": "integer"
        },
        "activeOrderCode": {
          "type": "string"
        },
        "activeCqgOrderCode": {
          "type": "string"
        },
        "investorCode": {
          "type": "string"
        },
        "investorName": {
          "type": "string"
        },
        "contractCode": {
          "type": "string"
        },
        "contractName": {
          "type": "string"
        },
        "commodityCode": {
          "type": "string"
        },
        "currency": {
          "type": "string"
        },
        "decimalFormat": {
          "format": "int32",
          "type": "integer"
        },
        "tickSize": {
          "format": "double",
          "type": "number"
        },
        "initialRequiredMargin": {
          "format": "double",
          "type": "number"
        },
        "exchange": {
          "type": "string"
        },
        "orderType": {
          "type": "string"
        },
        "side": {
          "type": "string"
        },
        "qty": {
          "format": "double",
          "type": "number"
        },
        "remainingQty": {
          "format": "double",
          "type": "number"
        },
        "limitPrice": {
          "format": "double",
          "type": "number"
        },
        "orderProperty": {
          "type": "string"
        },
        "initiator": {
          "type": "string"
        },
        "orderDatetime": {
          "format": "date-time",
          "type": "string"
        },
        "sessionDate": {
          "format": "date-time",
          "type": "string"
        },
        "accountId": {
          "type": "string"
        },
        "lastModifiedBy": {
          "type": "string"
        },
        "lastModifiedDatetime": {
          "format": "date-time",
          "type": "string"
        },
        "createdAt": {
          "format": "date-time",
          "type": "string"
        },
        "updatedAt": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.AccountPosition": {
      "type": "object",
      "properties": {
        "_id": {
          "type": "string"
        },
        "positionID": {
          "type": "string"
        },
        "investorCode": {
          "type": "string"
        },
        "investorName": {
          "type": "string"
        },
        "contractCode": {
          "type": "string"
        },
        "contractName": {
          "type": "string"
        },
        "currency": {
          "type": "string"
        },
        "decimalFormat": {
          "format": "int32",
          "type": "integer"
        },
        "open": {
          "$ref": "#/definitions/FireAnt.Api.Models.MXV.AccountPositionOpen"
        },
        "fills": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MXV.AccountPositionFill"
          }
        },
        "buyPosition": {
          "format": "double",
          "type": "number"
        },
        "sellPosition": {
          "format": "double",
          "type": "number"
        },
        "estimatedProfit": {
          "format": "double",
          "type": "number"
        },
        "averagePrice": {
          "format": "double",
          "type": "number"
        },
        "marketPrice": {
          "format": "double",
          "type": "number"
        },
        "estimatedProfitVND": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.MXV.AccountPositionOpen": {
      "type": "object",
      "properties": {
        "buyPosition": {
          "format": "double",
          "type": "number"
        },
        "sellPosition": {
          "format": "double",
          "type": "number"
        },
        "estimatedProfit": {
          "format": "double",
          "type": "number"
        },
        "averagePrice": {
          "format": "double",
          "type": "number"
        },
        "marketPrice": {
          "format": "double",
          "type": "number"
        },
        "estimatedProfitVND": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.MXV.AccountPositionFill": {
      "type": "object",
      "properties": {
        "_id": {
          "type": "string"
        },
        "positionFillID": {
          "type": "string"
        },
        "settled": {
          "type": "boolean"
        },
        "orderCode": {
          "type": "string"
        },
        "txnCode": {
          "type": "string"
        },
        "cqgOrderCode": {
          "type": "string"
        },
        "cqgTxnCode": {
          "type": "string"
        },
        "orderDatetime": {
          "format": "date-time",
          "type": "string"
        },
        "txnDatetime": {
          "format": "date-time",
          "type": "string"
        },
        "averagePrice": {
          "format": "double",
          "type": "number"
        },
        "transactionFee": {
          "format": "double",
          "type": "number"
        },
        "sellPosition": {
          "format": "double",
          "type": "number"
        },
        "buyPosition": {
          "format": "double",
          "type": "number"
        },
        "sessionDate": {
          "format": "date-time",
          "type": "string"
        },
        "estimatedProfit": {
          "format": "double",
          "type": "number"
        },
        "estimatedProfitVND": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.MXV.AccountRequest": {
      "type": "object",
      "properties": {
        "requestID": {
          "format": "int32",
          "type": "integer"
        },
        "accountID": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "email": {
          "type": "string"
        },
        "website": {
          "type": "string"
        },
        "phoneNumber": {
          "type": "string"
        },
        "dateOfBirth": {
          "format": "date-time",
          "type": "string"
        },
        "sex": {
          "type": "string"
        },
        "identityNumber": {
          "type": "string"
        },
        "issueDate": {
          "format": "date-time",
          "type": "string"
        },
        "expiredDate": {
          "format": "date-time",
          "type": "string"
        },
        "issueLocation": {
          "type": "string"
        },
        "identityAddress": {
          "type": "string"
        },
        "bankAccountNo": {
          "type": "string"
        },
        "bankID": {
          "format": "int32",
          "type": "integer"
        },
        "images": {
          "type": "array",
          "items": {
            "format": "int32",
            "type": "integer"
          }
        },
        "status": {
          "type": "string"
        },
        "investorCode": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.AccountRequestExtraInfo": {
      "type": "object",
      "properties": {
        "signatureImage": {
          "type": "string"
        },
        "bankAccountID": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Users.ChangePinCodeRequest": {
      "type": "object",
      "properties": {
        "newPinCode": {
          "type": "string"
        },
        "otp": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Users.UserVerificationInfo": {
      "type": "object",
      "properties": {
        "verificationID": {
          "type": "string"
        },
        "verificationToken": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVBrokerInfo": {
      "type": "object",
      "properties": {
        "brokerCode": {
          "description": "Mã môi giới",
          "type": "string"
        },
        "brokerName": {
          "description": "Tên môi giới",
          "type": "string"
        },
        "profileImage": {
          "description": "Ảnh hồ sơ",
          "type": "string"
        },
        "bio": {
          "description": "Giới thiệu về môi giới",
          "type": "string"
        },
        "userId": {
          "description": "Id trên FireAnt",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVCollaboratorInfo": {
      "type": "object",
      "properties": {
        "collaboratorCode": {
          "type": "string"
        },
        "collaboratorName": {
          "type": "string"
        },
        "brokerCode": {
          "type": "string"
        },
        "profileImage": {
          "type": "string"
        },
        "bio": {
          "type": "string"
        },
        "userId": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.CreateMXVAccountRequest": {
      "type": "object",
      "properties": {
        "accountNumber": {
          "description": "Số tài khoản CQG cơ sở (11 ký tự):\r\n- Để trống: Hệ thống tự động tạo khi mở tài khoản CQG\r\n- Cung cấp: Số tài khoản CQG có sẵn (VD: 648C1234567)",
          "type": "string"
        },
        "collaboratorCode": {
          "description": "Mã cộng tác viên (optional)",
          "type": "string"
        },
        "brokerCode": {
          "description": "Mã môi giới (optional)",
          "type": "string"
        },
        "accountType": {
          "description": "Loại hình tài khoản Future (BẮT BUỘC): \r\nC (NĐT cá nhân trong nước), E (NĐT tổ chức trong nước), \r\nF (NĐT cá nhân nước ngoài), I (NĐT tổ chức nước ngoài)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVCreateAccountResponse": {
      "description": "Response model for create investor account API",
      "type": "object",
      "properties": {
        "success": {
          "type": "boolean"
        },
        "message": {
          "type": "string"
        },
        "investorCode": {
          "type": "string"
        },
        "signingLink": {
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "type": "string"
        },
        "approvalId": {
          "description": "Approval ID from MXV system (used as RequestID)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVInvestorDetail": {
      "description": "Detailed investor account information",
      "type": "object",
      "properties": {
        "account": {
          "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVAccountStatus"
        },
        "contact": {
          "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVInvestorContact"
        },
        "createdDate": {
          "format": "int64",
          "type": "integer"
        },
        "status": {
          "type": "string"
        },
        "subInvestors": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "type": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVAccountStatus": {
      "description": "Account information within investor detail",
      "type": "object",
      "properties": {
        "availableBalance": {
          "format": "double",
          "type": "number"
        },
        "currency": {
          "type": "string"
        },
        "investorCode": {
          "type": "string"
        },
        "investorName": {
          "type": "string"
        },
        "marginDeficitInterestRate": {
          "format": "double",
          "type": "number"
        },
        "marginSurplusInterestRate": {
          "format": "double",
          "type": "number"
        },
        "totalProfitVND": {
          "format": "double",
          "type": "number"
        },
        "availableMarginProvisional": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVInvestorContact": {
      "description": "Contact information within investor detail",
      "type": "object",
      "properties": {
        "email": {
          "type": "string"
        },
        "fullName": {
          "type": "string"
        },
        "phoneNumber": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVInvestorAccountStatus": {
      "description": "Model for MXV Investor Accounts tracking in database\r\nSupports multiple account types: Future, Nano, MXV",
      "type": "object",
      "properties": {
        "userName": {
          "description": "User name (Primary Key)",
          "type": "string"
        },
        "futureInvestorCode": {
          "type": "string"
        },
        "futureStatus": {
          "type": "string"
        },
        "nanoInvestorCode": {
          "type": "string"
        },
        "nanoStatus": {
          "type": "string"
        },
        "mxvInvestorCode": {
          "type": "string"
        },
        "mxvStatus": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVMarginStatus": {
      "type": "object",
      "properties": {
        "investorCode": {
          "type": "string"
        },
        "currency": {
          "type": "string"
        },
        "depositProcessMethod": {
          "type": "string"
        },
        "sodBalance": {
          "format": "double",
          "type": "number"
        },
        "sodBalanceUSD": {
          "format": "double",
          "type": "number"
        },
        "eodBalance": {
          "format": "double",
          "type": "number"
        },
        "eodBalanceUSD": {
          "format": "double",
          "type": "number"
        },
        "currentBalance": {
          "format": "double",
          "type": "number"
        },
        "changedAmount": {
          "format": "double",
          "type": "number"
        },
        "changedAmountUSD": {
          "format": "double",
          "type": "number"
        },
        "change": {
          "format": "double",
          "type": "number"
        },
        "changePercentage": {
          "format": "double",
          "type": "number"
        },
        "availableMargin": {
          "format": "double",
          "type": "number"
        },
        "availableMarginProvisional": {
          "format": "double",
          "type": "number"
        },
        "initialRequiredMargin": {
          "format": "double",
          "type": "number"
        },
        "initialRequiredMarginUSD": {
          "format": "double",
          "type": "number"
        },
        "initialRequiredMarginProvisional": {
          "format": "double",
          "type": "number"
        },
        "initialRequiredMarginProvisionalUSD": {
          "format": "double",
          "type": "number"
        },
        "maxInitialRequiredMarginProvisional": {
          "format": "double",
          "type": "number"
        },
        "additionalMargin": {
          "format": "double",
          "type": "number"
        },
        "netMargin": {
          "format": "double",
          "type": "number"
        },
        "netMarginUSD": {
          "format": "double",
          "type": "number"
        },
        "marginRatio": {
          "format": "double",
          "type": "number"
        },
        "marginRatioColor": {
          "type": "string"
        },
        "actualProfitVND": {
          "format": "double",
          "type": "number"
        },
        "actualProfitUSD": {
          "format": "double",
          "type": "number"
        },
        "estimatedProfitVND": {
          "format": "double",
          "type": "number"
        },
        "estimatedProfitUSD": {
          "format": "double",
          "type": "number"
        },
        "totalProfitVND": {
          "format": "double",
          "type": "number"
        },
        "optionsActualProfitVND": {
          "format": "double",
          "type": "number"
        },
        "optionsActualProfitUSD": {
          "format": "double",
          "type": "number"
        },
        "optionsEstimatedProfitVND": {
          "format": "double",
          "type": "number"
        },
        "optionsEstimatedProfitUSD": {
          "format": "double",
          "type": "number"
        },
        "mvoVND": {
          "format": "double",
          "type": "number"
        },
        "mvoUSD": {
          "format": "double",
          "type": "number"
        },
        "transactionFee": {
          "format": "double",
          "type": "number"
        },
        "pendingTransactionFee": {
          "format": "double",
          "type": "number"
        },
        "generalFee": {
          "format": "double",
          "type": "number"
        },
        "interest": {
          "format": "double",
          "type": "number"
        },
        "premiumFeeVND": {
          "format": "double",
          "type": "number"
        },
        "premiumFeeUSD": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVMarginTransaction": {
      "type": "object",
      "properties": {
        "transactionId": {
          "type": "string"
        },
        "investorCode": {
          "type": "string"
        },
        "transactionType": {
          "type": "string"
        },
        "amount": {
          "format": "double",
          "type": "number"
        },
        "approvingType": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "pendingData": {
          "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVMarginTransactionPendingData"
        },
        "nestedObjInfo": {
          "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVMarginTransactionNestedObj"
        },
        "type": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVMarginTransactionPendingData": {
      "type": "object",
      "properties": {
        "queryValue": {
          "type": "string"
        },
        "action": {
          "type": "string"
        },
        "queryingValue": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVMarginTransactionNestedObj": {
      "type": "object",
      "properties": {
        "memberCode": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVDepositRequest": {
      "required": [
        "amount"
      ],
      "type": "object",
      "properties": {
        "amount": {
          "format": "double",
          "description": "Số tiền nạp (VNĐ)",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVWithdrawRequest": {
      "required": [
        "amount",
        "bankAccountID"
      ],
      "type": "object",
      "properties": {
        "amount": {
          "format": "double",
          "description": "Số tiền rút (VNĐ)",
          "type": "number"
        },
        "bankAccountID": {
          "format": "int32",
          "description": "ID tài khoản ngân hàng nhận tiền",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVTransferMoneyRequest": {
      "required": [
        "fromAccountType",
        "toAccountType",
        "amount"
      ],
      "type": "object",
      "properties": {
        "fromAccountType": {
          "format": "int32",
          "description": "Loại tài khoản nguồn: FUTURE, NANO, MXV (0 = FUTURE, 1 = NANO, 2 = MXV)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "toAccountType": {
          "format": "int32",
          "description": "Loại tài khoản đích: FUTURE, NANO, MXV (0 = FUTURE, 1 = NANO, 2 = MXV)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "amount": {
          "format": "double",
          "description": "Số tiền chuyển (VNĐ)",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVMoneyRequestItem": {
      "type": "object",
      "properties": {
        "investorCode": {
          "type": "string"
        },
        "time": {
          "type": "string"
        },
        "amount": {
          "format": "double",
          "type": "number"
        },
        "type": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "toInvestorCode": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVCommodityInfo": {
      "type": "object",
      "properties": {
        "commodityCode": {
          "type": "string"
        },
        "commodityName": {
          "type": "string"
        },
        "exchangeCode": {
          "type": "string"
        },
        "tradingUnit": {
          "type": "string"
        },
        "quotationUnit": {
          "type": "string"
        },
        "tickSize": {
          "format": "double",
          "type": "number"
        },
        "tickValue": {
          "format": "double",
          "type": "number"
        },
        "currency": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVContractInfo": {
      "type": "object",
      "properties": {
        "contractCode": {
          "type": "string"
        },
        "contractName": {
          "type": "string"
        },
        "commodityCode": {
          "type": "string"
        },
        "subType": {
          "type": "string"
        },
        "status": {
          "type": "string"
        },
        "firstTradingDate": {
          "type": "string"
        },
        "lastTradingDate": {
          "type": "string"
        },
        "expirationDate": {
          "type": "string"
        },
        "multiplier": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVOpenPosition": {
      "description": "Open Position (Vị thế mở) - API 4.5.10",
      "type": "object",
      "properties": {
        "investorCode": {
          "description": "Mã TKGD (Tài khoản giao dịch)",
          "type": "string"
        },
        "investorName": {
          "description": "Tên TKGD",
          "type": "string"
        },
        "contractCode": {
          "description": "Mã HĐ (Hợp đồng)",
          "type": "string"
        },
        "contractName": {
          "description": "Tên HĐ",
          "type": "string"
        },
        "open": {
          "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVOpenPositionDetail",
          "description": "Chi tiết vị thế mở"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVOpenPositionDetail": {
      "description": "Nested Open Position Details - Chi tiết vị thế mở",
      "type": "object",
      "properties": {
        "buyPosition": {
          "format": "double",
          "description": "Tổng KL Mua",
          "type": "number"
        },
        "sellPosition": {
          "format": "double",
          "description": "Tổng KL Bán",
          "type": "number"
        },
        "marketPrice": {
          "format": "double",
          "description": "Giá TT (Giá thị trường)",
          "type": "number"
        },
        "averagePrice": {
          "format": "double",
          "description": "Giá TB (Giá trung bình)",
          "type": "number"
        },
        "estimatedProfit": {
          "format": "double",
          "description": "Lãi lỗ dự kiến",
          "type": "number"
        },
        "estimatedProfitVND": {
          "format": "double",
          "description": "Lãi lỗ dự kiến (VND)",
          "type": "number"
        },
        "mvo": {
          "format": "double",
          "description": "MVO",
          "type": "number"
        },
        "mvoVND": {
          "format": "double",
          "description": "MVO (VND)",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVSettlePosition": {
      "description": "Vị thế tất toán (API 4.5.11)",
      "type": "object",
      "properties": {
        "investorCode": {
          "description": "Mã TKGD",
          "type": "string"
        },
        "investorName": {
          "description": "Tên TKGD",
          "type": "string"
        },
        "contractCode": {
          "description": "Mã HĐ (Hợp đồng)",
          "type": "string"
        },
        "contractName": {
          "description": "Tên HĐ",
          "type": "string"
        },
        "settlements": {
          "description": "Danh sách các giao dịch tất toán",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVSettlement"
          }
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVSettlement": {
      "description": "Chi tiết giao dịch tất toán",
      "type": "object",
      "properties": {
        "buyCqgOrderCode": {
          "description": "Mã GD mua (Mã giao dịch mua từ CQG)",
          "type": "string"
        },
        "sellCqgOrderCode": {
          "description": "Mã GD bán (Mã giao dịch bán từ CQG)",
          "type": "string"
        },
        "buyQty": {
          "format": "double",
          "description": "KL Mua (Khối lượng mua)",
          "type": "number"
        },
        "sellQty": {
          "format": "double",
          "description": "KL Bán (Khối lượng bán)",
          "type": "number"
        },
        "buyPrice": {
          "format": "double",
          "description": "Giá mua",
          "type": "number"
        },
        "sellPrice": {
          "format": "double",
          "description": "Giá bán",
          "type": "number"
        },
        "actualProfit": {
          "format": "double",
          "description": "Lãi lỗ thực tế",
          "type": "number"
        },
        "actualProfitVND": {
          "format": "double",
          "description": "Lãi lỗ thực tế (VND)",
          "type": "number"
        },
        "orderDatetime": {
          "format": "date-time",
          "description": "Thời gian đặt lệnh",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVTradeInfo": {
      "description": "Thông tin giao dịch",
      "type": "object",
      "properties": {
        "contractCode": {
          "description": "Mã hợp đồng",
          "type": "string"
        },
        "contractName": {
          "description": "Tên hợp đồng",
          "type": "string"
        },
        "side": {
          "description": "Chiều lệnh: BUY hoặc SELL",
          "type": "string"
        },
        "orderType": {
          "description": "Loại lệnh: MKT, LMT, STP, STPLMT",
          "type": "string"
        },
        "qty": {
          "format": "int32",
          "description": "Khối lượng đặt lệnh",
          "type": "integer"
        },
        "limitPrice": {
          "format": "double",
          "description": "Giá giới hạn",
          "type": "number"
        },
        "stopPrice": {
          "format": "double",
          "description": "Giá dừng",
          "type": "number"
        },
        "filledPrice": {
          "format": "double",
          "description": "Giá khớp",
          "type": "number"
        },
        "filledQty": {
          "format": "double",
          "description": "KL khớp",
          "type": "number"
        },
        "orderDatetime": {
          "format": "date-time",
          "description": "Thời gian đặt lệnh",
          "type": "string"
        },
        "transactions": {
          "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVTradeTransaction"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVTradeTransaction": {
      "description": "Thông tin giao dịch",
      "type": "object",
      "properties": {
        "status": {
          "description": "Trạng thái giao dịch: ACK_PLACE, FILL, ...",
          "type": "string"
        },
        "filledPrice": {
          "format": "double",
          "description": "Giá khớp",
          "type": "number"
        },
        "qty": {
          "format": "int32",
          "description": "Khối lượng khớp",
          "type": "integer"
        },
        "transactionFee": {
          "format": "double",
          "description": "Phí giao dịch",
          "type": "number"
        },
        "sessionDate": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVOrderInfo": {
      "type": "object",
      "properties": {
        "clientOrderCode": {
          "description": "ClientOrderId",
          "type": "string"
        },
        "orderCode": {
          "description": "OrderID",
          "type": "string"
        },
        "contractCode": {
          "description": "Mã HĐ",
          "type": "string"
        },
        "contractName": {
          "description": "Tên HĐ",
          "type": "string"
        },
        "side": {
          "description": "Mua/Bán",
          "type": "string"
        },
        "orderType": {
          "description": "Loại lệnh",
          "type": "string"
        },
        "qty": {
          "format": "double",
          "description": "KL đặt",
          "type": "number"
        },
        "limitPrice": {
          "format": "double",
          "description": "Giá giới hạn",
          "type": "number"
        },
        "stopPrice": {
          "format": "double",
          "description": "Giá dừng",
          "type": "number"
        },
        "filledPrice": {
          "format": "double",
          "description": "Giá khớp TB",
          "type": "number"
        },
        "filledQty": {
          "format": "double",
          "description": "KL khớp",
          "type": "number"
        },
        "orderDatetime": {
          "format": "date-time",
          "description": "Thời gian đặt lệnh",
          "type": "string"
        },
        "status": {
          "description": "Trạng thái",
          "type": "string"
        },
        "transactionFee": {
          "format": "double",
          "description": "Phí giao dịch",
          "type": "number"
        },
        "investorCode": {
          "description": "Mã nhà đầu tư",
          "type": "string"
        },
        "sessionDate": {
          "description": "Ngày phiên giao dịch",
          "type": "string"
        },
        "dataSource": {
          "description": "Nguồn dữ liệu (FIX, ...)",
          "type": "string"
        },
        "transactions": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVTradeTransaction"
          }
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVNewOrderRequest": {
      "description": "Request model for placing new order",
      "required": [
        "symbol",
        "side",
        "quantity"
      ],
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Mã hợp đồng (VD: CP2COH25)",
          "type": "string"
        },
        "side": {
          "description": "Phía giao dịch: 1 = Mua, 2 = Bán",
          "pattern": "^[12]$",
          "type": "string"
        },
        "quantity": {
          "format": "int32",
          "description": "Số lượng lệnh (phải > 0)",
          "maximum": 2147483647,
          "minimum": 1,
          "type": "integer"
        },
        "orderType": {
          "description": "Loại lệnh: 1 = Thị trường, 2 = Giới hạn, 3 = Dừng, 4 = Dừng-Giới hạn. Mặc định: 2",
          "pattern": "^[1234]$",
          "type": "string"
        },
        "timeInForce": {
          "description": "Thời gian hiệu lực của lệnh đặt: 0 = Trong ngày, 1 = GTC (Cho đến khi hủy), 6 = GTD (Cho đến ngày). Mặc định: 0",
          "pattern": "^[016]$",
          "type": "string"
        },
        "price": {
          "format": "double",
          "description": "Giá (bắt buộc cho lệnh GIỚI HẠN và DỪNG-GIỚI HẠN)",
          "type": "number"
        },
        "stopPrice": {
          "format": "double",
          "description": "Giá dừng (bắt buộc cho lệnh DỪNG và DỪNG-GIỚI HẠN)",
          "type": "number"
        },
        "expireDate": {
          "description": "Ngày hết hạn theo định dạng YYYYMMDD (bắt buộc cho lệnh GTD)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVOrderResponse": {
      "description": "Response model for order operations (place, cancel, replace)",
      "type": "object",
      "properties": {
        "success": {
          "description": "Indicates if the operation was successful",
          "type": "boolean"
        },
        "cl_ord_id": {
          "description": "ClOrdID (Client Order ID: ID tạo bởi TVKD)",
          "type": "string"
        },
        "order_id": {
          "description": "OrderID (ID tạo bởi sàn)",
          "type": "string"
        },
        "message": {
          "description": "Success message",
          "type": "string"
        },
        "error": {
          "description": "Câu lỗi DÀNH CHO KHÁCH HÀNG (app hiện nguyên văn). Lấy từ MXVUserMessages hoặc từ FIX service\r\n(đã là câu tiếng Việt cho KH từ 23/09/2026). Không bao giờ chứa mã tag FIX, mã HTTP, exception.",
          "type": "string"
        },
        "error_detail": {
          "description": "Nguyên văn kỹ thuật (tag 58 của Sở, lý do FIX service tự chặn, body lỗi HTTP…). Đọc được từ\r\nFIX service nhưng KHÔNG serialize ra app — chỉ ghi Event Log để đối soát.",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVReplaceOrderRequest": {
      "description": "Request model for replacing/modifying order",
      "required": [
        "symbol"
      ],
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Mã hợp đồng",
          "type": "string"
        },
        "newQuantity": {
          "format": "int32",
          "description": "KL mới",
          "maximum": 2147483647,
          "minimum": 1,
          "type": "integer"
        },
        "orderId": {
          "description": "OrderID",
          "type": "string"
        },
        "newPrice": {
          "format": "double",
          "description": "Giá mới",
          "type": "number"
        },
        "newStopPrice": {
          "format": "double",
          "description": "Giá dừng mới",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVProductTraceabilityRequest": {
      "description": "Request từ app FireAnt gửi lên backend khi quét QR trên thỏi Bạc.\r\nApp gửi nguyên nội dung quét được (thường là URL dạng\r\nhttps://sp.phuquygroup.vn/Home/VM?id=CBETDRX12); backend tự tách mã sản phẩm.",
      "type": "object",
      "properties": {
        "qrContent": {
          "description": "Nội dung đầy đủ đọc được từ QR code (URL hoặc trực tiếp serial/id).",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVPhysicalDeliveryResponse[FireAnt.Api.Models.MXV.MXVTraceabilityProduct]": {
      "description": "Wrapper response của MXV REST API cho các nghiệp vụ giao nhận hàng vật chất.\r\nKhác với MXVResponse&lt;T&gt; (dùng status/message/data),\r\ncác API section 3.3/3.4 trả về success/code/msg/confirmationCode/payload.",
      "type": "object",
      "properties": {
        "time": {
          "description": "Thời điểm server xử lý",
          "type": "string"
        },
        "success": {
          "description": "true = thành công, false = lỗi",
          "type": "boolean"
        },
        "code": {
          "description": "Mã kết quả: \"0\" = thành công",
          "type": "string"
        },
        "msg": {
          "description": "Thông báo kết quả (VD: \"[0]: Thành công!\")",
          "type": "string"
        },
        "confirmationCode": {
          "description": "Mã xác nhận đăng ký do MXV cấp (top-level field).\r\nEnd user cần lưu lại để dùng cho API huỷ và truy vấn.",
          "type": "string"
        },
        "payload": {
          "description": "Dữ liệu chi tiết (array, mỗi phần tử chứa confirmationcode)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVTraceabilityProduct"
          }
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVTraceabilityProduct": {
      "description": "Thông tin sản phẩm trả về từ API truy xuất nguồn gốc của MXV\r\n(payload của POST /api/v1/traceability/product).",
      "type": "object",
      "properties": {
        "qrCode": {
          "description": "Mã QR do nhà sản xuất cấp (VD: 0000541H3N1)",
          "type": "string"
        },
        "serial": {
          "description": "Serial sản phẩm (VD: CBETDRX12)",
          "type": "string"
        },
        "productName": {
          "description": "Tên sản phẩm (VD: Bạc Thanh Long Phú Quý 999 1KG -M)",
          "type": "string"
        },
        "productCode": {
          "description": "Mã sản phẩm (VD: BTL1KGM)",
          "type": "string"
        },
        "material": {
          "description": "Chất liệu (VD: Bạc 999)",
          "type": "string"
        },
        "purity": {
          "format": "int32",
          "description": "Hàm lượng (VD: 999)",
          "type": "integer"
        },
        "weightChi": {
          "description": "Khối lượng quy đổi (chỉ)",
          "type": "string"
        },
        "weightGram": {
          "description": "Khối lượng (VD: 1 kg)",
          "type": "string"
        },
        "origin": {
          "description": "Xuất xứ (VD: Việt Nam)",
          "type": "string"
        },
        "manufacturedAt": {
          "format": "date-time",
          "description": "Ngày xuất xưởng",
          "type": "string"
        },
        "inspectedAt": {
          "format": "date-time",
          "description": "Ngày kiểm định",
          "type": "string"
        },
        "inspectionUnit": {
          "description": "Đơn vị kiểm định (VD: VGVLab)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.PhysicalDeliveryRegisterRequest": {
      "description": "Request đăng ký giao hàng vật chất (bên bán) - API 3.3.1\r\nGiai đoạn FND -&gt; LND",
      "type": "object",
      "properties": {
        "contract": {
          "description": "Mã hợp đồng kỳ hạn (VD: SIV0326)",
          "type": "string"
        },
        "quantity": {
          "format": "int32",
          "description": "Số lượng lot đăng ký giao (phải &gt; 0)",
          "type": "integer"
        },
        "email": {
          "description": "Email liên hệ (chỉ điền nếu khác với thông tin trên tài khoản giao dịch)",
          "type": "string"
        },
        "phone": {
          "description": "Số điện thoại liên hệ (chỉ điền nếu khác với thông tin trên tài khoản giao dịch)",
          "type": "string"
        },
        "authorization": {
          "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVAuthorizationInfo",
          "description": "Thông tin người uỷ quyền nhận lại Bạc (trong trường hợp bên bán đến nhận lại Bạc).\r\nChỉ cung cấp khi KH đã có mã CIF tại kho MSB chỉ định."
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVAuthorizationInfo": {
      "description": "Thông tin người được uỷ quyền giao/nhận Bạc tại kho MSB.\r\nKH chỉ uỷ quyền được khi đã có mã CIF tại kho chỉ định.",
      "type": "object",
      "properties": {
        "fullName": {
          "description": "Họ và tên đầy đủ",
          "type": "string"
        },
        "dateOfBirth": {
          "description": "Ngày sinh (YYYYMMDD)",
          "type": "string"
        },
        "idNumber": {
          "description": "Số CCCD/CMND/Hộ chiếu",
          "type": "string"
        },
        "idIssueDate": {
          "description": "Ngày cấp CCCD",
          "type": "string"
        },
        "idIssuePlace": {
          "description": "Nơi cấp CCCD",
          "type": "string"
        },
        "address": {
          "description": "Địa chỉ",
          "type": "string"
        },
        "idImageFront": {
          "description": "Ảnh CCCD mặt trước (base64 string)",
          "type": "string"
        },
        "idImageBack": {
          "description": "Ảnh CCCD mặt sau (base64 string)",
          "type": "string"
        },
        "email": {
          "description": "Email",
          "type": "string"
        },
        "phone": {
          "description": "Số điện thoại",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVPhysicalDeliveryResponse[FireAnt.Api.Models.MXV.MXVPhysicalDeliveryPayload]": {
      "description": "Wrapper response của MXV REST API cho các nghiệp vụ giao nhận hàng vật chất.\r\nKhác với MXVResponse&lt;T&gt; (dùng status/message/data),\r\ncác API section 3.3/3.4 trả về success/code/msg/confirmationCode/payload.",
      "type": "object",
      "properties": {
        "time": {
          "description": "Thời điểm server xử lý",
          "type": "string"
        },
        "success": {
          "description": "true = thành công, false = lỗi",
          "type": "boolean"
        },
        "code": {
          "description": "Mã kết quả: \"0\" = thành công",
          "type": "string"
        },
        "msg": {
          "description": "Thông báo kết quả (VD: \"[0]: Thành công!\")",
          "type": "string"
        },
        "confirmationCode": {
          "description": "Mã xác nhận đăng ký do MXV cấp (top-level field).\r\nEnd user cần lưu lại để dùng cho API huỷ và truy vấn.",
          "type": "string"
        },
        "payload": {
          "description": "Dữ liệu chi tiết (array, mỗi phần tử chứa confirmationcode)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVPhysicalDeliveryPayload"
          }
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVPhysicalDeliveryPayload": {
      "description": "Payload item trả về từ các API đăng ký/huỷ giao nhận vật chất.\r\nLưu ý: MXV trả về tên field là \"confirmationcode\" (chữ thường).",
      "type": "object",
      "properties": {
        "confirmationcode": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.PhysicalCancelRequest": {
      "description": "Request huỷ đăng ký giao hoặc nhận hàng vật chất\r\nChỉ thực hiện được trong giai đoạn FND -&gt; LND",
      "type": "object",
      "properties": {
        "refConfirmationCode": {
          "description": "Mã xác nhận đăng ký do MXV trả về (confirmationCode) khi đăng ký thành công.\r\nEnd user cần lưu lại giá trị này sau mỗi lần đăng ký.",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.PhysicalReceiveRegisterRequest": {
      "description": "Request đăng ký nhận hàng vật chất (bên mua) - API 3.3.3\r\nGiai đoạn FND -&gt; LND",
      "type": "object",
      "properties": {
        "area": {
          "description": "Khu vực nhận hàng: \"HN\" (Hà Nội) hoặc \"HCM\" (TP HCM)",
          "type": "string"
        },
        "contract": {
          "description": "Mã hợp đồng kỳ hạn (VD: SIV0326)",
          "type": "string"
        },
        "quantity": {
          "format": "int32",
          "description": "Số lượng lot đăng ký nhận (phải &gt; 0)",
          "type": "integer"
        },
        "email": {
          "description": "Email liên hệ (chỉ điền nếu khác với thông tin trên tài khoản giao dịch)",
          "type": "string"
        },
        "phone": {
          "description": "Số điện thoại liên hệ (chỉ điền nếu khác với thông tin trên tài khoản giao dịch)",
          "type": "string"
        },
        "authorization": {
          "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVAuthorizationInfo",
          "description": "Thông tin người uỷ quyền đến kho nhận Bạc (nếu có)"
        }
      }
    },
    "FireAnt.Api.Models.MXV.PhysicalDeliveryDepositRequest": {
      "description": "Request đăng ký lưu ký Bạc vào kho MSB (bên bán) - API 3.3.5\r\nĐộc lập với đăng ký giao nhận. Mỗi lần tạo ra 1 mã giao hàng riêng.\r\nGiai đoạn FND -&gt; LND",
      "type": "object",
      "properties": {
        "warehouse": {
          "description": "Mã kho nhận Bạc: \"KQ.HNI.01\" (MSB chi nhánh Đống Đa) hoặc \"KQ.HCM.01\" (MSB chi nhánh TP.Hồ Chí Minh)",
          "type": "string"
        },
        "contract": {
          "description": "Mã hợp đồng kỳ hạn (VD: SIV0326)",
          "type": "string"
        },
        "quantity": {
          "format": "int32",
          "description": "Số lượng lot đăng ký giao vào kho (phải &gt; 0)",
          "type": "integer"
        },
        "deliveryDate": {
          "description": "Ngày đăng ký giao Bạc vào kho (YYYYMMDD, trong khoảng FND -&gt; LND)",
          "type": "string"
        },
        "email": {
          "description": "Email liên hệ (chỉ điền nếu khác với thông tin trên tài khoản giao dịch)",
          "type": "string"
        },
        "phone": {
          "description": "Số điện thoại liên hệ (chỉ điền nếu khác với thông tin trên tài khoản giao dịch)",
          "type": "string"
        },
        "authorization": {
          "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVAuthorizationInfo",
          "description": "Thông tin người uỷ quyền giao Bạc tại kho MSB (nếu có)"
        }
      }
    },
    "FireAnt.Api.Models.MXV.PhysicalDeliveryDesignatedRequest": {
      "description": "Request xác nhận giao hàng chỉ định\r\nThời hạn: T+1 -&gt; T+5 sau ngày giao dịch cuối cùng",
      "type": "object",
      "properties": {
        "deliveryCode": {
          "description": "Mã lưu ký hàng chỉ định do MXV gửi qua WebSocket event (deliveryStatus).",
          "type": "string"
        },
        "warehouse": {
          "description": "Mã kho giao hàng: \"KQ.HNI.01\" hoặc \"KQ.HCM.01\"",
          "type": "string"
        },
        "rejectedBySender": {
          "description": "Lựa chọn của bên bán: \"0\" = Đồng ý tự thực hiện giao nhận, \"1\" = Uỷ quyền TTBT thực hiện thay (chịu phạt theo quy định MXV)",
          "type": "string"
        },
        "deliveryDate": {
          "description": "Ngày đăng ký giao Bạc (YYYYMMDD)",
          "type": "string"
        },
        "email": {
          "description": "Email liên hệ (chỉ điền nếu khác với thông tin trên tài khoản giao dịch)",
          "type": "string"
        },
        "phone": {
          "description": "Số điện thoại liên hệ (chỉ điền nếu khác với thông tin trên tài khoản giao dịch)",
          "type": "string"
        },
        "authorization": {
          "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVAuthorizationInfo",
          "description": "Thông tin người uỷ quyền giao Bạc tại kho MSB (nếu có)"
        }
      }
    },
    "FireAnt.Api.Models.MXV.PhysicalReceiveDesignatedRequest": {
      "description": "Request xác nhận nhận hàng chỉ định (bên mua bị TTBT chỉ định)\r\nXác nhận thành công khi ký quỹ khả dụng &gt;= ký quỹ giao nhận hàng hoá.\r\nThời hạn: T+1 -&gt; T+5 sau ngày giao dịch cuối cùng",
      "type": "object",
      "properties": {
        "pairingCode": {
          "description": "Mã nhận hàng chỉ định do MXV gửi qua WebSocket event (warehouseReceiptStatus).",
          "type": "string"
        },
        "rejectedByReceiver": {
          "description": "Lựa chọn của bên mua: \"0\" = Đồng ý tự thực hiện giao nhận, \"1\" = Uỷ quyền TTBT thực hiện thay (chịu phạt theo quy định MXV)",
          "type": "string"
        },
        "email": {
          "description": "Email liên hệ (chỉ điền nếu khác với thông tin trên tài khoản giao dịch)",
          "type": "string"
        },
        "phone": {
          "description": "Số điện thoại liên hệ (chỉ điền nếu khác với thông tin trên tài khoản giao dịch)",
          "type": "string"
        },
        "authorization": {
          "$ref": "#/definitions/FireAnt.Api.Models.MXV.MXVAuthorizationInfo",
          "description": "Thông tin người uỷ quyền đến kho nhận Bạc (nếu có)"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVPhysicalDeliveryRecord": {
      "description": "Bản ghi lịch sử đăng ký giao/nhận vật chất lưu trong bảng _MXVPhysicalDeliveries.\r\nTrả về từ SP mxv_GetPhysicalDeliveries và mxv_GetPhysicalDeliveryByCode.",
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "userName": {
          "type": "string"
        },
        "investorCode": {
          "type": "string"
        },
        "type": {
          "description": "DELIVERY | RECEIVE | DEPOSIT",
          "type": "string"
        },
        "action": {
          "description": "REGISTER | DESIGNATED",
          "type": "string"
        },
        "contract": {
          "type": "string"
        },
        "quantity": {
          "format": "int32",
          "type": "integer"
        },
        "area": {
          "description": "HN | HCM (chỉ có khi Type = RECEIVE)",
          "type": "string"
        },
        "warehouse": {
          "description": "HN | HCM (chỉ có khi Type = DEPOSIT)",
          "type": "string"
        },
        "deliveryDate": {
          "description": "Ngày dự kiến giao Bạc (YYYYMMDD)",
          "type": "string"
        },
        "refRequestCode": {
          "description": "Mã TVKD tự sinh từ backend FireAnt",
          "type": "string"
        },
        "refConfirmationCode": {
          "description": "Mã MXV cấp khi duyệt thành công - dùng để huỷ/truy vấn",
          "type": "string"
        },
        "deliveryCode": {
          "description": "Mã giao hàng (có sau khi TTBT ghép cặp, bên bán dùng cho API designated)",
          "type": "string"
        },
        "pairingCode": {
          "description": "Mã nhận hàng (có sau khi TTBT ghép cặp, bên mua dùng cho API designated)",
          "type": "string"
        },
        "status": {
          "description": "P=Chờ duyệt | A=Đã duyệt | R=Từ chối | D=Đã giao | RV=Đã nhận",
          "type": "string"
        },
        "rejectReason": {
          "type": "string"
        },
        "transactionDate": {
          "type": "string"
        },
        "createdAt": {
          "format": "date-time",
          "type": "string"
        },
        "updatedAt": {
          "format": "date-time",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVPhysicalRegistrationStatus": {
      "description": "Trạng thái đăng ký giao/nhận hàng vật chất - payload của API 3.4.4\r\nGET /api/v1/am/investors/physical-register",
      "type": "object",
      "properties": {
        "refTransactionDate": {
          "description": "Ngày phát sinh yêu cầu giao nhận từ thành viên",
          "type": "string"
        },
        "refRequestCode": {
          "description": "Mã yêu cầu giao nhận của TVKD",
          "type": "string"
        },
        "refConfirmationCode": {
          "description": "Mã xác nhận yêu cầu giao nhận của MXV",
          "type": "string"
        },
        "side": {
          "description": "Hướng: \"1\" = Nhận, \"2\" = Giao",
          "type": "string"
        },
        "quanlity": {
          "description": "Số lượng đăng ký (lot)",
          "type": "string"
        },
        "contract": {
          "description": "Mã hợp đồng",
          "type": "string"
        },
        "approveDate": {
          "description": "Ngày duyệt yêu cầu đăng ký tại MXV",
          "type": "string"
        },
        "approveTxnum": {
          "description": "Mã giao dịch duyệt/từ chối tại MXV",
          "type": "string"
        },
        "requestStatus": {
          "description": "PENDING | APPROVED | DISAPPROVED | PENDING_CANCELLED |\r\nCANCELLED | EXPIRED",
          "type": "string"
        },
        "rejectReason": {
          "description": "Lý do từ chối (null nếu trạng thái là Chờ Duyệt hoặc Hoàn Tất)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVDepositRegistrationStatus": {
      "description": "Trạng thái đăng ký lưu ký vật chất - payload của API 3.4.5\r\nGET /api/v1/am/investors/deposit-register",
      "type": "object",
      "properties": {
        "refTransactionDate": {
          "type": "string"
        },
        "refRequestCode": {
          "type": "string"
        },
        "refConfirmationCode": {
          "type": "string"
        },
        "side": {
          "description": "Hướng giao hàng: \"2\" = Giao",
          "type": "string"
        },
        "contract": {
          "type": "string"
        },
        "deliveryCode": {
          "type": "string"
        },
        "quantity": {
          "type": "string"
        },
        "approveDate": {
          "type": "string"
        },
        "approveTxnum": {
          "type": "string"
        },
        "requestStatus": {
          "description": "PENDING | DISAPPROVED | PENDING_SEND | REGISTERED | DELIVERED |\r\nREJECTED | PENDING_CANCELLED | CANCELLED | EXPIRED | DESIGNATED |\r\nDESIGNATED_REJECTED | VIOLATED",
          "type": "string"
        },
        "rejectReason": {
          "type": "string"
        },
        "deliveredByCCP": {
          "description": "\"1\" = CCP thực hiện, \"0\" = cá nhân thực hiện",
          "type": "string"
        },
        "price": {
          "description": "Mức giá bù trừ khi CCP thực hiện",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.MXV.MXVPhysicalTransactionStatus": {
      "description": "Trạng thái nhận hàng vật chất tại kho - payload của API 3.4.6\r\nGET /api/v1/am/investors/physical-transaction",
      "type": "object",
      "properties": {
        "refTransactionDate": {
          "description": "Ngày phát sinh yêu cầu giao nhận từ thành viên",
          "type": "string"
        },
        "refRequestCode": {
          "description": "Mã yêu cầu giao nhận của TVKD",
          "type": "string"
        },
        "refConfirmationCode": {
          "description": "Mã xác nhận yêu cầu giao nhận của MXV",
          "type": "string"
        },
        "side": {
          "description": "Hướng: \"1\" = Nhận, \"2\" = Giao",
          "type": "string"
        },
        "quantity": {
          "type": "string"
        },
        "contract": {
          "description": "Mã hợp đồng",
          "type": "string"
        },
        "deliveryCode": {
          "description": "Mã lưu ký hàng (deliveryCode)",
          "type": "string"
        },
        "pairingCode": {
          "description": "Mã nhận hàng (pairingCode)",
          "type": "string"
        },
        "warehouse": {
          "type": "string"
        },
        "fromDate": {
          "type": "string"
        },
        "toDate": {
          "type": "string"
        },
        "approveDate": {
          "description": "Ngày duyệt tại MXV",
          "type": "string"
        },
        "approveTxnum": {
          "description": "Mã giao dịch tại MXV",
          "type": "string"
        },
        "requestStatus": {
          "description": "PENDING_SEND | REGISTERED | RECEIVED | CANCELLED |\r\nPENDING_CANCELLED | REJECTED | DESIGNATED |\r\nDESIGNATED_REJECTED | VIOLATED",
          "type": "string"
        },
        "rejectReason": {
          "description": "Lý do từ chối (null nếu trạng thái là Chờ Duyệt hoặc Hoàn Tất)",
          "type": "string"
        },
        "receivedByCCP": {
          "description": "\"1\" = CCP thực hiện, \"0\" = cá nhân thực hiện",
          "type": "string"
        },
        "price": {
          "description": "Mức giá bù trừ khi CCP thực hiện",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateChangeRequest": {
      "description": "Thông tin mẫu khi tạo (part \"metadata\" của multipart, name bắt buộc) hoặc cập nhật (PUT, JSON).\r\nKhi cập nhật: trường null = giữ nguyên; chuỗi rỗng / mảng rỗng = xóa giá trị (trừ name).",
      "type": "object",
      "properties": {
        "name": {
          "description": "Tên mẫu (bắt buộc khi tạo, tối đa 200 ký tự)",
          "type": "string"
        },
        "description": {
          "description": "Mô tả (tối đa 2000 ký tự)",
          "type": "string"
        },
        "categoryCode": {
          "description": "Mã danh mục đang bật (mặc định khi tạo: other)",
          "type": "string"
        },
        "tags": {
          "description": "Tag: tối đa 10 tag, mỗi tag tối đa 30 ký tự, không chứa dấu phẩy (server chuyển chữ thường, bỏ trùng)",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "language": {
          "description": "Ngôn ngữ (vi mặc định, en...)",
          "type": "string"
        },
        "visibility": {
          "format": "int32",
          "description": "Chế độ chia sẻ: 0 Private (mặc định khi tạo), 1 Link (tự tạo link nếu chưa có), 2 Public (người dùng thường: chờ duyệt).\r\nMẫu chính thức do admin tạo luôn là Public. (0 = Private, 1 = Link, 2 = Public)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "parameters": {
          "description": "Tham số (tối đa 20)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.ExcelTemplates.ExcelTemplateParameter"
          }
        },
        "functions": {
          "description": "Các hàm dùng trong mẫu (FA.QUOTE, FA.RATIO...), tối đa 50",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sheetNames": {
          "description": "Tên các sheet (tối đa 100 sheet x 31 ký tự)",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateShareItem": {
      "description": "Một người dùng được chia sẻ trực tiếp mẫu",
      "type": "object",
      "properties": {
        "userName": {
          "description": "Tên đăng nhập",
          "type": "string"
        },
        "name": {
          "description": "Tên hiển thị (null nếu không tra được)",
          "type": "string"
        },
        "avatar": {
          "description": "URL ảnh đại diện (null nếu không tra được)",
          "type": "string"
        },
        "sharedDate": {
          "format": "date-time",
          "description": "Thời điểm chia sẻ",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateShareRequest": {
      "description": "Yêu cầu chia sẻ mẫu cho danh sách người dùng (theo tên đăng nhập)",
      "type": "object",
      "properties": {
        "userNames": {
          "description": "Tên đăng nhập của người nhận (phải tồn tại, không gồm chính bạn; tối đa 100 / lần)",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "FireAnt.Api.Models.ExcelTemplates.ExcelTemplateLinkResult": {
      "description": "Link chia sẻ của mẫu",
      "type": "object",
      "properties": {
        "token": {
          "description": "Token 128-bit (base64url, 22 ký tự) - truyền vào tham số token của các API mẫu",
          "type": "string"
        },
        "url": {
          "description": "URL chia sẻ: {ExcelTemplateShareBaseUrl}/{token}",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.OfficeLinks.OfficeLinkPagedResult": {
      "description": "Kết quả GET office/links: { total, items }",
      "type": "object",
      "properties": {
        "total": {
          "format": "int32",
          "description": "Tổng số liên kết thỏa điều kiện tìm kiếm",
          "type": "integer"
        },
        "items": {
          "description": "Liên kết của trang hiện tại (mới publish trước)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.OfficeLinks.OfficeLinkItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.OfficeLinks.OfficeLinkItem": {
      "description": "Một liên kết dữ liệu Office (Excel → Word / PowerPoint) của người dùng hiện tại - không kèm payload\r\n(danh sách, kết quả tạo / publish)",
      "type": "object",
      "properties": {
        "id": {
          "description": "ID công khai của liên kết: 22 ký tự base64url (A-Z a-z 0-9 _ -), phân biệt hoa thường",
          "type": "string"
        },
        "name": {
          "description": "Tên liên kết",
          "type": "string"
        },
        "kind": {
          "description": "Loại: table | chart | value",
          "type": "string"
        },
        "sourceApp": {
          "description": "Ứng dụng nguồn: excel | word | powerpoint",
          "type": "string"
        },
        "sourceDocument": {
          "description": "Tài liệu nguồn (tên / URL workbook), null nếu không có",
          "type": "string"
        },
        "sourceRef": {
          "description": "Vị trí nguồn: \"Sheet1!A1:F12\" hoặc tên biểu đồ, null nếu không có",
          "type": "string"
        },
        "version": {
          "format": "int32",
          "description": "Phiên bản snapshot: 1 khi tạo, tăng 1 mỗi lần publish (PUT)",
          "type": "integer"
        },
        "createdAt": {
          "format": "date-time",
          "description": "Thời điểm tạo (UTC)",
          "type": "string"
        },
        "updatedAt": {
          "format": "date-time",
          "description": "Thời điểm publish gần nhất (UTC)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.OfficeLinks.OfficeLinkDetail": {
      "description": "Liên kết kèm snapshot mới nhất (GET office/links/{id})",
      "type": "object",
      "properties": {
        "payload": {
          "description": "Snapshot đúng như add-in đã publish (JSON object, không phải chuỗi)",
          "type": "object"
        },
        "id": {
          "description": "ID công khai của liên kết: 22 ký tự base64url (A-Z a-z 0-9 _ -), phân biệt hoa thường",
          "type": "string"
        },
        "name": {
          "description": "Tên liên kết",
          "type": "string"
        },
        "kind": {
          "description": "Loại: table | chart | value",
          "type": "string"
        },
        "sourceApp": {
          "description": "Ứng dụng nguồn: excel | word | powerpoint",
          "type": "string"
        },
        "sourceDocument": {
          "description": "Tài liệu nguồn (tên / URL workbook), null nếu không có",
          "type": "string"
        },
        "sourceRef": {
          "description": "Vị trí nguồn: \"Sheet1!A1:F12\" hoặc tên biểu đồ, null nếu không có",
          "type": "string"
        },
        "version": {
          "format": "int32",
          "description": "Phiên bản snapshot: 1 khi tạo, tăng 1 mỗi lần publish (PUT)",
          "type": "integer"
        },
        "createdAt": {
          "format": "date-time",
          "description": "Thời điểm tạo (UTC)",
          "type": "string"
        },
        "updatedAt": {
          "format": "date-time",
          "description": "Thời điểm publish gần nhất (UTC)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.Order": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "instrument": {
          "type": "string"
        },
        "instrumentItem": {
          "$ref": "#/definitions/FireAnt.Api.Models.Trading.InstrumentItem"
        },
        "qty": {
          "format": "double",
          "type": "number"
        },
        "qtyType": {
          "format": "int32",
          "type": "integer"
        },
        "side": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "filledQty": {
          "format": "double",
          "type": "number"
        },
        "avgPrice": {
          "format": "double",
          "type": "number"
        },
        "limitPrice": {
          "format": "double",
          "type": "number"
        },
        "stopPrice": {
          "format": "double",
          "type": "number"
        },
        "lastModified": {
          "format": "double",
          "type": "number"
        },
        "status": {
          "type": "string"
        },
        "message": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.CreateOrderRequest": {
      "type": "object",
      "properties": {
        "instrument": {
          "type": "string"
        },
        "qty": {
          "format": "double",
          "type": "number"
        },
        "qtyType": {
          "format": "int32",
          "type": "integer"
        },
        "side": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "limitPrice": {
          "format": "double",
          "type": "number"
        },
        "stopPrice": {
          "format": "double",
          "type": "number"
        },
        "stopLoss": {
          "format": "double",
          "type": "number"
        },
        "takeProfit": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Trading.EditOrderRequest": {
      "type": "object",
      "properties": {
        "qty": {
          "format": "double",
          "type": "number"
        },
        "qtyType": {
          "format": "int32",
          "type": "integer"
        },
        "limitPrice": {
          "format": "double",
          "type": "number"
        },
        "stopPrice": {
          "format": "double",
          "type": "number"
        },
        "stopLoss": {
          "format": "double",
          "type": "number"
        },
        "takeProfit": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Users.RegisterSmartOTPRequest": {
      "type": "object",
      "properties": {
        "smsOtp": {
          "type": "string"
        },
        "deviceId": {
          "type": "string"
        },
        "deviceName": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Trading.Position": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "instrument": {
          "type": "string"
        },
        "instrumentItem": {
          "$ref": "#/definitions/FireAnt.Api.Models.Trading.InstrumentItem"
        },
        "qty": {
          "format": "double",
          "type": "number"
        },
        "side": {
          "type": "string"
        },
        "avgPrice": {
          "format": "double",
          "type": "number"
        },
        "unrealizedPl": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Posts.LinkPreview": {
      "type": "object",
      "properties": {
        "title": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "image": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Posts.PostSymbolsRequest": {
      "description": "Yêu cầu đăng/sửa bài",
      "type": "object",
      "properties": {
        "title": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "description": {
          "description": "Mô tả",
          "type": "string"
        },
        "content": {
          "description": "Nội dung",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Posts.PopularSymbol": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "points": {
          "format": "int64",
          "type": "integer"
        },
        "color": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Reports.ReportInfo": {
      "type": "object",
      "properties": {
        "reportID": {
          "format": "int32",
          "type": "integer"
        },
        "categoryID": {
          "format": "int32",
          "type": "integer"
        },
        "sourceID": {
          "format": "int32",
          "type": "integer"
        },
        "sourceName": {
          "type": "string"
        },
        "sectorID": {
          "format": "int32",
          "type": "integer"
        },
        "symbol": {
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "description": {
          "type": "string"
        },
        "date": {
          "format": "date-time",
          "type": "string"
        },
        "pages": {
          "format": "int32",
          "type": "integer"
        },
        "size": {
          "format": "int32",
          "type": "integer"
        },
        "fileName": {
          "type": "string"
        },
        "fileExtension": {
          "type": "string"
        },
        "language": {
          "type": "string"
        },
        "downloads": {
          "format": "int32",
          "type": "integer"
        },
        "isHot": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Reports.SearchReportResult": {
      "type": "object",
      "properties": {
        "total": {
          "format": "int32",
          "type": "integer"
        },
        "reports": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Reports.ReportInfo"
          }
        }
      }
    },
    "FireAnt.Api.Models.Reports.ReportCategoryCount": {
      "type": "object",
      "properties": {
        "categoryID": {
          "format": "int32",
          "type": "integer"
        },
        "total": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Reports.CategoryInfo": {
      "type": "object",
      "properties": {
        "categoryID": {
          "format": "int32",
          "type": "integer"
        },
        "title": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Reports.SourceInfo": {
      "type": "object",
      "properties": {
        "sourceID": {
          "format": "int32",
          "type": "integer"
        },
        "shortName": {
          "type": "string"
        },
        "name": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Rooms.RoomDetail": {
      "type": "object",
      "properties": {
        "info": {
          "$ref": "#/definitions/FireAnt.Api.Models.Rooms.Room"
        },
        "totalMembers": {
          "format": "int32",
          "type": "integer"
        },
        "totalPosts": {
          "format": "int32",
          "type": "integer"
        },
        "totalRequests": {
          "format": "int32",
          "type": "integer"
        },
        "totalBlockedUsers": {
          "format": "int32",
          "type": "integer"
        },
        "totalPendingPosts": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Rooms.RoomUpdateRequest": {
      "description": "Yêu cầu sửa thông tin room",
      "type": "object",
      "properties": {
        "name": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "description": {
          "description": "Mô tả",
          "type": "string"
        },
        "topics": {
          "description": "Các chủ đề liên quan đến nhóm",
          "type": "array",
          "items": {
            "format": "int32",
            "type": "integer"
          }
        },
        "symbols": {
          "description": "Các mã chứng khoán liên quan đến nhóm",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "privacy": {
          "format": "int32",
          "description": "Loại nhóm - 0: Nhóm công khai, 1: Nhóm riêng tư",
          "type": "integer"
        },
        "visibility": {
          "format": "int32",
          "description": "Tính công khai nhóm - 0: Công khai, cho phép người dùng bình thường có thể tìm thấy nhóm trên cộng đồng, 1: Không công khai, chỉ thành viên của nhóm mới tìm thấy nhóm trên cộng đồng",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Rooms.RoomCreationRequest": {
      "description": "Yêu cầu tạo room",
      "type": "object",
      "properties": {
        "name": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "description": {
          "description": "Mô tả",
          "type": "string"
        },
        "privacy": {
          "format": "int32",
          "description": "Loại nhóm - 0: Nhóm công khai, 1: Nhóm riêng tư",
          "type": "integer"
        },
        "visibility": {
          "format": "int32",
          "description": "Tính công khai nhóm - 0: Công khai, cho phép người dùng bình thường có thể tìm thấy nhóm trên cộng đồng, 1: Không công khai, chỉ thành viên của nhóm mới tìm thấy nhóm trên cộng đồng",
          "type": "integer"
        },
        "coverImage": {
          "format": "byte",
          "description": "Ảnh cover",
          "type": "string"
        },
        "topics": {
          "description": "Các chủ đề liên quan đến nhóm",
          "type": "array",
          "items": {
            "format": "int32",
            "type": "integer"
          }
        },
        "symbols": {
          "description": "Các mã chứng khoán liên quan đến nhóm",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "inviteFollowers": {
          "description": "Mời những người theo dõi",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Rooms.RoomCoverImageUpdateRequest": {
      "description": "Yêu cầu tạo room",
      "type": "object",
      "properties": {
        "base64Image": {
          "description": "Ảnh cover",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Rooms.RoomInvitationRequest": {
      "description": "Lời mời tham gia room",
      "type": "object",
      "properties": {
        "userIds": {
          "description": "Người được mời",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "FireAnt.Api.Models.Rooms.RoomPendingRequest": {
      "type": "object",
      "properties": {
        "requestID": {
          "format": "int32",
          "type": "integer"
        },
        "requestedDate": {
          "format": "date-time",
          "type": "string"
        },
        "user": {
          "$ref": "#/definitions/FireAnt.Api.Models.Users.UserItem"
        }
      }
    },
    "FireAnt.Api.Models.Rooms.RoomRequestAction": {
      "description": "Hành động với lời mời",
      "type": "object",
      "properties": {
        "accepted": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Rooms.RoomAssignmentRequest": {
      "description": "Yêu cầu gán quyền cho thành viên",
      "type": "object",
      "properties": {
        "role": {
          "format": "int32",
          "description": "Role",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Rooms.RoomMember": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "bio": {
          "type": "string"
        },
        "followed": {
          "type": "boolean"
        },
        "roomID": {
          "format": "int32",
          "type": "integer"
        },
        "memberID": {
          "format": "int32",
          "type": "integer"
        },
        "role": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Rooms.RoomBlockedUser": {
      "description": "Người dùng bị chặn trong nhóm",
      "type": "object",
      "properties": {
        "userId": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Rooms.RoomStickyPostAction": {
      "description": "Hành động gán trạng thái đính cho bài viết",
      "type": "object",
      "properties": {
        "isSticky": {
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Posts.SearchItem": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "key": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
      }
    },
    "FireAnt.Trading.Brokers.SSI.SSITwoFAInfo": {
      "type": "object",
      "properties": {
        "twoFAType": {
          "format": "int32",
          "type": "integer"
        },
        "method": {
          "type": "string"
        },
        "sendsOtp": {
          "type": "boolean"
        },
        "supportsApproval": {
          "type": "boolean"
        },
        "hint": {
          "type": "string"
        }
      }
    },
    "FireAnt.Trading.Brokers.SSI.SSITwoFAApprovalRequest": {
      "type": "object",
      "properties": {
        "action": {
          "type": "string"
        },
        "orderId": {
          "type": "string"
        },
        "instrument": {
          "type": "string"
        },
        "side": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "qty": {
          "format": "double",
          "type": "number"
        },
        "limitPrice": {
          "format": "double",
          "type": "number"
        },
        "bankAccountId": {
          "type": "string"
        },
        "amount": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Trading.Brokers.SSI.SSITwoFAApproval": {
      "type": "object",
      "properties": {
        "approvalToken": {
          "type": "string"
        },
        "expireTime": {
          "format": "int64",
          "type": "integer"
        },
        "transactionData": {
          "type": "string"
        }
      }
    },
    "FireAnt.Trading.Brokers.SSI.SSITwoFAApprovalStatusRequest": {
      "type": "object",
      "properties": {
        "approvalToken": {
          "type": "string"
        }
      }
    },
    "FireAnt.Trading.Brokers.SSI.SSITwoFAApprovalStatus": {
      "type": "object",
      "properties": {
        "status": {
          "type": "string"
        },
        "expireTime": {
          "format": "int64",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyPagedResult[FireAnt.Api.Models.Surveys.SurveyItem]": {
      "description": "Kết quả phân trang",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách phần tử của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyItem"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa của trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyItem": {
      "description": "Thông tin tóm tắt một khảo sát (dùng cho danh sách)",
      "type": "object",
      "properties": {
        "surveyId": {
          "format": "int32",
          "description": "ID khảo sát",
          "type": "integer"
        },
        "code": {
          "description": "Mã/slug khảo sát (tùy chọn)",
          "type": "string"
        },
        "title": {
          "description": "Tiêu đề",
          "type": "string"
        },
        "description": {
          "description": "Mô tả",
          "type": "string"
        },
        "thankYouMessage": {
          "description": "Lời cảm ơn hiển thị sau khi gửi",
          "type": "string"
        },
        "imageUrl": {
          "description": "Ảnh minh họa",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = Draft, 1 = Published, 2 = Closed, 3 = Archived)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        },
        "isAnonymous": {
          "description": "Cho phép trả lời không cần đăng nhập",
          "type": "boolean"
        },
        "allowMultipleResponses": {
          "description": "Cho phép một người trả lời nhiều lần",
          "type": "boolean"
        },
        "showResults": {
          "description": "Cho phép người trả lời xem kết quả tổng hợp",
          "type": "boolean"
        },
        "startDate": {
          "format": "date-time",
          "description": "Thời điểm bắt đầu nhận phản hồi (null = ngay khi publish)",
          "type": "string"
        },
        "endDate": {
          "format": "date-time",
          "description": "Thời điểm kết thúc nhận phản hồi (null = không giới hạn)",
          "type": "string"
        },
        "maxResponses": {
          "format": "int32",
          "description": "Số phản hồi tối đa (null = không giới hạn)",
          "type": "integer"
        },
        "targetAudience": {
          "description": "Nhóm đối tượng (all, premium, ios, android...)",
          "type": "string"
        },
        "priority": {
          "format": "int32",
          "description": "Ưu tiên hiển thị (cao hơn lên trước)",
          "type": "integer"
        },
        "displayMode": {
          "format": "int32",
          "description": "Cách hiển thị trên App/Web: 0 ListOnly, 1 Banner, 2 Prompt (0 = ListOnly, 1 = Banner, 2 = Prompt)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "dismissible": {
          "description": "Cho phép người dùng \"Để sau\" / \"Không quan tâm\"",
          "type": "boolean"
        },
        "snoozeDays": {
          "format": "int32",
          "description": "Số ngày ẩn khảo sát khi người dùng chọn \"Để sau\"",
          "type": "integer"
        },
        "showToGuests": {
          "description": "Khảo sát yêu cầu đăng nhập vẫn hiện với khách chưa đăng nhập (client mời đăng nhập khi bấm vào)",
          "type": "boolean"
        },
        "presentationMode": {
          "format": "int32",
          "description": "Chế độ trình bày: 0 cuộn một trang, 1 mỗi Section một trang, 2 mỗi câu một màn hình (0 = Scroll, 1 = SectionPages, 2 = OneByOne)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "settings": {
          "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveySettings",
          "description": "Thiết lập trình bày (tự chuyển câu, màn hình mở đầu, màu nhấn...)"
        },
        "isDismissed": {
          "description": "Người dùng hiện tại đang bỏ qua khảo sát này (Để sau còn hạn hoặc Không quan tâm)",
          "type": "boolean"
        },
        "dismissedUntil": {
          "format": "date-time",
          "description": "Ẩn đến thời điểm này (null nếu không bỏ qua hoặc ẩn hẳn)",
          "type": "string"
        },
        "dismissCount": {
          "format": "int32",
          "description": "Số người đã bỏ qua khảo sát (admin)",
          "type": "integer"
        },
        "targetCount": {
          "format": "int32",
          "description": "Số đối tượng khảo sát được gắn vào (0 = khảo sát chung)",
          "type": "integer"
        },
        "targetSummary": {
          "description": "Tóm tắt đối tượng gắn kèm cho admin, ví dụ \"symbol:FPT, post:40203799\"",
          "type": "string"
        },
        "targets": {
          "description": "Đối tượng gắn kèm (có trong chi tiết và danh sách người dùng cuối)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyTargetItem"
          }
        },
        "questionCount": {
          "format": "int32",
          "description": "Số câu hỏi",
          "type": "integer"
        },
        "responseCount": {
          "format": "int32",
          "description": "Số phản hồi đã nhận",
          "type": "integer"
        },
        "hasResponded": {
          "description": "Người dùng hiện tại đã trả lời khảo sát này chưa",
          "type": "boolean"
        },
        "hasDraft": {
          "description": "Người dùng hiện tại đang có bản nháp chưa gửi",
          "type": "boolean"
        },
        "draftCount": {
          "format": "int32",
          "description": "Số bản nháp đang tồn tại (admin)",
          "type": "integer"
        },
        "isActive": {
          "description": "Khảo sát đang trong thời gian nhận phản hồi",
          "type": "boolean"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "updatedBy": {
          "description": "Người cập nhật cuối",
          "type": "string"
        },
        "updatedDate": {
          "format": "date-time",
          "description": "Ngày cập nhật cuối",
          "type": "string"
        },
        "publishedDate": {
          "format": "date-time",
          "description": "Ngày publish",
          "type": "string"
        },
        "closedDate": {
          "format": "date-time",
          "description": "Ngày đóng",
          "type": "string"
        },
        "isDeleted": {
          "description": "Đã xóa mềm",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyDismissRequest": {
      "description": "Yêu cầu bỏ qua khảo sát (\"Để sau\" / \"Không quan tâm\") - người dùng cuối",
      "type": "object",
      "properties": {
        "anonymousId": {
          "description": "Định danh khách ẩn danh (khi chưa đăng nhập)",
          "type": "string"
        },
        "platform": {
          "description": "Nền tảng: ios | android | web (thống kê)",
          "type": "string"
        },
        "permanent": {
          "description": "false (mặc định) = \"Để sau\": ẩn khảo sát trong snoozeDays ngày của khảo sát;\r\ntrue = \"Không quan tâm\": ẩn hẳn cho đến khi gọi DELETE dismiss.",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyDismissalItem": {
      "description": "Trạng thái bỏ qua khảo sát của người dùng hiện tại",
      "type": "object",
      "properties": {
        "surveyId": {
          "format": "int32",
          "description": "ID khảo sát",
          "type": "integer"
        },
        "isPermanent": {
          "description": "Đã chọn \"Không quan tâm\" (ẩn hẳn)",
          "type": "boolean"
        },
        "snoozeUntil": {
          "format": "date-time",
          "description": "Ẩn đến thời điểm này (null khi ẩn hẳn)",
          "type": "string"
        },
        "dismissCount": {
          "format": "int32",
          "description": "Số lần đã bỏ qua",
          "type": "integer"
        },
        "dismissedDate": {
          "format": "date-time",
          "description": "Lần bỏ qua gần nhất",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyResponseRequest": {
      "description": "Yêu cầu gửi phản hồi khảo sát",
      "required": [
        "answers"
      ],
      "type": "object",
      "properties": {
        "anonymousId": {
          "description": "Định danh khách ẩn danh (device id) - dùng khi khảo sát cho phép ẩn danh và chưa đăng nhập",
          "type": "string"
        },
        "platform": {
          "description": "Nền tảng: ios | android | web",
          "type": "string"
        },
        "appVersion": {
          "description": "Phiên bản ứng dụng",
          "type": "string"
        },
        "durationSeconds": {
          "format": "int32",
          "description": "Thời gian hoàn thành (giây)",
          "type": "integer"
        },
        "metadata": {
          "description": "Dữ liệu bổ sung dạng JSON (tùy chọn)",
          "type": "string"
        },
        "currentQuestionId": {
          "format": "int32",
          "description": "Bản nháp: câu người dùng đang làm (để vẽ phễu rơi rớt)",
          "type": "integer"
        },
        "answers": {
          "description": "Danh sách câu trả lời (câu hỏi bị ẩn bởi điều kiện rẽ nhánh sẽ bị bỏ qua)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyAnswerRequest"
          }
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyAnswerRequest": {
      "description": "Câu trả lời cho một câu hỏi. Tùy loại câu hỏi dùng trường tương ứng:\r\nSingleChoice/Dropdown/MultipleChoice: optionIds (+ otherText nếu chọn \"Khác\");\r\nText: text; Rating/Number/Slider: number; YesNo: boolValue; Date: date; DateRange: date + dateTo;\r\nMatrix: matrix[]; Ranking: rankedOptionIds; FileUpload: fileUrls; Symbol: symbols.",
      "type": "object",
      "properties": {
        "questionId": {
          "format": "int32",
          "description": "ID câu hỏi",
          "type": "integer"
        },
        "optionIds": {
          "description": "Các lựa chọn được chọn",
          "type": "array",
          "items": {
            "format": "int32",
            "type": "integer"
          }
        },
        "otherText": {
          "description": "Text nhập kèm khi chọn lựa chọn \"Khác\"",
          "type": "string"
        },
        "text": {
          "description": "Câu trả lời tự luận",
          "type": "string"
        },
        "number": {
          "format": "double",
          "description": "Giá trị số (Rating/Number/Slider)",
          "type": "number"
        },
        "boolValue": {
          "description": "Giá trị Có/Không",
          "type": "boolean"
        },
        "date": {
          "format": "date-time",
          "description": "Giá trị ngày (Date) hoặc ngày bắt đầu (DateRange)",
          "type": "string"
        },
        "dateTo": {
          "format": "date-time",
          "description": "DateRange: ngày kết thúc",
          "type": "string"
        },
        "matrix": {
          "description": "Matrix: mỗi phần tử là một dòng đã trả lời",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyMatrixCellRequest"
          }
        },
        "rankedOptionIds": {
          "description": "Ranking: các optionId theo thứ tự ưu tiên (phần tử đầu = hạng 1)",
          "type": "array",
          "items": {
            "format": "int32",
            "type": "integer"
          }
        },
        "fileUrls": {
          "description": "FileUpload: URL các tệp đã upload qua endpoint /surveys/{id}/files",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "symbols": {
          "description": "Symbol: các mã cổ phiếu (VD: [\"VNM\",\"FPT\"])",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "numberTo": {
          "format": "double",
          "description": "Slider chọn khoảng: đầu cuối (number là đầu đầu)",
          "type": "number"
        },
        "points": {
          "description": "Hotspot: các điểm chạm (tọa độ theo tỷ lệ ảnh 0..1)",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyPointRequest"
          }
        },
        "blanks": {
          "description": "FillInBlank: câu trả lời từng ô trống",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyBlankAnswerRequest"
          }
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyMatrixCellRequest": {
      "description": "Một dòng trả lời của câu hỏi Matrix",
      "type": "object",
      "properties": {
        "rowOptionId": {
          "format": "int32",
          "description": "optionId của dòng (optionGroup = Choice)",
          "type": "integer"
        },
        "columnOptionId": {
          "format": "int32",
          "description": "optionId của cột (optionGroup = MatrixColumn) - dùng khi ma trận có cột rời",
          "type": "integer"
        },
        "number": {
          "format": "double",
          "description": "Điểm trong minValue..maxValue - dùng khi ma trận là thang điểm",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyPointRequest": {
      "description": "Điểm chạm trên ảnh (Hotspot), tọa độ theo tỷ lệ ảnh 0..1",
      "type": "object",
      "properties": {
        "x": {
          "format": "double",
          "description": "Tỷ lệ theo bề rộng (0 = mép trái, 1 = mép phải)",
          "type": "number"
        },
        "y": {
          "format": "double",
          "description": "Tỷ lệ theo chiều cao (0 = mép trên, 1 = mép dưới)",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyBlankAnswerRequest": {
      "description": "Câu trả lời cho một ô trống của câu FillInBlank",
      "type": "object",
      "properties": {
        "optionId": {
          "format": "int32",
          "description": "optionId của ô trống (optionGroup = Blank)",
          "type": "integer"
        },
        "text": {
          "description": "Ô dạng chữ / mã CK",
          "type": "string"
        },
        "number": {
          "format": "double",
          "description": "Ô dạng số",
          "type": "number"
        },
        "choiceOptionId": {
          "format": "int32",
          "description": "Ô dạng chọn: optionId của lựa chọn (optionGroup = BlankChoice, cha là ô trống)",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveySubmitResult": {
      "description": "Kết quả sau khi gửi phản hồi khảo sát",
      "type": "object",
      "properties": {
        "responseId": {
          "format": "int64",
          "description": "ID phản hồi vừa tạo",
          "type": "integer"
        },
        "surveyId": {
          "format": "int32",
          "description": "ID khảo sát",
          "type": "integer"
        },
        "submittedDate": {
          "format": "date-time",
          "description": "Thời điểm ghi nhận",
          "type": "string"
        },
        "thankYouMessage": {
          "description": "Lời cảm ơn cấu hình trên khảo sát",
          "type": "string"
        },
        "showResults": {
          "description": "Khảo sát cho phép xem kết quả tổng hợp",
          "type": "boolean"
        },
        "outcome": {
          "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyOutcome",
          "description": "Hành động sau khảo sát đã khớp với câu trả lời (null nếu không có). Client hiển thị nút; người dùng bấm mới chuyển."
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyOutcome": {
      "description": "Hành động được chọn cho một phản hồi cụ thể (đã thay placeholder). Client hiển thị nút; người dùng bấm mới chuyển.",
      "type": "object",
      "properties": {
        "ruleId": {
          "format": "int32",
          "description": "ID quy tắc đã khớp",
          "type": "integer"
        },
        "title": {
          "description": "Tiêu đề (tùy chọn)",
          "type": "string"
        },
        "description": {
          "description": "Mô tả (tùy chọn)",
          "type": "string"
        },
        "buttonLabel": {
          "description": "Nhãn nút",
          "type": "string"
        },
        "actionType": {
          "format": "int32",
          "description": "Loại hành động (1 = Url, 2 = AppRoute, 3 = Survey, 4 = Symbol)",
          "enum": [
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "actionValue": {
          "description": "Giá trị đã thay placeholder: URL / JSON route / SurveyId / mã CK",
          "type": "string"
        },
        "openInNewTab": {
          "description": "Mở tab mới (Url trên web)",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyResponseItem": {
      "description": "Một phản hồi khảo sát kèm các câu trả lời",
      "type": "object",
      "properties": {
        "responseId": {
          "format": "int64",
          "description": "ID phản hồi",
          "type": "integer"
        },
        "surveyId": {
          "format": "int32",
          "description": "ID khảo sát",
          "type": "integer"
        },
        "userName": {
          "description": "Tên đăng nhập người trả lời (null nếu ẩn danh)",
          "type": "string"
        },
        "anonymousId": {
          "description": "Định danh khách ẩn danh",
          "type": "string"
        },
        "submittedDate": {
          "format": "date-time",
          "description": "Thời điểm gửi (với bản nháp: lần lưu gần nhất)",
          "type": "string"
        },
        "startedDate": {
          "format": "date-time",
          "description": "Thời điểm bắt đầu (lần lưu nháp đầu tiên)",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái: Draft / Completed (0 = Draft, 1 = Completed)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "ipAddress": {
          "description": "Địa chỉ IP",
          "type": "string"
        },
        "userAgent": {
          "description": "User agent",
          "type": "string"
        },
        "platform": {
          "description": "Nền tảng",
          "type": "string"
        },
        "appVersion": {
          "description": "Phiên bản ứng dụng",
          "type": "string"
        },
        "durationSeconds": {
          "format": "int32",
          "description": "Thời gian hoàn thành (giây)",
          "type": "integer"
        },
        "metadata": {
          "description": "Dữ liệu bổ sung (JSON)",
          "type": "string"
        },
        "answerCount": {
          "format": "int32",
          "description": "Số câu hỏi đã trả lời",
          "type": "integer"
        },
        "outcomeRuleId": {
          "format": "int32",
          "description": "ID hành động sau khảo sát đã khớp lúc gửi (null nếu không có)",
          "type": "integer"
        },
        "lastQuestionId": {
          "format": "int32",
          "description": "Bản nháp: câu người dùng đang làm lần lưu gần nhất",
          "type": "integer"
        },
        "outcome": {
          "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyOutcome",
          "description": "Hành động sau khảo sát tính lại từ câu trả lời đã lưu (chỉ có ở my-response và chi tiết phản hồi)"
        },
        "answers": {
          "description": "Danh sách câu trả lời",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyAnswerItem"
          }
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyFileUploadResult": {
      "description": "Kết quả tải tệp lên cho câu hỏi FileUpload",
      "type": "object",
      "properties": {
        "fileName": {
          "description": "Tên tệp gốc",
          "type": "string"
        },
        "url": {
          "description": "URL công khai của tệp - dùng trong answers[].fileUrls",
          "type": "string"
        },
        "size": {
          "format": "int64",
          "description": "Kích thước (byte)",
          "type": "integer"
        },
        "contentType": {
          "description": "Content type",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyViewRequest": {
      "description": "Ghi nhận một lượt xem khảo sát",
      "type": "object",
      "properties": {
        "platform": {
          "description": "Nền tảng: ios | android | web",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyStatusChangeRequest": {
      "description": "Yêu cầu thay đổi trạng thái khảo sát (Admin)",
      "type": "object",
      "properties": {
        "status": {
          "format": "int32",
          "description": "Trạng thái mới. Chuyển đổi hợp lệ:\r\nDraft -&gt; Published (cần ít nhất 1 câu hỏi), Published -&gt; Closed,\r\nClosed -&gt; Published (mở lại), Draft/Published/Closed -&gt; Archived, Archived -&gt; Draft/Closed. (0 = Draft, 1 = Published, 2 = Closed, 3 = Archived)",
          "enum": [
            0,
            1,
            2,
            3
          ],
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyPagedResult[FireAnt.Api.Models.Surveys.SurveyResponseItem]": {
      "description": "Kết quả phân trang",
      "type": "object",
      "properties": {
        "items": {
          "description": "Danh sách phần tử của trang hiện tại",
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Surveys.SurveyResponseItem"
          }
        },
        "totalCount": {
          "format": "int32",
          "description": "Tổng số bản ghi thỏa điều kiện",
          "type": "integer"
        },
        "offset": {
          "format": "int32",
          "description": "Vị trí bản ghi đầu tiên",
          "type": "integer"
        },
        "limit": {
          "format": "int32",
          "description": "Số bản ghi tối đa của trang",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyAssetUploadResult": {
      "description": "Kết quả tải ảnh / tệp dùng trong nội dung khảo sát (ảnh bìa, ảnh lựa chọn, ảnh hotspot)",
      "type": "object",
      "properties": {
        "url": {
          "description": "URL công khai",
          "type": "string"
        },
        "fileName": {
          "description": "Tên tệp gốc",
          "type": "string"
        },
        "size": {
          "format": "int64",
          "description": "Dung lượng sau khi xử lý (byte)",
          "type": "integer"
        },
        "contentType": {
          "description": "Kiểu nội dung",
          "type": "string"
        },
        "width": {
          "format": "int32",
          "description": "Bề rộng ảnh (px), null nếu không đọc được",
          "type": "integer"
        },
        "height": {
          "format": "int32",
          "description": "Chiều cao ảnh (px), null nếu không đọc được",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyNotificationRequest": {
      "description": "Yêu cầu tạo thông báo push cho khảo sát (Admin)",
      "required": [
        "title",
        "body"
      ],
      "type": "object",
      "properties": {
        "type": {
          "format": "int32",
          "description": "Loại: Publish (giới thiệu) hoặc Reminder (nhắc người chưa hoàn thành) (1 = Publish, 2 = Reminder)",
          "enum": [
            1,
            2
          ],
          "type": "integer"
        },
        "title": {
          "description": "Tiêu đề push (bắt buộc)",
          "type": "string"
        },
        "body": {
          "description": "Nội dung push (bắt buộc)",
          "type": "string"
        },
        "topic": {
          "description": "FCM topic gửi hàng loạt (VD: \"all\"). Dùng khi không có danh sách user; không loại trừ được người đã hoàn thành.",
          "type": "string"
        },
        "userNames": {
          "description": "Danh sách user nhận. Nếu bỏ trống: lấy từ quy tắc đối tượng loại UserName của khảo sát\r\nvà (với Reminder) những người đang có bản nháp. Người đã hoàn thành luôn bị loại trừ.",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "scheduledDate": {
          "format": "date-time",
          "description": "Thời điểm gửi (null = gửi ngay)",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Surveys.SurveyNotificationItem": {
      "description": "Thông báo push của khảo sát (gửi ngay hoặc lên lịch qua Hangfire)",
      "type": "object",
      "properties": {
        "notificationId": {
          "format": "int32",
          "description": "ID thông báo",
          "type": "integer"
        },
        "surveyId": {
          "format": "int32",
          "description": "ID khảo sát",
          "type": "integer"
        },
        "type": {
          "format": "int32",
          "description": "Loại: Publish / Reminder (1 = Publish, 2 = Reminder)",
          "enum": [
            1,
            2
          ],
          "type": "integer"
        },
        "title": {
          "description": "Tiêu đề push",
          "type": "string"
        },
        "body": {
          "description": "Nội dung push",
          "type": "string"
        },
        "topic": {
          "description": "FCM topic gửi hàng loạt (nếu có)",
          "type": "string"
        },
        "userNames": {
          "description": "Danh sách user chỉ định (phân cách dấu phẩy)",
          "type": "string"
        },
        "scheduledDate": {
          "format": "date-time",
          "description": "Thời điểm gửi theo lịch (null = gửi ngay khi tạo)",
          "type": "string"
        },
        "status": {
          "format": "int32",
          "description": "Trạng thái (0 = Pending, 1 = Sent, 2 = Failed, 3 = Cancelled, 4 = Processing)",
          "enum": [
            0,
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "jobId": {
          "description": "Hangfire job id",
          "type": "string"
        },
        "targetCount": {
          "format": "int32",
          "description": "Số người nhận dự kiến",
          "type": "integer"
        },
        "sentCount": {
          "format": "int32",
          "description": "Số push gửi thành công",
          "type": "integer"
        },
        "error": {
          "description": "Lỗi (nếu có)",
          "type": "string"
        },
        "sentDate": {
          "format": "date-time",
          "description": "Thời điểm gửi xong",
          "type": "string"
        },
        "createdBy": {
          "description": "Người tạo",
          "type": "string"
        },
        "createdDate": {
          "format": "date-time",
          "description": "Ngày tạo",
          "type": "string"
        },
        "updatedDate": {
          "format": "date-time",
          "description": "Ngày cập nhật",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.SymbolValueItem": {
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "value": {
          "format": "double",
          "description": "Giá trị giao dịch",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Quote.HistoricalQuote": {
      "description": "Giá lịch sử của một mã chứng khoán",
      "type": "object",
      "properties": {
        "date": {
          "format": "date-time",
          "description": "Ngày giao dịch",
          "type": "string"
        },
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "priceHigh": {
          "format": "double",
          "description": "Giá cao nhất",
          "type": "number"
        },
        "priceLow": {
          "format": "double",
          "description": "Giá thấp nhất",
          "type": "number"
        },
        "priceOpen": {
          "format": "double",
          "description": "Giá mở cửa",
          "type": "number"
        },
        "priceAverage": {
          "format": "double",
          "description": "Giá trung bình",
          "type": "number"
        },
        "priceClose": {
          "format": "double",
          "description": "Giá đóng cửa",
          "type": "number"
        },
        "priceBasic": {
          "format": "double",
          "description": "Giá tham chiếu",
          "type": "number"
        },
        "totalVolume": {
          "format": "double",
          "description": "Tổng khối lượng",
          "type": "number"
        },
        "dealVolume": {
          "format": "double",
          "description": "Khối lượng khớp lệnh",
          "type": "number"
        },
        "putthroughVolume": {
          "format": "double",
          "description": "Khối lượng thỏa thuận",
          "type": "number"
        },
        "totalValue": {
          "format": "double",
          "description": "Tổng giá trị giao dịch",
          "type": "number"
        },
        "putthroughValue": {
          "format": "double",
          "description": "Giá trị thỏa thuận",
          "type": "number"
        },
        "buyForeignQuantity": {
          "format": "double",
          "description": "Khối lượng NĐT nước ngoài mua",
          "type": "number"
        },
        "buyForeignValue": {
          "format": "double",
          "description": "Giá trị NĐT nước ngoài mua",
          "type": "number"
        },
        "sellForeignQuantity": {
          "format": "double",
          "description": "Khối lượng NĐT nước ngoài bán",
          "type": "number"
        },
        "sellForeignValue": {
          "format": "double",
          "description": "Giá trị NĐT nước ngoài bán",
          "type": "number"
        },
        "buyCount": {
          "format": "double",
          "description": "Số lệnh mua",
          "type": "number"
        },
        "buyQuantity": {
          "format": "double",
          "description": "Khối lượng mua",
          "type": "number"
        },
        "sellCount": {
          "format": "double",
          "description": "Số lệnh bán",
          "type": "number"
        },
        "sellQuantity": {
          "format": "double",
          "description": "Khối lượng bán",
          "type": "number"
        },
        "adjRatio": {
          "format": "double",
          "description": "Tỉ lệ điều chỉnh",
          "type": "number"
        },
        "currentForeignRoom": {
          "format": "double",
          "description": "Room nước ngoài",
          "type": "number"
        },
        "propTradingNetDealValue": {
          "format": "double",
          "description": "Giá trị tự doanh mua ròng (khớp lệnh)",
          "type": "number"
        },
        "propTradingNetPTValue": {
          "format": "double",
          "description": "Giá trị tự doanh mua ròng (thỏa thuận)",
          "type": "number"
        },
        "propTradingNetValue": {
          "format": "double",
          "description": "Giá trị tự doanh mua ròng",
          "type": "number"
        },
        "unit": {
          "format": "double",
          "description": "Đơn vị giá",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Finance.SummaryFinancialReports": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "columns": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "rows": {
          "type": "array",
          "items": {
            "type": "array",
            "items": {
              "type": "object"
            }
          }
        }
      }
    },
    "FireAnt.Api.Models.Finance.FinancialReportRow": {
      "type": "object",
      "properties": {
        "id": {
          "format": "int32",
          "type": "integer"
        },
        "name": {
          "type": "string"
        },
        "parentID": {
          "format": "int32",
          "type": "integer"
        },
        "expanded": {
          "type": "boolean"
        },
        "level": {
          "format": "int32",
          "type": "integer"
        },
        "field": {
          "type": "string"
        },
        "values": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Finance.FinancialReportValue"
          }
        }
      }
    },
    "FireAnt.Api.Models.Finance.FinancialReportValue": {
      "type": "object",
      "properties": {
        "period": {
          "type": "string"
        },
        "year": {
          "format": "int32",
          "type": "integer"
        },
        "quarter": {
          "format": "int32",
          "type": "integer"
        },
        "value": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Finance.FinancialIndicator": {
      "type": "object",
      "properties": {
        "name": {
          "description": "Tên đầy đủ chỉ tiêu",
          "type": "string"
        },
        "shortName": {
          "description": "Tên ngắn gọn chỉ tiêu",
          "type": "string"
        },
        "description": {
          "description": "Mô tả chỉ tiêu",
          "type": "string"
        },
        "group": {
          "format": "int32",
          "description": "ID của nhóm chỉ tiêu",
          "type": "integer"
        },
        "groupName": {
          "description": "Tên nhóm chỉ tiêu",
          "type": "string"
        },
        "value": {
          "format": "double",
          "description": "Giá trị hiện tại của chỉ tiêu",
          "type": "number"
        },
        "change": {
          "format": "double",
          "description": "Thay đổi so với kỳ báo cáo gần nhất (hoặc so với phiên trước đối với các chỉ tiêu định giá)",
          "type": "number"
        },
        "industryValue": {
          "format": "double",
          "description": "Giá trị chỉ tiêu của ngành tương ứng",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Institutions.Fundamental": {
      "type": "object",
      "properties": {
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "companyType": {
          "format": "int32",
          "description": " (General = Doanh nghiệp thông thường, Bank = Ngân hàng, Securities = Công ty chứng khoán, Fund = Quỹ, Insurance = Công ty bảo hiểm)",
          "enum": [
            0,
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "sharesOutstanding": {
          "format": "double",
          "description": "Số lượng cổ phiếu đang lưu hành",
          "type": "number"
        },
        "freeShares": {
          "format": "double",
          "description": "Số lượng cổ phiếu tự do chuyển nhượng",
          "type": "number"
        },
        "beta": {
          "format": "double",
          "description": "Chỉ số Beta",
          "type": "number"
        },
        "dividend": {
          "format": "double",
          "description": "Cổ tức",
          "type": "number"
        },
        "dividendYield": {
          "format": "double",
          "description": "Tỷ suất cổ tức",
          "type": "number"
        },
        "marketCap": {
          "format": "double",
          "description": "Giá trị vốn hóa thị trường",
          "type": "number"
        },
        "low52Week": {
          "format": "double",
          "description": "Giá thấp nhất 52 tuần (hay 1 năm)",
          "type": "number"
        },
        "high52Week": {
          "format": "double",
          "description": "Giá cao nhất 52 tuần (hay 1 năm)",
          "type": "number"
        },
        "priceChange1y": {
          "format": "double",
          "description": "Thay đổi giá 1 năm",
          "type": "number"
        },
        "avgVolume10d": {
          "format": "double",
          "description": "Khối lượng giao dịch trung bình 10 phiên gần nhất",
          "type": "number"
        },
        "avgVolume3m": {
          "format": "double",
          "description": "Khối lượng giao dịch trung bình 3 tháng gần nhất",
          "type": "number"
        },
        "pe": {
          "format": "double",
          "description": "PE",
          "type": "number"
        },
        "eps": {
          "format": "double",
          "description": "EPS",
          "type": "number"
        },
        "sales_TTM": {
          "format": "double",
          "description": "Doanh thu 4 quý liên tiếp",
          "type": "number"
        },
        "netProfit_TTM": {
          "format": "double",
          "description": "Lợi nhuận 4 quý liên tiếp",
          "type": "number"
        },
        "insiderOwnership": {
          "format": "double",
          "description": "Tỉ lệ sở hữu của ban lãnh đạo",
          "type": "number"
        },
        "institutionOwnership": {
          "format": "double",
          "description": "Tỉ lệ sở hữu của tổ chức",
          "type": "number"
        },
        "foreignOwnership": {
          "format": "double",
          "description": "Tỉ lệ sở hữu của nhà đầu tư nước ngoài",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Institutions.CompanyInfo": {
      "description": "Company Information",
      "type": "object",
      "properties": {
        "institutionID": {
          "format": "int32",
          "type": "integer"
        },
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "icbCode": {
          "description": "Mã ngành ICB",
          "type": "string"
        },
        "companyName": {
          "description": "Tên doanh nghiệp",
          "type": "string"
        },
        "shortName": {
          "description": "Tên viết tắt của doanh nghiệp",
          "type": "string"
        },
        "internationalName": {
          "description": "Tên quốc tế của doanh nghiệp",
          "type": "string"
        },
        "headQuarters": {
          "description": "Trụ sở",
          "type": "string"
        },
        "phone": {
          "description": "Điện thoạ",
          "type": "string"
        },
        "fax": {
          "description": "Fax",
          "type": "string"
        },
        "email": {
          "description": "Email",
          "type": "string"
        },
        "webAddress": {
          "description": "Website",
          "type": "string"
        },
        "overview": {
          "description": "Tổng quan",
          "type": "string"
        },
        "history": {
          "description": "Lịch sử hình thành",
          "type": "string"
        },
        "businessAreas": {
          "description": "Ngành nghề kinh doanh",
          "type": "string"
        },
        "employees": {
          "format": "int64",
          "description": "Số nhân viên",
          "type": "integer"
        },
        "branches": {
          "format": "int32",
          "description": "Số chi nhánh",
          "type": "integer"
        },
        "establishmentDate": {
          "format": "date-time",
          "description": "Ngày thành lập",
          "type": "string"
        },
        "businessLicenseNumber": {
          "description": "Số đăng ký kinh doanh",
          "type": "string"
        },
        "dateOfIssue": {
          "format": "date-time",
          "description": "Ngày cấp đăng ký kinh doanh",
          "type": "string"
        },
        "taxIDNumber": {
          "description": "Mã số thuế",
          "type": "string"
        },
        "charterCapital": {
          "format": "double",
          "description": "Vốn điều lệ",
          "type": "number"
        },
        "dateOfListing": {
          "format": "date-time",
          "description": "Ngày niêm yết",
          "type": "string"
        },
        "exchange": {
          "description": "Sàn niêm yết",
          "type": "string"
        },
        "initialListingPrice": {
          "format": "double",
          "description": "Giá niêm yết",
          "type": "number"
        },
        "listingVolume": {
          "format": "double",
          "description": "Khối lượng niêm yết",
          "type": "number"
        },
        "stateOwnership": {
          "format": "double",
          "description": "Tỉ lệ sở hữu nhà nước",
          "type": "number"
        },
        "foreignOwnership": {
          "format": "double",
          "description": "Tỉ lệ sở hữu nước ngoài",
          "type": "number"
        },
        "otherOwnership": {
          "format": "double",
          "description": "Tỉ lệ sở hữu khác",
          "type": "number"
        },
        "isListed": {
          "description": "Đã niêm yết",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Institutions.SubCompanyInfo": {
      "type": "object",
      "properties": {
        "institutionID": {
          "format": "int32",
          "description": "ID của tổ chức",
          "type": "integer"
        },
        "symbol": {
          "description": "Mã chứng khoán",
          "type": "string"
        },
        "exchange": {
          "description": "Sàn niêm yết",
          "type": "string"
        },
        "companyName": {
          "description": "Tên doanh nghiệp",
          "type": "string"
        },
        "shortName": {
          "description": "Tên viết tắt",
          "type": "string"
        },
        "internationalName": {
          "description": "Tên quốc tế",
          "type": "string"
        },
        "companyProfile": {
          "description": "Hồ sơ doanh nghiệp",
          "type": "string"
        },
        "type": {
          "format": "int32",
          "description": "Loại hình công ty con (Subsidiary = Công ty con, Linked = Công ty liên kết, Venture = Công ty liên doanh, Investment = Công ty đầu tư góp vốn, Unknown = Chưa xác định)",
          "enum": [
            0,
            1,
            2,
            3,
            4
          ],
          "type": "integer"
        },
        "ownership": {
          "format": "double",
          "description": "Tỉ lệ sở hữu",
          "type": "number"
        },
        "shares": {
          "format": "double",
          "description": "Số lượng cổ phiếu",
          "type": "number"
        },
        "isListed": {
          "description": "Đã niêm yết",
          "type": "boolean"
        },
        "charterCapital": {
          "format": "double",
          "description": "Vốn điều lệ",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Institutions.MajorHolder": {
      "type": "object",
      "properties": {
        "majorHolderID": {
          "format": "int32",
          "description": "ID của cổ đông lớn",
          "type": "integer"
        },
        "individualHolderID": {
          "format": "int32",
          "description": "ID cá nhân (nếu là cổ đông cá nhân)",
          "type": "integer"
        },
        "institutionHolderID": {
          "format": "int32",
          "description": "ID tổ chức (nếu là cổ đông tổ chức)",
          "type": "integer"
        },
        "institutionHolderSymbol": {
          "description": "Mã chứng khoán của tổ chức (nếu là cổ đông tổ chức)",
          "type": "string"
        },
        "institutionHolderExchange": {
          "description": "Sàn niêm yết của tổ chức (nếu là cổ đông tổ chức)",
          "type": "string"
        },
        "name": {
          "description": "Tên của cổ đông",
          "type": "string"
        },
        "position": {
          "description": "Vị trí của cổ đông",
          "type": "string"
        },
        "shares": {
          "format": "double",
          "description": "Số lượng cổ phiếu của cổ đông",
          "type": "number"
        },
        "ownership": {
          "format": "double",
          "description": "Tỉ lệ sở hữu của cổ đông",
          "type": "number"
        },
        "isOrganization": {
          "description": "Cổ đông tổ chức",
          "type": "boolean"
        },
        "isForeigner": {
          "description": "Cổ đông nước ngoài",
          "type": "boolean"
        },
        "isFounder": {
          "description": "Cổ đông sáng lập",
          "type": "boolean"
        },
        "reported": {
          "format": "date-time",
          "description": "Ngày cập nhật",
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Institutions.CompanyOfficer": {
      "type": "object",
      "properties": {
        "officerID": {
          "format": "int32",
          "description": "ID của lãnh đạo",
          "type": "integer"
        },
        "individualID": {
          "format": "int32",
          "description": "ID của cá nhân",
          "type": "integer"
        },
        "name": {
          "description": "Tên của lãnh đạo",
          "type": "string"
        },
        "positionID": {
          "format": "int32",
          "description": "ID của vị trí",
          "type": "integer"
        },
        "position": {
          "description": "Vị trí của lãnh đạo",
          "type": "string"
        },
        "isForeigner": {
          "description": "Người nước ngoài",
          "type": "boolean"
        }
      }
    },
    "FireAnt.Api.Models.Institutions.TimescaleMark": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "date": {
          "format": "date-time",
          "type": "string"
        },
        "title": {
          "type": "string"
        },
        "color": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Institutions.EquityDividend": {
      "type": "object",
      "properties": {
        "year": {
          "format": "int32",
          "description": "Năm",
          "type": "integer"
        },
        "cashDividend": {
          "format": "double",
          "description": "Cổ tức bằng tiền",
          "type": "number"
        },
        "stockDividend": {
          "format": "double",
          "description": "Cổ tức bằng cổ phiếu",
          "type": "number"
        },
        "totalAssets": {
          "format": "double",
          "description": "Tổng tài sản",
          "type": "number"
        },
        "stockHolderEquity": {
          "format": "double",
          "description": "Vốn chủ sở hữu",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Statistics.EstimatedPrice": {
      "type": "object",
      "properties": {
        "estimatedPriceDCF": {
          "format": "double",
          "type": "number"
        },
        "proportionDCF": {
          "format": "double",
          "type": "number"
        },
        "estimatedPricePE": {
          "format": "double",
          "type": "number"
        },
        "proportionPE": {
          "format": "double",
          "type": "number"
        },
        "estimatedPricePB": {
          "format": "double",
          "type": "number"
        },
        "proportionPB": {
          "format": "double",
          "type": "number"
        },
        "estimatedPriceGraham1": {
          "format": "double",
          "type": "number"
        },
        "proportionGraham1": {
          "format": "double",
          "type": "number"
        },
        "estimatedPriceGraham2": {
          "format": "double",
          "type": "number"
        },
        "proportionGraham2": {
          "format": "double",
          "type": "number"
        },
        "estimatedPriceGraham3": {
          "format": "double",
          "type": "number"
        },
        "proportionGraham3": {
          "format": "double",
          "type": "number"
        },
        "composedPrice": {
          "format": "double",
          "type": "number"
        }
      }
    },
    "FireAnt.Api.Models.Commodities.ContractInfo": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "exchange": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "commoditySymbol": {
          "type": "string"
        },
        "category": {
          "type": "string"
        },
        "month": {
          "format": "int32",
          "type": "integer"
        },
        "year": {
          "format": "int32",
          "type": "integer"
        },
        "contractUnit": {
          "type": "string"
        },
        "contractVolume": {
          "format": "int32",
          "type": "integer"
        },
        "tickSize": {
          "format": "double",
          "type": "number"
        },
        "firstNoticeDate": {
          "format": "date-time",
          "type": "string"
        },
        "lastTradingDate": {
          "format": "date-time",
          "type": "string"
        },
        "session": {
          "type": "string"
        },
        "settlementDate": {
          "format": "date-time",
          "type": "string"
        },
        "finalDeliveryDate": {
          "format": "date-time",
          "type": "string"
        },
        "lastNoticeDate": {
          "format": "date-time",
          "type": "string"
        },
        "currency": {
          "type": "string"
        },
        "holidays": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/FireAnt.Api.Models.Commodities.HolidayInfo"
          }
        }
      }
    },
    "FireAnt.Api.Models.Commodities.HolidayInfo": {
      "type": "object",
      "properties": {
        "holidayDate": {
          "format": "date-time",
          "type": "string"
        },
        "holidayType": {
          "type": "string"
        },
        "reason": {
          "type": "string"
        }
      }
    },
    "FireAnt.Api.Models.Warrant.WarrantInfo": {
      "type": "object",
      "properties": {
        "symbol": {
          "type": "string"
        },
        "realName": {
          "type": "string"
        },
        "fireAntName": {
          "type": "string"
        },
        "issuer": {
          "type": "string"
        },
        "issuerSymbol": {
          "type": "string"
        },
        "originalIssuedPrice": {
          "format": "double",
          "type": "number"
        },
        "lastIssuedPrice": {
          "format": "double",
          "type": "number"
        },
        "optionChoice": {
          "format": "int32",
          "description": " (0 = CALL, 1 = PUT)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "optionType": {
          "format": "int32",
          "description": " (0 = EUROPEAN, 1 = AMERICA)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "right": {
          "format": "int32",
          "description": " (0 = BUY, 1 = SELL)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "originalExercisePrice": {
          "format": "double",
          "type": "number"
        },
        "exercisePrice": {
          "format": "double",
          "type": "number"
        },
        "paidPrice": {
          "format": "double",
          "type": "number"
        },
        "originalExerciseRatio": {
          "format": "double",
          "type": "number"
        },
        "exerciseRatio": {
          "format": "double",
          "type": "number"
        },
        "basicSecuritiesSymbol": {
          "type": "string"
        },
        "listedShares": {
          "format": "double",
          "type": "number"
        },
        "outStandingShares": {
          "format": "double",
          "type": "number"
        },
        "issuedDay": {
          "format": "date-time",
          "type": "string"
        },
        "lastIssuedDay": {
          "format": "date-time",
          "type": "string"
        },
        "listedDay": {
          "format": "date-time",
          "type": "string"
        },
        "firstTradingDay": {
          "format": "date-time",
          "type": "string"
        },
        "duedDate": {
          "format": "date-time",
          "type": "string"
        },
        "lastTradingDay": {
          "format": "date-time",
          "type": "string"
        },
        "duration": {
          "format": "double",
          "type": "number"
        },
        "modeOfExerciseOfRights": {
          "format": "int32",
          "description": " (0 = CASH, 1 = STOCK)",
          "enum": [
            0,
            1
          ],
          "type": "integer"
        },
        "isinCode": {
          "type": "string"
        },
        "valueOfPaymentSecurityAssets": {
          "format": "double",
          "type": "number"
        },
        "lastValueOfPaymentSecurityAssets": {
          "format": "double",
          "type": "number"
        },
        "valueOfPaymentSecurityAssetsProcent": {
          "format": "double",
          "type": "number"
        },
        "lastValueOfPaymentSecurityAssetsProcent": {
          "format": "double",
          "type": "number"
        },
        "marketCapitalization": {
          "format": "double",
          "type": "number"
        },
        "warrantPrice": {
          "format": "double",
          "type": "number"
        },
        "basicSecuritiesPrice": {
          "format": "double",
          "type": "number"
        },
        "breakEvenPrice": {
          "format": "double",
          "type": "number"
        },
        "cwStatus": {
          "format": "int32",
          "description": " (0 = OTM, 1 = ITM, 2 = ATM)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "listingStatus": {
          "format": "int32",
          "description": " (0 = NONE, 1 = LISTING, 2 = EXPIRED)",
          "enum": [
            0,
            1,
            2
          ],
          "type": "integer"
        },
        "lastUpdated": {
          "format": "date-time",
          "type": "string"
        },
        "symbolID": {
          "format": "int32",
          "type": "integer"
        }
      }
    },
    "FireAnt.Api.Models.Crypto.CryptoInfo": {
      "type": "object",
      "properties": {
        "algorithm": {
          "description": "Gets or sets the algorithm of the coin.",
          "type": "string"
        },
        "coinName": {
          "description": "Gets or sets the name of the coin.",
          "type": "string"
        },
        "fullName": {
          "description": "Gets or sets the full name of the coins.",
          "type": "string"
        },
        "fullyPremined": {
          "description": "Gets or sets the number of fully premined coins.",
          "type": "string"
        },
        "id": {
          "format": "int32",
          "description": "Gets or sets the internal id, this is used in other calls.",
          "type": "integer"
        },
        "imageUrl": {
          "description": "Gets or sets he logo image of the coin.",
          "type": "string"
        },
        "name": {
          "description": "Gets or sets the coin name.",
          "type": "string"
        },
        "preMinedValue": {
          "description": "Gets or sets the pre-mined value.",
          "type": "string"
        },
        "proofType": {
          "description": "Gets or sets the proof type.",
          "type": "string"
        },
        "sortOrder": {
          "format": "int32",
          "description": "Gets the sort order.",
          "type": "integer"
        },
        "sponsored": {
          "description": "Gets or sets a value indicating whether the  coin is sponsored.",
          "type": "boolean"
        },
        "symbol": {
          "description": "Gets or sets the symbol.",
          "type": "string"
        },
        "smartContractAddress": {
          "description": "Gets or sets the smart contract address.",
          "type": "string"
        },
        "totalCoinsFreeFloat": {
          "description": "Gets or sets the total number of freed coins.",
          "type": "string"
        },
        "totalCoinSupply": {
          "description": "Gets or sets the total number of supplied coins.",
          "type": "string"
        },
        "url": {
          "description": "Gets or sets the url of the coin on cryptocompare.",
          "type": "string"
        },
        "isTrading": {
          "type": "boolean"
        },
        "description": {
          "type": "string"
        },
        "circulatingSupply": {
          "format": "double",
          "type": "number"
        },
        "maxSupply": {
          "format": "double",
          "type": "number"
        },
        "platformType": {
          "type": "string"
        },
        "builtOn": {
          "type": "string"
        },
        "otherSmartContractAddress": {
          "type": "string"
        },
        "totalCoinsMined": {
          "format": "double",
          "type": "number"
        },
        "blockNumber": {
          "format": "int32",
          "type": "integer"
        },
        "blockTime": {
          "format": "double",
          "type": "number"
        },
        "blockReward": {
          "format": "double",
          "type": "number"
        },
        "decimalPoints": {
          "format": "int32",
          "type": "integer"
        },
        "assetLaunchDate": {
          "format": "date-time",
          "type": "string"
        },
        "rating": {
          "type": "string"
        },
        "marketCap": {
          "format": "double",
          "type": "number"
        },
        "marketCapPenalty": {
          "format": "double",
          "type": "number"
        },
        "type": {
          "format": "int32",
          "type": "integer"
        },
        "price": {
          "format": "double",
          "type": "number"
        },
        "priceAt": {
          "format": "date-time",
          "type": "string"
        },
        "median": {
          "format": "double",
          "type": "number"
        },
        "volume": {
          "format": "double",
          "type": "number"
        },
        "totalVolume": {
          "format": "double",
          "type": "number"
        },
        "change": {
          "format": "double",
          "type": "number"
        },
        "basic": {
          "format": "double",
          "type": "number"
        },
        "open": {
          "format": "double",
          "type": "number"
        },
        "high": {
          "format": "double",
          "type": "number"
        },
        "low": {
          "format": "double",
          "type": "number"
        },
        "currentSupply": {
          "format": "double",
          "type": "number"
        },
        "fractionDigits": {
          "format": "int32",
          "type": "integer"
        },
        "volume24h": {
          "format": "double",
          "type": "number"
        }
      }
    }
  },
  "securityDefinitions": {
    "oauth2": {
      "type": "oauth2",
      "description": "OAuth2 Implicit Grant",
      "flow": "implicit",
      "authorizationUrl": "https://accounts.fireant.vn/connect/authorize",
      "scopes": {
        "accounts-read": "Đọc danh sách tài khoản giao dịch chứng khoán",
        "accounts-write": "Liên kết tài khoản chứng khoán",
        "orders-read": "Đọc danh sách lệnh giao dịch chứng khoán",
        "orders-write": "Đặt, sửa, hủy lệnh giao dịch chứng khoán",
        "companies-read": "Đọc thông tin doanh nghiệp",
        "companies-write": "Tạo mới, cập nhật, xóa thông tin doanh nghiệp",
        "individuals-read": "Đọc thông tin cá nhân",
        "individuals-write": "Tạo mới, cập nhật, xóa thông tin cá nhân",
        "finance-read": "Đọc thông tin tài chính",
        "finance-write": "Tạo mới, cập nhật, xóa thông tin tài chính",
        "posts-write": "Đăng bài viết",
        "posts-read": "Lấy nội dung các bài viết của cộng đồng",
        "symbols-read": "Đọc thông tin mã chứng khoán",
        "symbols-write": "Tạo mới, cập nhật, xóa mã chứng khoán",
        "users-read": "Đọc dữ liệu công khai của người dùng",
        "user-data-read": "Đọc tất cả dữ liệu của người dùng hiện tại",
        "user-data-write": "Cập nhật tất cả dữ liệu của người dùng hiện tại",
        "search": "Tìm kiếm",
        "academy-read": "Đọc dữ liệu các khóa học",
        "academy-write": "Đăng ký khóa học",
        "blog-read": "Đọc dữ liệu blog",
        "investopedia-read": "Đọc dữ liệu thuật ngữ",
        "commodities-read": "Đọc dữ liệu hàng hóa phái sinh",
        "all_claims": "All",
        "roles": "Role"
      }
    }
  }
}