Skip to main content
Sáu endpoint để hệ thống nhân sự (HRM) giữ danh sách người dùng eContract khớp với danh sách nhân sự của mình. Xác thực và quy tắc tenantCode giống hệt API Danh mục.

Mã người dùng là khoá đồng bộ

Mọi endpoint ở đây định danh người dùng bằng code — với người dùng do hệ thống nhân sự đẩy sang, đó chính là mã nhân viên bên bạn.
codemột trường duy nhất cho mọi người dùng, không phải trường riêng của tích hợp nhân sự. Người dùng bên ngoài (đối tác ký) cũng mang code, nhưng do econtractid tự sinh theo định dạng riêng. Hai nhóm người dùng tách biệt nên không bao giờ giành nhau một mã.
emailusername cố định sau khi tạo. Gửi giá trị khác trong request cập nhật sẽ nhận 409 IDENTITY_IMMUTABLE chứ không bị bỏ qua im lặng — đổi định danh đăng nhập là đổi tài khoản, không phải cập nhật hồ sơ. Gửi lại đúng giá trị hiện tại (kể cả khác hoa thường) thì được chấp nhận, để bạn cứ gửi nguyên bản ghi mỗi lần đồng bộ.

1. Danh sách người dùng

Query

hasCode=false là cách rà những tài khoản được tạo thẳng trên giao diện web mà hệ thống nhân sự chưa biết. Đối chiếu nhóm này trước khi chạy đồng bộ hàng loạt, tránh tạo trùng người.
updatedFrom cho phép đồng bộ tăng dần: mỗi lần chạy chỉ kéo về phần đã đổi kể từ lần chạy trước, thay vì tải lại toàn bộ danh sách.

Response


2. Chi tiết một người

Trả về đúng một object như phần tử trong items ở trên. Không có mã đó trong tenant → 404 USER_CODE_NOT_FOUND.

3. Tạo người dùng

Body

Dùng roleName, không phải roleCode. Trong nhiều tổ chức, mọi vai trò dùng chung một mã mặc định (role), nên roleCode không chỉ ra được vai trò nào — API sẽ trả 400 ROLE_AMBIGUOUS_IN_ORGANIZATION. Tên vai trò thì duy nhất trong một đơn vị, nên đó là cách định danh đáng tin. Gọi GET /directory/roles để lấy đúng tên.Gửi cả hai cũng được, nhưng chúng phải cùng chỉ về một vai trò — mâu thuẫn thì bị từ chối chứ không lặng lẽ chọn một bên.
Người dùng được tạo với type = internal, đặt ở gốc tenant, và ở trạng thái chờ đặt mật khẩu — họ tự đặt mật khẩu qua luồng quên mật khẩu của econtractid.

Response

HTTP 201; thân phản hồi là object người dùng như mục 1 (trường statusCode trong envelope luôn là 200, giống mọi endpoint khác của hệ thống).

4. Cập nhật

Cập nhật từng phần: chỉ trường có mặt trong body mới bị ghi đè.
Không có cách nào xoá sạch phân công của một người qua API này. Đó là chủ ý: một payload lỡ thiếu trường không được phép thổi bay vai trò của người đang làm việc. Cần gỡ vai trò thì thao tác trên giao diện quản trị.

5. Khoá / bật lại tài khoản

Chỉ nhận hai giá trị này; các trạng thái nội bộ khác không đặt được từ bên ngoài.
Không có endpoint xoá người dùng. Nhân sự nghỉ việc thì khoá tài khoản — hồ sơ họ đã ký vẫn phải truy vết được, nên bản ghi người dùng không được biến mất.

6. Đồng bộ hàng loạt

Upsert theo code: chưa có thì tạo, đã có thì cập nhật. Tối đa 200 dòng mỗi request.

Response

Luôn 200 khi request hợp lệ — lỗi nằm ở từng dòng, không phải cả lần gọi.
Vắng mặt trong payload không có nghĩa là đã nghỉ việc. Danh sách gửi lên chỉ là phần bạn muốn đồng bộ; người không có trong đó không bị đụng tới, không bị khoá, không bị xoá. Muốn khoá ai thì gọi endpoint đổi trạng thái.
Mỗi dòng chạy trong một transaction riêng nên một dòng hỏng không kéo theo dòng đã ghi. Ngược lại, trùng code ngay trong một payload làm hỏng cả request (400 USER_CODE_DUPLICATED_IN_PAYLOAD) và chưa ghi dòng nào — nếu xử lý tiếp thì dòng sau sẽ ghi đè dòng trước và kết quả phụ thuộc thứ tự mảng.

Mã lỗi

Danh sách đầy đủ: Mã lỗi.