---
title: "Duyệt, từ chối, phát hành hoặc gỡ khảo sát cổ đông. Hạn mức của công ty chỉ bị trừ khi khảo sát được duyệt."
method: POST
path: "/admin/ir/surveys/{companySurveyId}/review"
tags: ["IRAdmin"]
---

# Duyệt, từ chối, phát hành hoặc gỡ khảo sát cổ đông. Hạn mức của công ty chỉ bị trừ khi khảo sát được duyệt.

`POST /admin/ir/surveys/{companySurveyId}/review`

## Request

- Base URL: `https://api.fireant.vn`
- URL: `https://api.fireant.vn/admin/ir/surveys/{companySurveyId}/review`
- Auth: OAuth 2
  - Implicit: `https://accounts.fireant.vn/connect/authorize`
  - Scopes: `user-data-write`
- TypeScript: <https://skmtc.dev/fireant/apis/fireant-restful-api/docs/admin/ir/surveys/:companySurveyId/review/post.ts> (a function with typed inputs; its response is checked against the schema)

## Path parameters

- `companySurveyId` integer, required

## Request body

- FireAntApiModelsIRIRSurveyReviewRequest: Duyệt hoặc từ chối khảo sát cổ đông (quản trị FireAnt)
  - `status` 0 | 1 | 2 | 3 | 4 | 5 | 6: Trạng thái mới (0 = Draft, 1 = PendingReview, 2 = Approved, 3 = Rejected, 4 = Live, 5 = Closed, 6 = Withdrawn)
  - `reason` string: Lý do từ chối

## Response `200`

OK

- FireAntApiModelsIRIRCompanySurveyItem: 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, bản ghi này giữ phần sở hữu, kiểm duyệt và hạn mức.
  - `companySurveyId` integer: ID bản ghi sở hữu
  - `companyId` integer: ID công ty
  - `symbol` string: Mã chứng khoán
  - `companyName` string: Tên công ty
  - `surveyId` integer: ID khảo sát trong hệ thống khảo sát dùng chung
  - `surveyCode` string: Mã khảo sát, hệ thống tự sinh dạng ir-shb-1
  - `title` string: Tiêu đề
  - `reviewStatus` 0 | 1 | 2 | 3 | 4 | 5 | 6: Trạng thái kiểm duyệt (0 = Draft, 1 = PendingReview, 2 = Approved, 3 = Rejected, 4 = Live, 5 = Closed, 6 = Withdrawn)
  - `submittedBy` string: Người trình duyệt
  - `submittedDate` string, date-time: Thời điểm trình duyệt
  - `reviewedBy` string: Người duyệt phía FireAnt
  - `reviewedDate` string, date-time: Thời điểm duyệt
  - `rejectReason` string: Lý do từ chối
  - `quotaPeriod` string: Kỳ đã trừ hạn mức
  - `pushInvitesUsed` integer: Số lần đã mời qua thông báo đẩy
  - `responseCount` integer: Số phản hồi hoàn thành
  - `draftCount` integer: Số bản đang làm dở
  - `dismissCount` integer: Số lượt bỏ qua
  - `completionRate` number, double: Tỉ lệ hoàn thành trên số người đã bắt đầu
  - `lastStatsSyncDate` string, date-time: Lần đồng bộ thống kê gần nhất
  - `surveyMissing` boolean: Khảo sát đã bị xóa ở hệ thống khảo sát dùng chung
  - `origin` 0 | 1: 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)
  - `createdBy` string: Người tạo
  - `createdDate` string, date-time: Ngày tạo
  - `modifiedBy` string: Người sửa gần nhất
  - `modifiedDate` string, date-time: Thời điểm sửa gần nhất
  - `survey` FireAntApiModelsSurveysSurveyDetail: 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
    - `questions` FireAntApiModelsSurveysSurveyQuestionItem[]: Danh sách câu hỏi theo thứ tự hiển thị
      - `questionId` integer: ID câu hỏi
      - `surveyId` integer: ID khảo sát
      - `questionText` string: Nội dung câu hỏi (với Section: tiêu đề nhóm/trang)
      - `description` string: Mô tả / hướng dẫn thêm
      - `questionType` 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17: 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)
      - `isRequired` boolean: Bắt buộc trả lời
      - `orderIndex` integer: Thứ tự hiển thị
      - `minValue` integer: Rating/Number/Slider/Matrix(thang điểm): giá trị nhỏ nhất
      - `maxValue` integer: Rating/Number/Slider/Matrix(thang điểm): giá trị lớn nhất
      - `minLabel` string: Rating/Slider: nhãn đầu thang
      - `maxLabel` string: Rating/Slider: nhãn cuối thang
      - `maxSelections` integer: MultipleChoice/Ranking/Symbol/FileUpload: số lượng tối đa (null = không giới hạn / xếp hạng tất cả)
      - `allowOtherOption` boolean: Có lựa chọn "Khác" cho phép nhập text
      - `placeholder` string: Gợi ý nhập (Text/Number/Symbol)
      - `maxLength` integer: Text: độ dài tối đa
      - `settings` FireAntApiModelsSurveysSurveyQuestionSettings: Cấu hình bổ sung theo loại câu hỏi (lưu JSON trong SurveyQuestions.Settings). Chỉ các trường phù hợp với loại câu hỏi mới được sử dụng.
        - `step` number, double: Slider/Number: bước nhảy (ví dụ 0.5). Null = tự do
        - `unit` string: Slider/Number/Rating: đơn vị hiển thị (%, VND, điểm...)
        - `minSelections` integer: MultipleChoice/Ranking/Symbol/FileUpload: số lượng tối thiểu phải chọn/nhập
        - `allowedFileTypes` string[]: FileUpload: đuôi tệp cho phép (ví dụ ["jpg","png","pdf"]). Null = mặc định ảnh + pdf
        - `maxFileSizeKb` integer: FileUpload: dung lượng tối đa mỗi tệp (KB). Null = 10240
        - `minDate` string, date-time: Date/DateRange: ngày sớm nhất được chọn
        - `maxDate` string, date-time: Date/DateRange: ngày muộn nhất được chọn
        - `maxRangeDays` integer: DateRange: số ngày tối đa của khoảng
        - `symbolTypes` string[]: Symbol: chỉ cho phép loại chứng khoán (STOCK, ETF, INDEX...). Null = tất cả
        - `showAsStars` boolean: Rating: hiển thị dạng sao (client dùng). Giữ để tương thích; ưu tiên ratingStyle
        - `ratingStyle` string: Rating: number | star | emoji | heart | nps (0..10, tô màu 3 nhóm)
        - `emojis` string[]: Rating (emoji) / Slider (emoji): emoji theo từng mức, từ thấp tới cao
        - `scaleLabels` string[]: Rating: nhãn cho từng mức, từ thấp tới cao (hiện dưới mức đang chọn)
        - `yesNoStyle` string: YesNo: buttons | thumbs | emoji
        - `yesLabel` string: YesNo: nhãn nút Có (bỏ trống = "Có")
        - `noLabel` string: YesNo: nhãn nút Không (bỏ trống = "Không")
        - `optionLayout` string: SingleChoice/MultipleChoice: list | grid (ô vuông) | cards (thẻ ảnh lớn)
        - `imageAspect` string: grid/cards: tỷ lệ ảnh 1:1 | 4:3 | 16:9 | 3:4
        - `showOptionText` boolean: grid/cards: hiện chữ dưới ảnh (mặc định true)
        - `columns` integer: grid/cards: số cột trên màn rộng (2..4, mặc định tự động)
        - `sliderStyle` string: Slider: default | gradient | emoji
        - `marks` FireAntApiModelsSurveysSurveySliderMark[]: Slider: vạch mốc có nhãn
          - `value` number, double: Giá trị
          - `label` string: Nhãn hiển thị (bỏ trống = giá trị)
        - `prefix` string: Slider/Number: tiền tố hiển thị (ví dụ "+", "$")
        - `range` boolean: Slider: chọn khoảng hai đầu (trả lời number + numberTo)
        - `gradientColors` string[]: Slider (gradient): màu dải từ thấp tới cao (#RRGGBB)
        - `showValue` boolean: Slider: hiện giá trị đang chọn (mặc định true)
        - `rankingStyle` string: Ranking: drag (kéo thả sắp tất cả) | pick (chọn top N rồi sắp)
        - `imageUrl` string: Hotspot: ảnh nền (bắt buộc)
        - `imageWidth` integer: Hotspot: bề rộng ảnh gốc (px) để giữ đúng tỷ lệ
        - `imageHeight` integer: Hotspot: chiều cao ảnh gốc (px)
        - `showHeatmapPublic` boolean: Hotspot: cho người trả lời xem bản đồ nhiệt ở kết quả công khai
        - `showRegions` boolean: Hotspot: hiện viền các vùng có tên cho người trả lời
        - `requireRegion` boolean: Hotspot: điểm chạm bắt buộc nằm trong một vùng có tên
        - `template` string: FillInBlank: câu mẫu, ô trống viết {{key}} (key = optionValue của ô trống). Ví dụ "Tôi đầu tư vì {{1}}"
      - `randomizeOptions` boolean: 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)
      - `conditionLogic` 0 | 1: Cách kết hợp các điều kiện hiển thị (0 = All, 1 = Any)
      - `options` FireAntApiModelsSurveysSurveyOptionItem[]: Danh sách lựa chọn. Với Matrix: optionGroup = Choice là dòng, optionGroup = MatrixColumn là cột.
        - `optionId` integer: ID lựa chọn
        - `questionId` integer: ID câu hỏi
        - `optionText` string: Nội dung lựa chọn
        - `optionValue` string: Giá trị nội bộ (mã/điểm) - tùy chọn
        - `orderIndex` integer: Thứ tự hiển thị
        - `isOther` boolean: Là lựa chọn "Khác" (cho phép nhập text kèm theo)
        - `imageUrl` string: Ảnh minh họa
        - `optionGroup` 0 | 1 | 2 | 3: 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)
        - `settings` FireAntApiModelsSurveysSurveyOptionSettings: Thiết lập của một lựa chọn (JSON trong SurveyQuestionOptions.Settings)
          - `shape` string: Hotspot: hình của vùng - rect | ellipse
          - `x` number, double: Hotspot: tọa độ trái của vùng theo tỷ lệ bề rộng ảnh (0..1)
          - `y` number, double: Hotspot: tọa độ trên của vùng theo tỷ lệ chiều cao ảnh (0..1)
          - `w` number, double: Hotspot: bề rộng vùng theo tỷ lệ (0..1)
          - `h` number, double: Hotspot: chiều cao vùng theo tỷ lệ (0..1)
          - `blankKind` string: FillInBlank: kiểu ô trống - text | choice | number | symbol
          - `placeholder` string: FillInBlank: gợi ý trong ô trống
          - `maxLength` integer: FillInBlank (text): độ dài tối đa (mặc định 200)
          - `min` number, double: FillInBlank (number): giá trị nhỏ nhất
          - `max` number, double: FillInBlank (number): giá trị lớn nhất
          - `required` boolean: FillInBlank: ô trống bắt buộc khi câu hỏi bắt buộc (mặc định true)
          - `width` string: FillInBlank: độ rộng ô - sm | md | lg
          - `icon` string: 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". Chỉ 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.
          - `emoji` string: 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)
          - `description` string: Lựa chọn dạng thẻ: mô tả phụ
        - `parentOptionId` integer: BlankChoice: optionId của ô trống cha
      - `conditions` FireAntApiModelsSurveysSurveyQuestionConditionItem[]: Điều kiện hiển thị (rỗng = luôn hiển thị)
        - `conditionId` integer: ID điều kiện
        - `questionId` integer: Câu hỏi bị điều kiện
        - `sourceQuestionId` integer: Câu hỏi nguồn (luôn đứng trước câu bị điều kiện)
        - `operator` 1 | 2 | 3 | 4 | 5 | 6 | 7: Phép so sánh (1 = Equals, 2 = NotEquals, 3 = Contains, 4 = GreaterThan, 5 = LessThan, 6 = Answered, 7 = NotAnswered)
        - `optionId` integer: Lựa chọn của câu nguồn để so sánh (các loại chọn)
        - `value` string: Giá trị để so sánh (số, text, true/false, ngày ISO)
        - `orderIndex` integer: Thứ tự
      - `carryForwardQuestionId` integer: 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ự). Chỉ 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.
      - `carryForwardMode` 1 | 2: Cách lấy lựa chọn từ câu nguồn (1 = Selected, 2 = NotSelected)
      - `jumps` FireAntApiModelsSurveysSurveyQuestionJumpItem[]: Quy tắc nhảy sau câu này (quy tắc đầu tiên khớp được dùng)
        - `jumpId` integer: ID quy tắc
        - `questionId` integer: Câu hỏi nguồn
        - `targetQuestionId` integer: Câu/phần đích (đứng sau câu nguồn). Null = kết thúc khảo sát
        - `conditionLogic` 0 | 1: Cách kết hợp điều kiện (0 = All, 1 = Any)
        - `orderIndex` integer: Thứ tự xét
        - `conditions` FireAntApiModelsSurveysSurveyJumpConditionItem[]: Đ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 đó)
          - `conditionId` integer: ID điều kiện
          - `jumpId` integer: ID quy tắc
          - `sourceQuestionId` integer: Câu hỏi nguồn
          - `operator` 1 | 2 | 3 | 4 | 5 | 6 | 7: Phép so sánh (1 = Equals, 2 = NotEquals, 3 = Contains, 4 = GreaterThan, 5 = LessThan, 6 = Answered, 7 = NotAnswered)
          - `optionId` integer: Lựa chọn so sánh
          - `value` string: Giá trị so sánh
          - `orderIndex` integer: Thứ tự
    - `audienceRules` FireAntApiModelsSurveysSurveyAudienceRuleItem[]: Quy tắc nhắm đối tượng (rỗng = mọi người dùng)
      - `ruleId` integer: ID quy tắc
      - `surveyId` integer: ID khảo sát
      - `ruleType` 1 | 2 | 3 | 4 | 5 | 6 | 7: Loại quy tắc (1 = Platform, 2 = AppVersion, 3 = MembershipLevel, 4 = Role, 5 = UserName, 6 = IdentityVerified, 7 = Tag)
      - `operator` 1 | 2 | 3 | 4 | 5 | 6: Phép so sánh (1 = In, 2 = NotIn, 3 = GreaterOrEqual, 4 = LessOrEqual, 5 = Equals, 6 = NotEquals)
      - `value` string: 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")
      - `orderIndex` integer: Thứ tự
    - `outcomeRules` FireAntApiModelsSurveysSurveyOutcomeRuleItem[]: 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.
      - `ruleId` integer: ID quy tắc
      - `surveyId` integer: ID khảo sát
      - `orderIndex` integer: Thứ tự ưu tiên (nhỏ hơn được xét trước)
      - `title` string: Tiêu đề hiển thị trên màn hình cảm ơn (tùy chọn)
      - `description` string: Mô tả ngắn lý do gợi ý (tùy chọn)
      - `buttonLabel` string: Nhãn nút bấm
      - `actionType` 1 | 2 | 3 | 4: Loại hành động (1 = Url, 2 = AppRoute, 3 = Survey, 4 = Symbol)
      - `actionValue` string: Giá trị hành động: URL (Url), JSON {route, routeParams} (AppRoute), SurveyId (Survey), mã CK (Symbol). Hỗ trợ placeholder {answer:N}, {surveyId}, {responseId}, {userName}, {anonymousId}.
      - `openInNewTab` boolean: Mở trong tab mới (chỉ có ý nghĩa với Url trên web)
      - `conditionLogic` 0 | 1: Cách kết hợp điều kiện: All (mặc định) hoặc Any (0 = All, 1 = Any)
      - `isDefault` boolean: 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)
      - `conditions` FireAntApiModelsSurveysSurveyOutcomeConditionItem[]: Điều kiện (rỗng với quy tắc mặc định)
        - `conditionId` integer: ID điều kiện
        - `ruleId` integer: ID quy tắc
        - `sourceQuestionId` integer: Câu hỏi nguồn
        - `operator` 1 | 2 | 3 | 4 | 5 | 6 | 7: Phép so sánh (1 = Equals, 2 = NotEquals, 3 = Contains, 4 = GreaterThan, 5 = LessThan, 6 = Answered, 7 = NotAnswered)
        - `optionId` integer: Lựa chọn của câu nguồn để so sánh
        - `value` string: Giá trị so sánh (số, text, true/false, ngày)
        - `orderIndex` integer: Thứ tự
    - `surveyId` integer: ID khảo sát
    - `code` string: Mã/slug khảo sát (tùy chọn)
    - `title` string: Tiêu đề
    - `description` string: Mô tả
    - `thankYouMessage` string: Lời cảm ơn hiển thị sau khi gửi
    - `imageUrl` string: Ảnh minh họa
    - `status` 0 | 1 | 2 | 3: Trạng thái (0 = Draft, 1 = Published, 2 = Closed, 3 = Archived)
    - `isAnonymous` boolean: Cho phép trả lời không cần đăng nhập
    - `allowMultipleResponses` boolean: Cho phép một người trả lời nhiều lần
    - `showResults` boolean: Cho phép người trả lời xem kết quả tổng hợp
    - `startDate` string, date-time: Thời điểm bắt đầu nhận phản hồi (null = ngay khi publish)
    - `endDate` string, date-time: Thời điểm kết thúc nhận phản hồi (null = không giới hạn)
    - `maxResponses` integer: Số phản hồi tối đa (null = không giới hạn)
    - `targetAudience` string: Nhóm đối tượng (all, premium, ios, android...)
    - `priority` integer: Ưu tiên hiển thị (cao hơn lên trước)
    - `displayMode` 0 | 1 | 2: Cách hiển thị trên App/Web: 0 ListOnly, 1 Banner, 2 Prompt (0 = ListOnly, 1 = Banner, 2 = Prompt)
    - `dismissible` boolean: Cho phép người dùng "Để sau" / "Không quan tâm"
    - `snoozeDays` integer: Số ngày ẩn khảo sát khi người dùng chọn "Để sau"
    - `showToGuests` boolean: 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)
    - `presentationMode` 0 | 1 | 2: 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)
    - `settings` FireAntApiModelsSurveysSurveySettings: 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.
      - `autoAdvance` boolean: 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
      - `showWelcome` boolean: 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
      - `showProgress` boolean: Hiện thanh tiến độ. Mặc định true
      - `allowBack` boolean: Cho quay lại câu trước. Mặc định true
      - `celebrate` boolean: Hiệu ứng chúc mừng khi hoàn thành. Mặc định true
      - `showQuestionNumbers` boolean: Hiện số thứ tự câu hỏi. Mặc định true
      - `accentColor` string: 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
      - `welcomeTitle` string: Tiêu đề màn hình mở đầu (bỏ trống = tiêu đề khảo sát)
      - `welcomeButton` string: Nhãn nút bắt đầu (bỏ trống = "Bắt đầu")
      - `estimatedMinutes` integer: Thời gian ước tính (phút) ghi đè cách tính tự động
    - `isDismissed` boolean: 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)
    - `dismissedUntil` string, date-time: Ẩn đến thời điểm này (null nếu không bỏ qua hoặc ẩn hẳn)
    - `dismissCount` integer: Số người đã bỏ qua khảo sát (admin)
    - `targetCount` integer: Số đối tượng khảo sát được gắn vào (0 = khảo sát chung)
    - `targetSummary` string: Tóm tắt đối tượng gắn kèm cho admin, ví dụ "symbol:FPT, post:40203799"
    - `targets` FireAntApiModelsSurveysSurveyTargetItem[]: Đối tượng gắn kèm (có trong chi tiết và danh sách người dùng cuối)
      - `targetId` integer: ID bản ghi
      - `surveyId` integer: ID khảo sát
      - `targetType` string: Loại đối tượng (chữ thường): post, symbol, room, user, event, article, url...
      - `targetKey` string: Khóa đối tượng: postId, mã CK (viết hoa), roomId, userId, URL...
      - `orderIndex` integer: Thứ tự hiển thị
    - `questionCount` integer: Số câu hỏi
    - `responseCount` integer: Số phản hồi đã nhận
    - `hasResponded` boolean: Người dùng hiện tại đã trả lời khảo sát này chưa
    - `hasDraft` boolean: Người dùng hiện tại đang có bản nháp chưa gửi
    - `draftCount` integer: Số bản nháp đang tồn tại (admin)
    - `isActive` boolean: Khảo sát đang trong thời gian nhận phản hồi
    - `createdBy` string: Người tạo
    - `createdDate` string, date-time: Ngày tạo
    - `updatedBy` string: Người cập nhật cuối
    - `updatedDate` string, date-time: Ngày cập nhật cuối
    - `publishedDate` string, date-time: Ngày publish
    - `closedDate` string, date-time: Ngày đóng
    - `isDeleted` boolean: Đã xóa mềm

## Changes

- **2026-09-25** `a481789cd81c`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/fireant/apis/fireant-restful-api/changes/admin/ir/surveys/:companySurveyId/review/post.md)

---

[API](https://skmtc.dev/fireant/apis/fireant-restful-api.md) - [All operations](https://skmtc.dev/fireant/apis/fireant-restful-api/llms.txt) - [OpenAPI document](https://skmtc.dev/fireant/apis/fireant-restful-api/revisions/c9b3aa855f95?raw)
