Cần danh sách hồ sơ cần ký / đã ký của một người dùng? Xem API Công việc ký.
Trạng thái hồ sơ
1. Tạo hồ sơ ký số
Request
Trường cấp gốc
Trường của files[] và attachments[]
Kiểm tra
fileUrl: server tự tải file từ URL bạn cung cấp. Yêu cầu: HTTPS, dưới 50MB, phản hồi trong 30 giây, URL đọc được công khai (không cần header xác thực), không qua redirect, và không trỏ vào dải IP nội bộ.Hệ thống nhận diện PDF bằng chữ ký nhị phân đầu file, không dựa vào header Content-Type. Xem mã lỗi 413/415/502.Trường của signers[]
identityNumber và taxCode dùng để phân loại người ký: cá nhân dùng identityNumber, tổ chức dùng taxCode. Chỉ gửi một trong hai. Khi gửi taxCode, tài khoản người ký được tạo với username chính là mã số thuế.Giới hạn độ dài và định dạng
username bị bỏ qua (kèm cảnh báo trong log) nếu bước tương ứng là bước khách mời (guest / phone_guest) — những bước này định danh người ký qua email/số điện thoại.Nhiều người ký cùng một bước
Nhiều signer trỏ vào cùngstepCode sẽ tạo nhiều lượt ký tại bước đó, diễn ra lần lượt theo order (hoặc thứ tự trong mảng). Hỗ trợ cả khách mời (mỗi người một email/định danh) lẫn nhân sự nội bộ (mỗi người một username):
identityNumber / taxCode / username), không qua stepCode.
Response
Response của endpoint tạo hồ sơ không chứa
ecmClassCode, size, mimeType — các trường này chỉ có ở mục tra cứu hồ sơ và liệt kê file bên dưới.Với disableStart: true, status trả về là PENDING thay vì PENDING_SIGN.Xử lý phía server
Toàn bộ quá trình là atomic — bất kỳ bước nào lỗi thì rollback hoàn toàn, không để lại hồ sơ dở dang:- Xác thực API Key → xác định tổ chức
- Kiểm tra idempotency theo
documentId→ trùng thì409 - Tra cứu
processDefCode→ lấy quy trình và các bước - Xử lý file:
source=templatethì render từ mẫu;source=urlthì tải PDF qua bộ lọc SSRF rồi lưu trữ - Kiểm tra và gán người ký theo
stepCode - Tạo hồ sơ, lưu
metadata - Khởi chạy quy trình, gửi thông báo cho người ký
Ví dụ cURL
2. Kích hoạt quy trình
disableStart: true. Endpoint chuyển hồ sơ từ PENDING sang PENDING_SIGN và sinh công việc đầu tiên.
Khi nào cần:
- Bạn muốn tạo hồ sơ trước để đội vận hành rà soát nội bộ, sau đó mới phát hành cho ký
- Cần hẹn giờ phát hành (vd chỉ bắt đầu ngoài giờ làm việc)
Lỗi:
404 nếu documentId không tồn tại; 400 nếu hồ sơ không ở trạng thái PENDING (đã chạy rồi, hoặc đã kết thúc). Gọi lần hai khi quy trình đang chạy sẽ trả 400.3. Tra cứu trạng thái hồ sơ
requiredCount là tổng số bước ký, signedCount là số bước đã ký. Hồ sơ chuyển COMPLETED khi hai giá trị bằng nhau.
Định danh người ký
Mỗi item trongsigners[] chỉ chứa các trường ứng với loại bước ký của nó:
API không trả ID số nội bộ (
userId, roleId) — nhất quán với nguyên tắc codes-first. Định danh ổn định là username (người dùng) và roleCode (vai trò).4. Liệt kê file của hồ sơ
MAIN + ATTACHMENT) kèm fileUuid. Dùng khi chỉ cần danh sách file mà không cần toàn bộ trạng thái hồ sơ.
5. Tải file
fileUuid từ response tạo hồ sơ, liệt kê file, tra cứu hồ sơ, hoặc từ webhook (files[].ecmNodeUuid).
Đặc điểm:
- Gọi được ở bất kỳ trạng thái nào của hồ sơ, mỗi lần lấy phiên bản mới nhất
- File thuộc tổ chức khác trả
404 FILE_NOT_FOUND(không lộ sự tồn tại)
Bước tiếp theo
Webhook
Nhận thông báo khi hồ sơ hoàn tất hoặc bị từ chối
Mã lỗi
Danh sách đầy đủ mã lỗi và cách xử lý

