Assign khoá học

View as Markdown
Gán một hoặc nhiều khoá học cho nhân sự trong cùng một lần gọi (batch). Thao tác **auto-confirm** (không cần bước xác nhận riêng) và **idempotent theo từng item** (nhân sự đã được assign khoá đó sẽ tự bỏ qua, không tính phí lần hai). **Body params:** | Param | Bắt buộc | Kiểu | Mô tả | |-------|----------|------|-------| | `items` | Có | array (1–100) | Danh sách cặp khoá – nhân sự cần assign | | `items[].course_id` | Có | int | ID khoá học (theo `course_id` platform ở endpoint danh mục) | | `items[].employer_id` | Có | int | ID nhân sự | | `deadline` | Không | date | Hạn hoàn thành áp cho các item trong batch | | `idempotency_key` | Không | string (max 64) | Không bắt buộc tự sinh. Nếu gửi, hệ thống hỗ trợ replay: cùng key đã xử lý sẽ trả lại kết quả cũ thay vì tạo/tính phí lại (kể cả khi hai request cùng key chạy đồng thời) | **Hành vi:** - Lỗi ở **mức order** (còn hoá đơn chưa thanh toán, thiếu credit…) sẽ làm **fail toàn bộ batch** và trả về mã lỗi tương ứng. - Nếu order hợp lệ, từng item được xử lý độc lập với trạng thái riêng. **Response gồm:** `order_id`, `status` (`assigned` khi tạo order thành công), `amount` (tổng phí), `invoice_id`, `replayed` (true nếu là kết quả replay theo idempotency_key), `summary` (`total` / `valid` / `invalid`), và `items[]` — mỗi item có `course_id`, `employer_id`, `status` (`assigned`, `skipped_already_assigned`, `invalid_employer`, `invalid_course`), `status_text` (diễn giải).

Request

This endpoint expects an object.
itemslist of objectsRequired
deadlinedateRequired
idempotency_keystringRequired