Tài liệu tích hợp Ký số Server & Hợp đồng điện tử MATBAO-CA

Tài liệu chuẩn hóa cung cấp toàn bộ đặc tả tham số kỹ thuật cổng API phục vụ ký số tập trung (PDF, XML, Hash) và quản lý quy trình luồng ký Hợp đồng điện tử.

Môi trường Hệ thống (Base URL)

Hệ thống cung cấp hai môi trường hoạt động phục vụ quá trình phát triển tích hợp phần mềm cấu hình:

Môi trường Cấu hình URL kết nối Thông tin Tài khoản Demo kiểm thử mặc định
Thông tin Demo (Sandbox) https://demo-api-econtract-mbc.matbao.in TaxCode: 0302712571-999
Username API: demo@matbao.com
Password API: demo@123!
Link Giao diện Web: demo-econtract.matbao.in
Thông tin Production https://api-econtract-mbc.matbao.in Cấp phát chính thức cho doanh nghiệp khi ký kết triển khai.

1. Lấy token xác thực (auth/token-matbaoca)

Mục đích:Xác thực tài khoản và nhận Access Token định danh. Token này sử dụng ở dạng HTTP Header Authorization: Bearer <token> cho toàn bộ request nghiệp vụ sau.
Phương thức:POST
Đường dẫn URL:<BaseUrl>/auth/token-matbaoca

Tham số dữ liệu Request Body

Tên trường Ý nghĩa định nghĩa Kiểu dữ liệu Ràng buộc
taxcode Mã số thuế của đơn vị đăng ký dịch vụ ký số Chuỗi ký tự Bắt buộc
username Tài khoản kết nối hệ thống API Chuỗi ký tự Bắt buộc
password Mật khẩu bảo mật kết nối tương ứng Chuỗi ký tự Bắt buộc
Mẫu JSON Request / Response
{
  // Request Body
  "taxcode": "0302712571-999",
  "username": "demo@matbao.com",
  "password": "password_bi_mat"
}

// Response Body
{
  "Success": true,
  "Data": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...", // Chuỗi mã hóa Bearer Access Token dùng định danh
  "ErrorCode": null,
  "CustomData": {
    "TokenExpired": "2026-12-31 23:59:59" // Thời điểm hết hạn token xác thực
  }
}

2. Lấy thông tin chứng thư số CERT (signing-matbaoca/getcert)

Mục đích:Kiểm tra thông tin chứng thư số cấu hình tập trung trên Server HSM của doanh nghiệp.
Phương thức:GET
Đường dẫn URL:<BaseUrl>/signing-matbaoca/getcert

Dữ liệu trả về (Data): Trả về cấu trúc đối tượng dữ liệu chứng thư số chuẩn hệ thống định dạng X509Certificate2.

3. Ký số file PDF định vị tọa độ (signing-matbaoca/signature-pdf)

Mục đích:Đóng dấu chữ ký số tập trung lên file tài liệu PDF dựa trên tọa độ X, Y, số trang và thiết lập nhãn hiển thị trực quan.
Phương thức:POST
Đường dẫn URL:<BaseUrl>/signing-matbaoca/signature-pdf

Bảng đặc tả tham số Request đồ sộ

Tên trường Định nghĩa chi tiết dữ liệu mô tả Kiểu dữ liệu Gợi ý cấu hình ví dụ
PdfBase64Nội dung toàn bộ tệp tin PDF cần ký số mã hóa chuỗi Base64Chuỗi Base64Bắt buộc
RecImgBase64Hình ảnh nền khung hiển thị chữ ký số (Mộc công ty/Chứng nhận)Chuỗi Base64Tùy chọn
RecWidth / RecHeightKích thước chiều rộng và chiều cao khung hiển thị chữ kýSố nguyên (int)Ví dụ: 150, 60
ArisingImgBase64Hình ảnh chữ ký tay bổ sung lồng cùng khung ký sốChuỗi Base64Tùy chọn
ArisingImgWidth / HeightChiều rộng và chiều cao của hình ảnh ký tay lồng ghép kèmSố nguyên (int)Ví dụ: 80, 40
ArisingPositionVị trí lồng ảnh tay tương đối: 0: Top | 1: Left | 2: Bottom | 3: RightSố nguyên (int)Mặc định: 2
ArisingPositionAlignCăn lề hình ảnh ký tay: 0: Left/Top | 1: Center/MiddleSố nguyên (int)Mặc định: 1
PageVị trí chỉ định trang tài liệu cần đóng dấu ký số (Bắt đầu từ trang 1)Số nguyên (int)Bắt buộc
X / YTọa độ điểm Neo hiển thị trên trang giấy PDF định vịSố thựcBắt buộc
VerifiedByLabelTên nhãn hiển thị đơn vị xác thực chữ ký (Ví dụ: "Xác thực bởi")Chuỗi ký tựTùy chọn
SignedByLabelTên nhãn hiển thị thực thể ký danh (Ví dụ: "Ký bởi:")Chuỗi ký tựTùy chọn
SignedDateLabelTên nhãn hiển thị mốc thời gian ký (Ví dụ: "Ký lúc:")Chuỗi ký tựTùy chọn
SignedDateFormatĐịnh dạng chuỗi thời gian hiển thị (Ví dụ: "dd/MM/yyyy HH:mm")Chuỗi ký tựMặc định cấu hình
AlignmentVerifiedByLabelCăn lề hiển thị nội dung nhãn xác thực: center | left | rightChuỗi ký tựMặc định: center
PositionSignedByLabelThứ tự ưu tiên dòng hiển thị của nội dung xác thực (0, 1, 2)Số nguyên (int)Sắp xếp layout dòng
Cấu trúc dữ liệu Response Body trả về
{
  "Success": true,
  "Data": "JVBERi0xLjQKJ..." // Toàn bộ nội dung file PDF sau khi đóng chữ ký số thành công ở dạng chuỗi Base64
  "ErrorCode": null,
  "CustomData": ""
}

4. Ký số dữ liệu XML (signing-matbaoca/signature-xml)

Mục đích:Ký số dữ liệu tệp tin XML theo vùng chỉ định (Thích hợp ứng dụng cho core hóa đơn điện tử).
Phương thức:POST
Đường dẫn URL:<BaseUrl>/signing-matbaoca/signature-xml

Tham số đầu vào: XmlDataBase64 (Chuỗi nội dung tệp xml thô mã hóa), SignatureLocation (ID định danh phân vùng cần thực hiện chèn thẻ ký), và NodeToBeSigned (Đường dẫn XPath của thẻ xuất hiện khối chữ ký, ví dụ cấu trúc ký hóa đơn thương mại dùng: //DSCKS/NBan).

5. Ký dữ liệu chuỗi Hash (signing-matbaoca/signature-hash)

Mục đích:Ký số trực tiếp lên chuỗi giá trị băm (Hash string) tính toán sẵn từ client.
Phương thức:POST
Đường dẫn URL:<BaseUrl>/signing-matbaoca/signature-hash

Request truyền tham số Data dạng chuỗi chứa dữ liệu cần băm ký, trả về Data là chuỗi kết quả đã ký xác thực số hoàn tất.

6. Hàm tạo hợp đồng từ template có sẵn - File HTML cũ (signing-matbaoca/create-doc)

Mục đích:Khởi tạo hồ sơ tài liệu hợp đồng dựa trên mã mẫu ID cấu trúc file HTML lịch sử cũ.
Phương thức:POST
Đường dẫn URL:<BaseUrl>/signing-matbaoca/create-doc

Request Body truyền tham số gồm khóa định danh TemplateID và khối dữ liệu đối tượng JSON động Data chứa các cặp key-value biến đổi để map đổ dữ liệu vào biểu mẫu hợp đồng tương ứng.

7. Hàm tạo hợp đồng từ template thiết kế Web mới (signing-matbaoca/create-doc-v2)

Mục đích:Tạo đơn hoặc import danh sách số lượng lớn hợp đồng điện tử từ mẫu template thiết kế trực tiếp trên trình quản lý Web trực quan. Điều khiển linh hoạt luồng thứ tự ký.
Phương thức:POST
Đường dẫn URL:<BaseUrl>/signing-matbaoca/create-doc-v2

Đặc tả trường tham số nâng cao

Tên trường Định nghĩa kiểu và vai trò logic nghiệp vụ điều khiển Giá trị cấu hình quy định bắt buộc
TemplateIDMã ID quản lý biểu mẫu tài liệu thiết lập sẵnChuỗi ký tự - Bắt buộc
DocumentsMảng danh sách mảng đối tượng chứa thông tin trường động map hợp đồngMảng dữ liệu (Array)
FirstSigningCustomerQuy định phân định ai thực hiện luồng ký trước: 0: Phía Công ty ký trước | 1: Đối tác/Khách hàng ký trướcSố nguyên (int: 0 hoặc 1)
AllowSignCơ chế tự động ký duyệt của chủ quản: 0: Công ty ký thủ công | 1: Hệ thống tự động ký server khi đủ điều kiệnSố nguyên (int: 0 hoặc 1)
AutoApproveTự động phê duyệt hồ sơ đẩy luồng ký hành chínhMặc định truyền: true
WorkflowIdĐịnh danh luồng quy trình duyệt nội bộ nâng caoMặc định truyền: null
GetTypeĐịnh dạng trả về của tài liệu: 0: Không lấy PDF | 1: Lấy chuỗi base64 PDF trong response | 2: Chỉ lấy Link tải tệp PDF xem trực tuyếnSố nguyên (int: 0, 1, 2)
UrlCallbackCấu hình đường dẫn Webhook tiếp nhận dữ liệu đẩy về khi trạng thái hợp đồng thay đổiChuỗi Url (bắt đầu http/https)

8. Hàm tạo đồng loạt nhiều hợp đồng từ mẫu (signing-matbaoca/create-multi-doc)

URL: POST <BaseUrl>/signing-matbaoca/create-multi-doc

Cấu trúc request yêu cầu mảng thông tin tài khoản thụ hưởng nhận diện AccountsDocument chứa danh sách Email khách hàng tiếp nhận (Accounts/Email), kèm MaHopDong, TenHopDong riêng biệt của từng thành tố.

9. Hàm xem chi tiết thông tin hợp đồng (signing-matbaoca/view-doc)

URL: POST <BaseUrl>/signing-matbaoca/view-doc

Tham số truyền bao gồm mã DocumentID (UUID nhận về khi tạo thành công tài liệu), mã quản lý DocumentCode và trường phân loại Type (0: Không lấy dữ liệu Base64 file; 1: Lấy đầy đủ chuỗi ContentPDF chứa nội dung file phục vụ preview trực tiếp trên app).

10. Lưu hợp đồng kèm mẫu hình ảnh chữ ký tay (signing-matbaoca/signature-document)

Mục đích:Áp dụng cho luồng khách hàng cá nhân thực hiện ký xác thực qua mã OTP và đính kèm tệp ảnh ký tay trực quan.
Phương thức:POST
Đường dẫn URL:<BaseUrl>/signing-matbaoca/signature-document
Tên trường tham số Mô tả chi tiết logic kiểm thử OTP cấu hình Kiểu dữ liệu quy định
OTPTypeHình thức gửi mã xác thực xác minh danh tính: 0: Không kiểm thử OTP | 1: Gửi qua EMAIL | 2: Gửi tin nhắn SMS | 3: Xác thực qua Zalo ZNSSố nguyên (int: 0, 1, 2, 3)
DeviceOTPĐịa chỉ tiếp nhận tương ứng (Chuỗi chứa thông tin Email hoặc Số điện thoại nhận mã)Chuỗi ký tự
CodeOTPChuỗi ký tự chứa mã số OTP do khách hàng nhập đối chiếu xác thựcChuỗi ký tự
DocumentIDMã định danh duy nhất của tệp tài liệu hợp đồng điện tử cần xử lýChuỗi ký tự (UUID)
SignatureCustomerImage64Nội dung hình ảnh chữ ký nét vẽ tay của khách hàng mã hóa Base64Chuỗi hình ảnh Base64

11. Hàm tải lên và lưu trữ hợp đồng có sẵn tệp PDF (signing-matbaoca/upload-doc)

URL: POST <BaseUrl>/signing-matbaoca/upload-doc

Tham số: DocumentId (Khóa định danh tài liệu) và trường ContentPDF chứa dữ liệu nội dung file PDF cấu trúc của hợp đồng.

12. Hàm cập nhật trạng thái tiến trình hợp đồng (signing-matbaoca/upload-status)

URL: POST <BaseUrl>/signing-matbaoca/upload-status

Tham số điều khiển gồm DocumentId và chuỗi quy định trạng thái Status đồng bộ bắt buộc nhận một trong các giá trị chuẩn sau: DRAFT (Nháp), PROCESSING (Đang thực hiện luồng ký), DONE (Hoàn thành), CANCEL (Hủy bỏ hồ sơ), REJECT (Khách từ chối ký), ERROR (Lỗi xử lý nghiệp vụ), hoặc EXPIRE (Hết hạn thời hiệu hiệu lực).

13. Đăng ký thông tin dịch vụ cấp phát chứng thư (signing/register)

Phương thức:POST
Đường dẫn URL:<BaseUrl>/signing/register

Gửi dữ liệu hồ sơ pháp lý khách hàng để phục vụ quy trình thẩm định bao gồm thông tin: HoTen, ChucVu, Khoa (Phòng ban), CMND (Số thẻ căn cước), NgayCap, LoaiGiayTo, Email, DienThoai, GhiChu và mảng tệp đính kèm hình ảnh hồ sơ gốc Files chứa cụm đối tượng con gồm file_namebase64_file.

14. Hàm tra cứu danh sách quản lý hợp đồng (signing-matbaoca/view-list-docs)

Mục đích:Tìm kiếm, lọc nâng cao, phân trang và hiển thị thông tin chi tiết toàn bộ trạng thái tiến độ các hợp đồng.
Phương thức:POST
Đường dẫn URL:<BaseUrl>/signing-matbaoca/view-list-docs

Tham số lọc Request Body (Pagination & Filter)

Tên trường tham số Mô tả chi tiết nguyên tắc nghiệp vụ lọc dữ liệu Kiểu dữ liệu quy định
SearchTextTừ khóa tìm kiếm nhanh hợp đồng dựa theo cấu trúc Tên văn bảnChuỗi ký tự
PageSize / PageNumberSố lượng bản ghi trên một trang hiển thị / Số trang hiện hành tra cứuSố nguyên (int)
StatusBộ lọc danh sách trạng thái (Hỗ trợ lọc nhiều mã cùng lúc cách nhau bằng dấu phẩy, ví dụ: "PROCESSING, DONE")Chuỗi ký tự
DocumentCodeMã định danh số hiệu hợp đồng cần tìm kiếm chính xácChuỗi ký tự
NumberOfDaysCreateDateFromThời mốc lọc ngày khởi tạo từ ngày (Định dạng bắt buộc chuỗi: yyyy-MM-dd)Chuỗi ngày
NumberOfDaysCreateDateToThời mốc lọc ngày khởi tạo tới ngày (Định dạng bắt buộc chuỗi: yyyy-MM-dd).
Lưu ý quan trọng: Khoảng cách lọc giữa From và To không được vượt quá 10 ngày và phải truyền đồng thời cả 2 trường.
Chuỗi ngày

15. Hàm lấy danh sách các mẫu template hợp đồng (signing-matbaoca/view-list-templates)

URL: POST <BaseUrl>/signing-matbaoca/view-list-templates

Tham số Request gồm: SearchText (Tìm theo tên hoặc mã code mẫu), PageSize, và PageNumber. Trả về thông tin chi tiết định nghĩa cấu trúc mảng trường Columns cấu thành và khu vực phân vùng thiết lập chữ ký SignatureRegion của mẫu hợp đồng biểu mẫu.

16. Hàm thực hiện ký số trực tiếp lên hợp đồng tài liệu (signing-matbaoca/sign-document)

URL: POST <BaseUrl>/signing-matbaoca/sign-document

Request Payload truyền tham số định danh: DocumentId (Mã hợp đồng cần ký số) và trường dữ liệu tệp hình ảnh con dấu đại diện FileContentSignatureImage lưu dưới cấu trúc định dạng mã hóa chuỗi Base64 hoàn chỉnh.

17. Cấu hình cấu trúc JSON Payload Webhook Callback

Hệ thống hỗ trợ 2 loại sự kiện Webhook tự động kích hoạt đẩy dữ liệu trạng thái thời gian thực sang cổng đối tác: "Có người ký" (Kích hoạt ngay khi có một thực thể trong luồng ký hoàn tất) và sự kiện "Hoàn tất" (Kích hoạt khi toàn bộ các bên đã hoàn thành việc ký số).

Cấu trúc cấu thành cấu dữ liệu JSON Webhook đẩy về đối tác
{
  "Success": true,
  "CustomData": "200",
  "Data": {
    "DocumentStatus": "DONE", // Trạng thái tiến độ hồ sơ tổng quát: DONE (Hoàn thành) hoặc PROCESSING (Đang ký)
    "DocumentId": "b1a2c3d4-e5f6-...", // Khóa định danh hợp đồng điện tử duy nhất
    "ContentPDF": "https://api-econtract-mbc.matbao.in/storage/downloads/file.pdf", // Link tải file PDF hợp đồng trực tuyến
    "SignatoryData": [ // Mảng chi tiết thông tin tiến độ của từng người ký trong luồng biểu mẫu
      {
        "Status": "DONE", // Trạng thái người ký: DONE (Đã ký), PROCESSING (Đang ký), DRAFT (Chờ người khác ký)
        "FullName": "Nguyễn Văn A",
        "Email": "nguyenvana@gmail.com",
        "IsCurrentSigner": false // Chỉ định đây có phải là người đang giữ lượt ký hiện hành hay không
      }
    ]
  },
  "ErrorCode": null
}