Back to top

REMOTE SIGNING API DOCUMENT

Version v1.0

Giới Thiệu

EFY-RemoteSigning là giải pháp ký số từ xa, chứng thư số của người ký được lưu trên hệ thống Cloud của nhà cung cấp;

  • Tốc độ ký số nhanh, đáp ứng số lượng lớn người dùng;

  • Xác thực bảo mật đa nhân tố, sinh trắc học;

  • Hỗ trợ chạy đa nền tảng (Windows, MAC, Smartphone);

  • Giải pháp được triển khai cho nhiều khách hàng, dịch vụ như: BHXH điện tử, Hóa đơn điện tử, Chính phủ điện tử, Bệnh viện…được khánh hàng đánh giá cao;

  • Hỗ trợ ký số nhiều định dạng File: Word, Excel, Pdf, XML…;

  • Dễ tích hợp, triển khai.

Cơ chế xác thực

  • Remote Signing sử dụng Json Web Token để xác thực ứng dụng

Example Header

Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJhNnZoQW8zRkc3dDEiLCJuYW1lIjoiSm9obiBEb2UiLCJpYXQiOjE0NzA1OTg5NzIsImV4cCI6MTQ3MDY4NTM3Mn0.ltA9zZmJKszBJuuV7pTWtY7LzLXrRUfebJDhy_jGMeM

Danh Sách Hàm

Đăng nhập ứng dụng

Đăng nhập ứng dụng
POST/clients/login

Ứng dụng đăng nhập bằng tài khoản được Remote Signing cấp để lấy JSON Web Token

Example URI

POST https://api.remotesigning.vn/clients/login
Request  Login
HideShow
Headers
Content-Type: application/json
Body
{
  "username": "username",
  "password": "password",
  "rpCode": "TEST"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "username": {
      "type": "string",
      "description": "Tên đăng nhập của Relying party được cấp bởi Remote Signing"
    },
    "password": {
      "type": "string",
      "description": "Mật khẩu của Relying party được cấp bởi Remote Signing"
    },
    "rpCode": {
      "type": "string",
      "description": "Mã relying party"
    }
  },
  "required": [
    "username",
    "password",
    "rpCode"
  ]
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "token": "SlNPTiB3ZWIgdG9rZW4="
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "token": {
      "type": "string",
      "description": "JSON web token"
    }
  },
  "required": [
    "token"
  ]
}
Response  401
HideShow
Headers
Content-Type: application/json
Body
{
  "error": {
    "statusCode": "401",
    "name": "UnauthorizedError",
    "message": "Invalid username or password"
  }
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "error": {
      "type": "object",
      "properties": {
        "statusCode": {
          "type": "string",
          "description": "Mã lỗi"
        },
        "name": {
          "type": "string",
          "description": "Tên lỗi"
        },
        "message": {
          "type": "string",
          "description": "Mô tả lỗi"
        }
      }
    }
  }
}

Đăng ký chứng thư mới

Đăng ký chứng thư mới
POST/certificates/register

Tạo tài khoản và cấp chứng thư số cho khách hàng trên Remote Signing

Reference: Auth Mode, Shared Mode, Response Code

Example URI

POST https://api.remotesigning.vn/certificates/register
Request  Đăng ký chứng thư mới
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementDetails": {
    "applicationForm": "UmVtb3RlIFNpZ25pbmcgU2VydmljZSBhcHBsaWNhdGlvbiBmb3Jt",
    "authorizeLetter": "QXV0aG9yaXplIExldHRlciBieSBHb3Zlcm5tZW50L0NvcnBvcmF0ZQ==",
    "budgetID": "1234567890",
    "businessLicense": "QnVzaW5lc3NMaWNlbnNl",
    "citizenID": "1234567890",
    "country": "VN",
    "email": "your@email.ext",
    "location": "Cau giay, Ha Noi",
    "organization": "EFY Viet Nam",
    "organizationUnit": "'Development'",
    "passportID": "'C1223456'",
    "personalID": "'1234567890'",
    "personalName": "Nguyen Van A",
    "photoActivityDeclaration": "U2Nhbm5lZCBwaG90byBvZiDigJhJbml0aWFsIEFjdGl2aXR5L0FsdGVyYXRpb24gRGVjbGF0aW9u4oCZIHRoYXQgYXBwbGllZCBmb3IgY29ycG9yYXRlIGNlcnRpZmljYXRl",
    "photoAuthorizeDelegate": "cGhvdG9BdXRob3JpemVE",
    "photoIDCard": "U2Nhbm5lZCBwaG90byBvZiBJRCBDYXJkIHRoYXQgYXBwbGllZCBmb3IgcGVyc29uYWwgY2VydGlmaWNhdGU=",
    "requestForm": "UmVtb3RlIFNpZ25pbmcgU2VydmljZSByZXF1ZXN0IGZvcm0gZm9yIHJlY292ZXJ5LCByZXZvY2F0aW9uIOKApg==",
    "stateOrProvince": "Cau Giay, Ha Noi",
    "taxID": "'0123456789'",
    "telephoneNumber": "'0983456789'",
    "title": "Director"
  },
  "email": "your@email.ext",
  "mobileNo": "0123456789",
  "sharedMode": 1,
  "certificateProfile": "T2OSB21Y",
  "ownerEmail": "owner@gmail....",
  "ownerMobileNo": "12321312321",
  "ownerUUID": "sdfdfsdfsd",
  "acceptedApps": [
    "IHD",
    "EBHXH"
  ],
  "passCodeNotificationMethod": "EMAIL"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementDetails": {
      "type": "object",
      "properties": {
        "applicationForm": {
          "type": "string",
          "description": "Đơn đăng ký dịch vụ theo định dang Base64"
        },
        "authorizeLetter": {
          "type": "string",
          "description": "Giấy ủy quyền của Cơ quan/Doanh nghiệp theo định dạng Base64"
        },
        "budgetID": {
          "type": "string",
          "description": "**maxLength: 32** Mã ngân sách"
        },
        "businessLicense": {
          "type": "string",
          "description": "Giấy phép kinh doanh theo định dạng Base64"
        },
        "citizenID": {
          "type": "string",
          "description": "ID công dân"
        },
        "country": {
          "type": "string",
          "description": "**maxLength: 2** Mã quốc gia (Chỉ gồm 2 ký tự). Ví dụ: VN"
        },
        "email": {
          "type": "string",
          "description": "Địa chỉ email cá nhân"
        },
        "location": {
          "type": "string",
          "description": "Địa chỉ"
        },
        "organization": {
          "type": "string",
          "description": "Tên công ty"
        },
        "organizationUnit": {
          "type": "string",
          "description": "Tên phòng/ban"
        },
        "passportID": {
          "type": "string",
          "description": "**maxLength: 32** Số hộ chiếu cá nhân"
        },
        "personalID": {
          "type": "string",
          "description": "Số CMTND"
        },
        "personalName": {
          "type": "string",
          "description": "Tên khách hàng"
        },
        "photoActivityDeclaration": {
          "type": "string",
          "description": "Scanned photo of ‘Initial Activity/Alteration Declation’ that applied for corporate certificate as Base64 string"
        },
        "photoAuthorizeDelegate": {
          "type": "string",
          "description": "photoAuthorizeD as Base64 string"
        },
        "photoIDCard": {
          "type": "string",
          "description": "Ảnh quyets CMND hoặc hộ chiếu trong trường hợp cấp chứng thư số cá nhân theo định dạng Base64"
        },
        "requestForm": {
          "type": "string",
          "description": "Đơn yêu cầu khôi phục hoặc thu hồi chứng thứ số theo định dạng Base64"
        },
        "stateOrProvince": {
          "type": "string",
          "description": "Tỉnh/Thành Phố"
        },
        "taxID": {
          "type": "string",
          "description": "**maxLength: 32** Mã số thuế"
        },
        "telephoneNumber": {
          "type": "string",
          "description": "Số điện thoại khách hàng"
        },
        "title": {
          "type": "string",
          "description": "Chức vụ của khách hàng"
        }
      },
      "description": "Thông tin khách hàng. Dược sử dụng để tạo chứng thư số"
    },
    "email": {
      "type": "string",
      "description": "**maxLength: 128**  Email của khách hàng dùng để xác thực tài khoản"
    },
    "mobileNo": {
      "type": "string",
      "description": "**maxLength: 16** Số điện thoại của khách hàng dùng để xác thực tài khoản"
    },
    "sharedMode": {
      "type": "number",
      "enum": [
        1,
        2,
        3
      ],
      "default": 1,
      "description": "Chế độ chia sẻ nào được áp dụng cho chứng thư số"
    },
    "certificateProfile": {
      "type": "string",
      "enum": [
        "T2OSB21Y",
        "T2OSB22Y",
        "T2OSB23Y",
        "T2PSB21Y",
        "T2PSB22Y",
        "T2PSB23Y",
        "T2SFB21Y",
        "T2SFB22Y",
        "T2SFB23Y"
      ],
      "description": "Mã gói dịch vụ chữ ký số"
    },
    "ownerEmail": {
      "type": "string",
      "description": "email của owner"
    },
    "ownerMobileNo": {
      "type": "string",
      "description": "số điện thoại của owner"
    },
    "ownerUUID": {
      "type": "string",
      "description": "uuid của owner (trường hợp đăng ký thêm chứng thư cho owner thì cần phải truyền uuid của owner)"
    },
    "acceptedApps": {
      "type": "array",
      "items": [
        {
          "type": "string"
        },
        {
          "type": "string"
        }
      ],
      "description": "Các mã ứng dụng ký được chấp nhận"
    },
    "passCodeNotificationMethod": {
      "type": "string",
      "enum": [
        "EMAIL",
        "SMS"
      ],
      "default": "1",
      "description": "Phương thức nhận mã PIN"
    }
  },
  "required": [
    "agreementDetails",
    "email",
    "mobileNo",
    "certificateProfile",
    "ownerEmail",
    "ownerMobileNo",
    "ownerUUID"
  ]
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "responseCode": 1007,
  "responseMessage": "REQUEST ACCEPTED",
  "billCode": "EFY_CA",
  "timestamp": "2020-02-28T13:28:42+07:00",
  "status": true,
  "csr": "Q1NSIHdpbGwgYmUgcmVzcG9uZWQgaWYgdGhlIGNzclJlcXVpcmVkIHNldCBUUlVFIGluIHRoZSByZXF1ZXN0Lg==",
  "ownerUUID": "sdfdfsdfsd",
  "agreementUUID": "13ae13a443e2"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "responseCode": {
      "type": "number",
      "description": "Mã kết quả. Thông thường sẽ là 1007"
    },
    "responseMessage": {
      "type": "string",
      "description": "Mô tả chi tiết kết quả"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "timestamp": {
      "type": "string",
      "description": "Timestamp hiện tại"
    },
    "status": {
      "type": "boolean",
      "description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
    },
    "csr": {
      "type": "string",
      "description": "chuỗi CSR được trả về nếu giá trị csrRequired trong chuỗi yêu cầu có giá trị là `true`."
    },
    "ownerUUID": {
      "type": "string",
      "description": "uuid của owner (trường hợp đăng ký thêm chứng thư cho owner thì cần phải truyền uuid của owner)"
    },
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    }
  },
  "required": [
    "responseCode",
    "ownerUUID",
    "agreementUUID"
  ]
}

Cập nhật thông tin chứng thư

Cập nhật thông tin chứng thư
POST/certificates/change

Thay đổi thông tin chứng thư dựa vào agreementUUID (được trả về từ hàm (đăng ký)[#danh-sach-ham-dang-ky-chung-thu-moi-post]). Chứng thư mới sẽ được tạo với ngày hết hạn giống với chứng thư cũ. Lưu ý, Bạn không thể thay đổi các thông tin: personalID, passportID, taxID and budgetID, bởi vì chúng được sử dụng để đại diện cho agreementUUID.

Reference: Auth Mode, Shared Mode, Response Code

Example URI

POST https://api.remotesigning.vn/certificates/change
Request  Change certificate infomation
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementDetails": {
    "applicationForm": "UmVtb3RlIFNpZ25pbmcgU2VydmljZSBhcHBsaWNhdGlvbiBmb3Jt",
    "authorizeLetter": "QXV0aG9yaXplIExldHRlciBieSBHb3Zlcm5tZW50L0NvcnBvcmF0ZQ==",
    "budgetID": "1234567890",
    "businessLicense": "QnVzaW5lc3NMaWNlbnNl",
    "citizenID": "1234567890",
    "country": "VN",
    "email": "your@email.ext",
    "location": "Cau giay, Ha Noi",
    "organization": "EFY Viet Nam",
    "organizationUnit": "'Development'",
    "passportID": "'C1223456'",
    "personalID": "'1234567890'",
    "personalName": "Nguyen Van A",
    "photoActivityDeclaration": "U2Nhbm5lZCBwaG90byBvZiDigJhJbml0aWFsIEFjdGl2aXR5L0FsdGVyYXRpb24gRGVjbGF0aW9u4oCZIHRoYXQgYXBwbGllZCBmb3IgY29ycG9yYXRlIGNlcnRpZmljYXRl",
    "photoAuthorizeDelegate": "cGhvdG9BdXRob3JpemVE",
    "photoIDCard": "U2Nhbm5lZCBwaG90byBvZiBJRCBDYXJkIHRoYXQgYXBwbGllZCBmb3IgcGVyc29uYWwgY2VydGlmaWNhdGU=",
    "requestForm": "UmVtb3RlIFNpZ25pbmcgU2VydmljZSByZXF1ZXN0IGZvcm0gZm9yIHJlY292ZXJ5LCByZXZvY2F0aW9uIOKApg==",
    "stateOrProvince": "Cau Giay, Ha Noi",
    "taxID": "'0123456789'",
    "telephoneNumber": "'0983456789'",
    "title": "Director"
  },
  "agreementUUID": "13ae13a443e2"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementDetails": {
      "type": "object",
      "properties": {
        "applicationForm": {
          "type": "string",
          "description": "Đơn đăng ký dịch vụ theo định dang Base64"
        },
        "authorizeLetter": {
          "type": "string",
          "description": "Giấy ủy quyền của Cơ quan/Doanh nghiệp theo định dạng Base64"
        },
        "budgetID": {
          "type": "string",
          "description": "**maxLength: 32** Mã ngân sách"
        },
        "businessLicense": {
          "type": "string",
          "description": "Giấy phép kinh doanh theo định dạng Base64"
        },
        "citizenID": {
          "type": "string",
          "description": "ID công dân"
        },
        "country": {
          "type": "string",
          "description": "**maxLength: 2** Mã quốc gia (Chỉ gồm 2 ký tự). Ví dụ: VN"
        },
        "email": {
          "type": "string",
          "description": "Địa chỉ email cá nhân"
        },
        "location": {
          "type": "string",
          "description": "Địa chỉ"
        },
        "organization": {
          "type": "string",
          "description": "Tên công ty"
        },
        "organizationUnit": {
          "type": "string",
          "description": "Tên phòng/ban"
        },
        "passportID": {
          "type": "string",
          "description": "**maxLength: 32** Số hộ chiếu cá nhân"
        },
        "personalID": {
          "type": "string",
          "description": "Số CMTND"
        },
        "personalName": {
          "type": "string",
          "description": "Tên khách hàng"
        },
        "photoActivityDeclaration": {
          "type": "string",
          "description": "Scanned photo of ‘Initial Activity/Alteration Declation’ that applied for corporate certificate as Base64 string"
        },
        "photoAuthorizeDelegate": {
          "type": "string",
          "description": "photoAuthorizeD as Base64 string"
        },
        "photoIDCard": {
          "type": "string",
          "description": "Ảnh quyets CMND hoặc hộ chiếu trong trường hợp cấp chứng thư số cá nhân theo định dạng Base64"
        },
        "requestForm": {
          "type": "string",
          "description": "Đơn yêu cầu khôi phục hoặc thu hồi chứng thứ số theo định dạng Base64"
        },
        "stateOrProvince": {
          "type": "string",
          "description": "Tỉnh/Thành Phố"
        },
        "taxID": {
          "type": "string",
          "description": "**maxLength: 32** Mã số thuế"
        },
        "telephoneNumber": {
          "type": "string",
          "description": "Số điện thoại khách hàng"
        },
        "title": {
          "type": "string",
          "description": "Chức vụ của khách hàng"
        }
      },
      "description": "Thông tin khách hàng. Dược sử dụng để tạo chứng thư số"
    },
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    }
  },
  "required": [
    "agreementDetails",
    "agreementUUID"
  ]
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "responseCode": 1007,
  "responseMessage": "REQUEST ACCEPTED",
  "billCode": "EFY_CA",
  "timestamp": "2020-02-28T13:28:42+07:00",
  "status": true,
  "csr": "Q1NSIHdpbGwgYmUgcmVzcG9uZWQgaWYgdGhlIGNzclJlcXVpcmVkIHNldCBUUlVFIGluIHRoZSByZXF1ZXN0Lg==",
  "ownerUUID": "sdfdfsdfsd",
  "agreementUUID": "13ae13a443e2"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "responseCode": {
      "type": "number",
      "description": "Mã kết quả. Thông thường sẽ là 1007"
    },
    "responseMessage": {
      "type": "string",
      "description": "Mô tả chi tiết kết quả"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "timestamp": {
      "type": "string",
      "description": "Timestamp hiện tại"
    },
    "status": {
      "type": "boolean",
      "description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
    },
    "csr": {
      "type": "string",
      "description": "chuỗi CSR được trả về nếu giá trị csrRequired trong chuỗi yêu cầu có giá trị là `true`."
    },
    "ownerUUID": {
      "type": "string",
      "description": "uuid của owner (trường hợp đăng ký thêm chứng thư cho owner thì cần phải truyền uuid của owner)"
    },
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    }
  },
  "required": [
    "responseCode",
    "ownerUUID",
    "agreementUUID"
  ]
}

Cập nhật mã pin của tài khoản

Cập nhật mã pin của tài khoản
POST/certificates/change-pin

Cập nhật mã pin của tài khoản

Reference: Response Code

Example URI

POST https://api.remotesigning.vn/certificates/change-pin
Request  Cập nhật mã pin của tài khoản
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2",
  "currentPasscode": "Hello, world!",
  "newPasscode": "Hello, world!"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    },
    "currentPasscode": {
      "type": "string",
      "description": "Mã PIN hiện tại"
    },
    "newPasscode": {
      "type": "string",
      "description": "Mã PIN mới"
    }
  },
  "required": [
    "agreementUUID",
    "currentPasscode",
    "newPasscode"
  ]
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "responseCode": 1007,
  "responseMessage": "REQUEST ACCEPTED",
  "billCode": "EFY_CA",
  "timestamp": "2020-02-28T13:28:42+07:00",
  "status": true,
  "remainingCounter": 1
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "responseCode": {
      "type": "number",
      "description": "Mã kết quả. Thông thường sẽ là 1007"
    },
    "responseMessage": {
      "type": "string",
      "description": "Mô tả chi tiết kết quả"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "timestamp": {
      "type": "string",
      "description": "Timestamp hiện tại"
    },
    "status": {
      "type": "boolean",
      "description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
    },
    "remainingCounter": {
      "type": "number",
      "description": "Sau khi thay đổi mã PIN thành công, tham số này sẽ là bộ đếm tối đa được cấu hình trên Remote Signin. Mỗi khi thay đổi mã PIN không thay công tham số này sẽ bị giảm đi 1. Nếu tham số này về 0 yêu cầu sẽ bị chặn. Sau một khoảng thời gian (được cấu hình trên Remote Signing) thì sẽ được bỏ chặn tự động."
    }
  },
  "required": [
    "responseCode"
  ]
}

Lây thông tin chứng thư

Lây thông tin chứng thư
POST/certificates/get-detail

Trả về thông tin chi tiết của một chứng thư dựa vào agreementUUID

Reference: Response Code

Example URI

POST https://api.remotesigning.vn/certificates/get-detail
Request  Lây thông tin chứng thư
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    }
  },
  "required": [
    "agreementUUID"
  ]
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "responseCode": 1007,
  "responseMessage": "REQUEST ACCEPTED",
  "billCode": "EFY_CA",
  "timestamp": "2020-02-28T13:28:42+07:00",
  "status": true,
  "certificateDN": "E.g: CN=Nguyen Van A, O=B Company,C=VN",
  "certificateSerialNumber": "54010A5560E78C1DAC82237E280A775F",
  "certificateThumbprint": "B72E67D9DE53332B632A7863F7BF5AA77AD0D08C",
  "validFrom": "2020-02-26T16:03:05+07:00",
  "validTo": "2021-02-25T16:03:05+07:00",
  "issuerDN": "CN=Mobile-ID Trusted Network, O=MOBILE-ID,C=VN",
  "certificate": "`MIIFCDCCA/CgAwIBAgIQVAEKVWDnjB2sgiN+KAp3XzANBgkqhkiG9w0BAQsFADBwMQswCQYDVQQGEwJWTjEOMAwGA1UECAwFSGFub2kxLzAtBgNVBAoMJlZpZXRuYW0gRUZZIEluZm9ybWF0aWNzIFRlY2hub2xvZ3kgSlNDMQ8wDQYDVQQLDAZFRlktQ0ExDzANBgNVBAMMBkVGWS1DQTAeFw0yMDAyMjYwOTAzMDVaFw0yMTAyMjUwOTAzMDVaMIG9MQswCQYDVQQGEwJWTjESMBAGA1UECAwJSMOgIE7hu5lpMRIwEAYDVQQHDAlIw6AgTuG7mWkxITAfBgNVBAoMGFRy4buLbmggUXVhbmcgVMOibihURVNUKTEhMB8GA1UEAwwYVHLhu4tuaCBRdWFuZyBUw6JuKFRFU1QpMR4wHAYKCZImiZPyLGQBAQwOTVNUOjAxMDI1MTkwNDExIDAeBgkqhkiG9w0BCQEWEXRhbnRxMUBtc2IuY29tLnZuMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsJR5TAL1k8bOe/XWqQOt+Tcb6bD+ewshla8Wtb0ra+HtsK95A53v+HpqaWq56JGCj2hf/JKPjY1AgKk0hhMWBJ5zEaY2T9NilTY9Xhg5JOVCKYhSCCWnBbCDvpX1v2AJhXsdGIGfODvN3IXWTHuibXbx83ySg/kuU85OYKtkkN+hetZ1VP5YhJ+pYTsDsN7AO1cAWFcwUJ6LVioBGFExYor9yIy4wAnVrtdLRcDB+k5I5M4F50tnV6WonRKJr2Kgr8donxrpacUOLSx/82hnjC0Ao06V/4gK5mTULTKaKVd6/81ojZaSC/LqomvMTiNh/VmGRRHC5XyH3h80wnNB+wIDAQABo4IBTjCCAUowDAYDVR0TAQH/BAIwADAfBgNVHSMEGDAWgBSVZcCLWVCoN6j/HF2jLqiErg+oHzBjBggrBgEFBQcBAQRXMFUwMQYIKwYBBQUHMAKGJWh0dHA6Ly92YS5lZnljYS52bi9jZXJ0cy9lZnljYTI1Ni5jcnQwIAYIKwYBBQUHMAGGFGh0dHA6Ly9vY3NwLmVmeWNhLnZuMBwGA1UdEQQVMBOBEXRhbnRxMUBtc2IuY29tLnZuMBgGA1UdIAQRMA8wDQYLKwYBBAGB7QMBCgEwHQYDVR0lBBYwFAYIKwYBBQUHAwIGCCsGAQUFBwMEMC4GA1UdHwQnMCUwI6AhoB+GHWh0dHA6Ly92YS5lZnljYS52bi9wdWIvQ1JMMjU2MB0GA1UdDgQWBBRPPntMvfBNLV4vbgbKNtSELRAacDAOBgNVHQ8BAf8EBAMCBeAwDQYJKoZIhvcNAQELBQADggEBAKRAweGZff+FUKFujeFTQrm8oJ/SvekG+gBKPLpHfjJz4Pw5EDfjiRV3hh86iUYDziRlVOFuMShwDCssJK3ru+rfpvlQHEPsK4LQ8lj6SEbUEfoMRq7fU1CPx8JjHPcFDVV7zb0H8+5HAUM1Llr84Sqocve+AGHMZKf4GafDAT4GLxR7vENB1gWBnfI6ZFQKUWPNcomPvEEbV0Buxcvu3SRTQFsYt4HCf3XU6xMeLzb1g7MsgE0ZjtFBwv7AoJCo2BIk4NJVJ5i0QIqxFkYeXczo8cIDDRr7bMqiccQeNGsaQMEvz+n1gnk+BgwkmRjASEHgtIJhWeNhZo6QMZjtbjw=",
  "sharedMode": 1,
  "authModeSupported": [
    ""
  ]
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "responseCode": {
      "type": "number",
      "description": "Mã kết quả. Thông thường sẽ là 1007"
    },
    "responseMessage": {
      "type": "string",
      "description": "Mô tả chi tiết kết quả"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "timestamp": {
      "type": "string",
      "description": "Timestamp hiện tại"
    },
    "status": {
      "type": "boolean",
      "description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
    },
    "certificateDN": {
      "type": "string",
      "description": "`Thông tin của chủ sở hữu chứng thư số (DN). E.g: CN=Nguyen Van A, O=B Company,C=VN`"
    },
    "certificateSerialNumber": {
      "type": "string",
      "description": "`Serial number của chứng thư số E.g: 5405ABCDEF`"
    },
    "certificateThumbprint": {
      "type": "string",
      "description": "Thumbprint chứng thư số (certificate hash)"
    },
    "validFrom": {
      "type": "string",
      "description": "Thời điểm chứng thư số bắt đầu có hiệu lực"
    },
    "validTo": {
      "type": "string",
      "description": "Thời điểm chứng thư số hết hiệu lực"
    },
    "issuerDN": {
      "type": "string",
      "description": "`Thông tin nhà phát hành chứng thư số (DN) E.g: CN=Mobile-ID Trusted Network, O=MOBILE-ID,C=VN`"
    },
    "certificate": {
      "type": "string",
      "description": "` (string, optional) - Chứng thư số"
    },
    "sharedMode": {
      "type": "number",
      "enum": [
        1,
        2,
        3
      ],
      "default": 1,
      "description": "Chế độ chia sẻ nào được áp dụng cho chứng thư số"
    },
    "authModeSupported": {
      "type": "array",
      "items": {
        "type": "string",
        "enum": [
          "EXPLICIT/PIN",
          "EXPLICIT/OTP-SMS",
          "EXPLICIT/OTP-EMAIL"
        ]
      },
      "description": "Mảng các hình thức xác thực được hỗ trợ"
    }
  },
  "required": [
    "responseCode"
  ]
}

Quên mã pin

Quên mã pin
POST/certificates/forget-pin

Hàm này được dùng khi NSD quên mã pin, Sau khi gọi yêu cầu Remote Signing sẽ sinh mới mật khẩu và gửi về cho NSD qua địa chỉ email đã đăng ký

Reference: Response Code

Example URI

POST https://api.remotesigning.vn/certificates/forget-pin
Request  Forget Pin Certificate
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2",
  "notificationTemplate": "Mật khẩu mới của bạn là: {Passcode}. Mật khẩu này sẽ hết hạn sau 30 ngày",
  "notificationSubject": "EFY - Mật khẩu Remote Signing"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    },
    "notificationTemplate": {
      "type": "string",
      "description": "Định dạng thông điệp sẽ được gửi vào mail của khách hàng trong đó bao gồm mật khẩu mới được sinh ngẫu nhiên. Ví dụ: Mật khẩu mới của bạn là: {Passcode}. Mật khẩu này sẽ hết hạn sau 30 ngày"
    },
    "notificationSubject": {
      "type": "string",
      "description": "Định dang tiêu đề Email được Remote Signing gửi khi khách hàng gửi yêu cầu quên mật khẩu."
    }
  },
  "required": [
    "agreementUUID"
  ]
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "responseCode": 1007,
  "responseMessage": "REQUEST ACCEPTED",
  "billCode": "EFY_CA",
  "timestamp": "2020-02-28T13:28:42+07:00",
  "status": true
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "responseCode": {
      "type": "number",
      "description": "Mã kết quả. Thông thường sẽ là 1007"
    },
    "responseMessage": {
      "type": "string",
      "description": "Mô tả chi tiết kết quả"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "timestamp": {
      "type": "string",
      "description": "Timestamp hiện tại"
    },
    "status": {
      "type": "boolean",
      "description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
    }
  },
  "required": [
    "responseCode"
  ]
}

Gia hạn chứng thư

Gia hạn chứng thư
POST/certificates/renew

Gia hạn thời gian sử dụng của chứng thư. Bạn có thể thay đổi gói dịch vụ của chứng thư mới bằng cách truyền thêm tham số certificateProfile.

Reference: Response Code

Example URI

POST https://api.remotesigning.vn/certificates/renew
Request  Gia hạn chứng thư
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2",
  "certificateProfile": "T2OSB21Y"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    },
    "certificateProfile": {
      "type": "string",
      "enum": [
        "T2OSB21Y",
        "T2OSB22Y",
        "T2OSB23Y",
        "T2PSB21Y",
        "T2PSB22Y",
        "T2PSB23Y",
        "T2SFB21Y",
        "T2SFB22Y",
        "T2SFB23Y"
      ],
      "description": "Mã gói dịch vụ chữ ký số"
    }
  },
  "required": [
    "agreementUUID",
    "certificateProfile"
  ]
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "responseCode": 1007,
  "responseMessage": "REQUEST ACCEPTED",
  "billCode": "EFY_CA",
  "timestamp": "2020-02-28T13:28:42+07:00",
  "status": true
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "responseCode": {
      "type": "number",
      "description": "Mã kết quả. Thông thường sẽ là 1007"
    },
    "responseMessage": {
      "type": "string",
      "description": "Mô tả chi tiết kết quả"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "timestamp": {
      "type": "string",
      "description": "Timestamp hiện tại"
    },
    "status": {
      "type": "boolean",
      "description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
    }
  },
  "required": [
    "responseCode"
  ]
}

Thu hồi chứng thư

Thu hồi chứng thư
POST/certificates/revoke

Xóa tài khoản của NSD và thu hồi chứng thư trên Remote Signing.

Reference: Response Code

Example URI

POST https://api.remotesigning.vn/certificates/revoke
Request  Thu hồi chứng thư
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    }
  },
  "required": [
    "agreementUUID"
  ]
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "responseCode": 1007,
  "responseMessage": "REQUEST ACCEPTED",
  "billCode": "EFY_CA",
  "timestamp": "2020-02-28T13:28:42+07:00",
  "status": true
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "responseCode": {
      "type": "number",
      "description": "Mã kết quả. Thông thường sẽ là 1007"
    },
    "responseMessage": {
      "type": "string",
      "description": "Mô tả chi tiết kết quả"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "timestamp": {
      "type": "string",
      "description": "Timestamp hiện tại"
    },
    "status": {
      "type": "boolean",
      "description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
    }
  },
  "required": [
    "responseCode"
  ]
}

Tạm ngừng chứng thư

Tạm ngừng chứng thư
POST/certificates/disable

Tạm ngừng các hoạt động liên quan đến ký và xác minh chứng thư số.

Reference: Response Code

Example URI

POST https://api.remotesigning.vn/certificates/disable
Request  Tạm ngừng chứng thư
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    }
  },
  "required": [
    "agreementUUID"
  ]
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "responseCode": 1007,
  "responseMessage": "REQUEST ACCEPTED",
  "billCode": "EFY_CA",
  "timestamp": "2020-02-28T13:28:42+07:00",
  "status": true
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "responseCode": {
      "type": "number",
      "description": "Mã kết quả. Thông thường sẽ là 1007"
    },
    "responseMessage": {
      "type": "string",
      "description": "Mô tả chi tiết kết quả"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "timestamp": {
      "type": "string",
      "description": "Timestamp hiện tại"
    },
    "status": {
      "type": "boolean",
      "description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
    }
  },
  "required": [
    "responseCode"
  ]
}

Kích hoạt lại chứng thư số

Kích hoạt lại chứng thư số
POST/certificates/enable

Kích hoạt lại các hoạt động liên quan đến ký và xác mình chứng thư số

Reference: Response Code

Example URI

POST https://api.remotesigning.vn/certificates/enable
Request  Kích hoạt lại chứng thư số
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    }
  },
  "required": [
    "agreementUUID"
  ]
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "responseCode": 1007,
  "responseMessage": "REQUEST ACCEPTED",
  "billCode": "EFY_CA",
  "timestamp": "2020-02-28T13:28:42+07:00",
  "status": true
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "responseCode": {
      "type": "number",
      "description": "Mã kết quả. Thông thường sẽ là 1007"
    },
    "responseMessage": {
      "type": "string",
      "description": "Mô tả chi tiết kết quả"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "timestamp": {
      "type": "string",
      "description": "Timestamp hiện tại"
    },
    "status": {
      "type": "boolean",
      "description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
    }
  },
  "required": [
    "responseCode"
  ]
}

Ký file

Ký file
POST/signing/file

Gửi yêu cầu ký file lên Remote Signing, đồng thời truyền lên nội dung file. Nếu hình thức xác thực được chọn là OTP (EMAIL hoặc SMS). Thì một mã xác thực sẽ được gửi về email hoặc số điện thoại của NSD. Ngoài ra nội dung file đã được ký sẽ được trả về cho ứng dụng.

Reference: Auth Mode, Response Code, SignCloudMetaData

Example URI

POST https://api.remotesigning.vn/signing/file
Request  Ký file
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2",
  "authMode": "Hello, world!",
  "authorizeCode": "12345678",
  "mimeType": "application/pdf",
  "signingFileData": "RmlsZSB0aGF0IHdpbGwgYmUgc2lnbmVk",
  "signCloudMetaData": {
    "'singletonSigning'": {
      "entry": [
        {
          "key": "Hello, world!",
          "value": "Hello, world!"
        }
      ]
    },
    "'counterSigning'": {
      "entry": [
        {
          "key": "Hello, world!",
          "value": "Hello, world!"
        }
      ]
    }
  },
  "notificationSubject": "EFY - Xác thực tài khoản",
  "notificationTemplate": "EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút",
  "signingApp": "IHD",
  "docId": "RP_TEST-210422154526-39084-614900"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    },
    "authMode": {
      "type": "string",
      "enum": [
        "EXPLICIT/PIN",
        "EXPLICIT/OTP-SMS",
        "EXPLICIT/OTP-EMAIL",
        "EXPLICIT/PIN"
      ],
      "default": "EXPLICIT/PIN",
      "description": "Hình thức xác thực"
    },
    "authorizeCode": {
      "type": "string",
      "description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
    },
    "mimeType": {
      "type": "string",
      "description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
    },
    "signingFileData": {
      "type": "string",
      "description": "Nội dung file cần ký theo định dạng Base64."
    },
    "signCloudMetaData": {
      "type": "object",
      "properties": {
        "'singletonSigning'": {
          "type": "object",
          "properties": {
            "entry": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "key": {
                    "type": "string",
                    "description": "key"
                  },
                  "value": {
                    "type": "string",
                    "description": "value"
                  }
                }
              }
            }
          },
          "description": "Thông tin ký dành cho khách hàng"
        },
        "'counterSigning'": {
          "type": "object",
          "properties": {
            "entry": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "key": {
                    "type": "string",
                    "description": "key"
                  },
                  "value": {
                    "type": "string",
                    "description": "value"
                  }
                }
              }
            }
          },
          "description": "Thông tin ký dành cho tổ chức"
        }
      },
      "description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
    },
    "notificationSubject": {
      "type": "string",
      "description": "Định dang tiêu đề Email được Remote Signing gửi mã xác thực OTP."
    },
    "notificationTemplate": {
      "type": "string",
      "description": "Định dạng thông điệp sẽ được gửi vào mail của khách hàng trong đó chứa mã xác thực (OTP) được sinh ngẫu nhiên. Ví dụ: EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút"
    },
    "signingApp": {
      "type": "string",
      "description": "Mã ứng dụng ký"
    },
    "docId": {
      "type": "string",
      "description": "ID tài liệu, sử dụng để định danh tài liệu trường hợp 1 file ký nhiều lần, client muốn định danh tài liệu để có thể lấy về file đã ký sau cùng của tài liệu. Khi thực hiện ký lần đầu hệ thống sẽ trả về docId, những lần ký sau client truyền thêm docId (truyền vào hàm signFile và hàm authorizeFile) lên để xác định lần ký này cho tài liệu nào. Client có thể tải file đã ký mới nhất qua hàm downloadDocument"
    }
  },
  "required": [
    "agreementUUID",
    "authMode",
    "mimeType",
    "signingFileData"
  ]
}
Request  TH1: Ký file PDF
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2",
  "authMode": "EXPLICIT/PIN",
  "authorizeCode": "12345678",
  "mimeType": "application/pdf",
  "signingFileData": "JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==",
  "signCloudMetaData": {
    "singletonSigning": {
      "entry": [
        {
          "key": "VISIBLESIGNATURE",
          "value": "true"
        },
        {
          "key": "COORDINATE",
          "value": "0,0,300,60"
        },
        {
          "key": "TEXTDIRECTION",
          "value": "RIGHTTOLEFT"
        },
        {
          "key": "VISUALSTATUS",
          "value": "false"
        },
        {
          "key": "IMAGEANDTEXT",
          "value": "true"
        },
        {
          "key": "TEXTCOLOR",
          "value": "blue"
        },
        {
          "key": "PAGENO",
          "value": "1"
        },
        {
          "key": "SIGNATUREIMAGE",
          "value": "iVBORw0KGgoAAAANSUhEUgAAAEIAAABBCAYAAABlwHJGAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7cGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDowRTJEMDRBRjk5M0VFNjExQTIwMkFCRjUwNERDMUIxQTwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6YmRlODA2OTctNzE0Yy0xMWU4LWI2NDctYzE5YWIzZTM1ZGMzPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjNkMTg3YTc0LTgxNDQtYzU0MS1hMzE5LTU4OWUzNmI3MTU4MzwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgPHN0UmVmOmluc3RhbmNlSUQ+eG1wLmlpZDpGMUVEQjU2Q0ZGNkFFODExOEI0Nzg0NDhGMDdFNEVBRDwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDowRTJEMDRBRjk5M0VFNjExQTIwMkFCRjUwNERDMUIxQTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjU2ODY5Nzg1LTYzMWEtOGU0ZC04ODBkLTM0YzM4ZTI2NmVhZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wNi0xNlQxNzowNToyMyswNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjNkMTg3YTc0LTgxNDQtYzU0MS1hMzE5LTU4OWUzNmI3MTU4Mzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wNi0xNlQxNzowNToyMyswNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOC0wNi0xMVQxMzoxMzoyMSswNzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE4LTA2LTE2VDE3OjA1OjIzKzA3OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wNi0xNlQxNzowNToyMyswNzowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjY1PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5V4kAUAAAAIGNIUk0AAHolAACAgwAA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"
        }
      ]
    }
  },
  "signingApp": "IHD",
  "docId": "RP_TEST-210422154526-39084-614900"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    },
    "authMode": {
      "type": "string",
      "description": "Hình thức xác thực"
    },
    "authorizeCode": {
      "type": "string",
      "description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
    },
    "mimeType": {
      "type": "string",
      "description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
    },
    "signingFileData": {
      "type": "string",
      "description": "Nội dung file cần ký theo định dạng Base64."
    },
    "signCloudMetaData": {
      "type": "object",
      "properties": {
        "singletonSigning": {
          "type": "object",
          "properties": {
            "entry": {
              "type": "array",
              "items": [
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
    },
    "signingApp": {
      "type": "string",
      "description": "Mã ứng dụng ký"
    },
    "docId": {
      "type": "string",
      "description": "ID tài liệu, sử dụng để định danh tài liệu trường hợp 1 file ký nhiều lần, client muốn định danh tài liệu để có thể lấy về file đã ký sau cùng của tài liệu. Khi thực hiện ký lần đầu hệ thống sẽ trả về docId, những lần ký sau client truyền thêm docId (truyền vào hàm signFile và hàm authorizeFile) lên để xác định lần ký này cho tài liệu nào. Client có thể tải file đã ký mới nhất qua hàm downloadDocument"
    }
  },
  "required": [
    "agreementUUID",
    "authMode",
    "mimeType",
    "signingFileData"
  ]
}
Request  TH2: Ký file XML
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2",
  "authMode": "EXPLICIT/PIN",
  "authorizeCode": "12345678",
  "mimeType": "application/xml",
  "signingFileData": "77u/PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KPGludjppbnZvaWNlIHhtbG5zOmludj0iaHR0cDovL2xhcGhvYWRvbi5nZHQuZ292LnZuLzIwMTQvMDkvaW52b2ljZXhtbC92MSIgDQogIHhtbG5zOmRzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwLzA5L3htbGRzaWcjIj4NCiAgPGludjppbnZvaWNlRGF0YSBpZD0iZGF0YSI+DQogICAgPGludjppbnZvaWNlVHlwZT4wMkdUVFQ8L2ludjppbnZvaWNlVHlwZT4NCiAgICA8aW52OnRlbXBsYXRlQ29kZT4wMkdUVFQwLzAwMTwvaW52OnRlbXBsYXRlQ29kZT4NCiAgICA8aW52Omludm9pY2VTZXJpZXM+QUIvMjBFPC9pbnY6aW52b2ljZVNlcmllcz4NCiAgICA8aW52Omludm9pY2VOdW1iZXI+MDAwMDAwMTwvaW52Omludm9pY2VOdW1iZXI+DQogICAgPGludjppbnZvaWNlSXNzdWVkRGF0ZT4yMDIwLTAxLTA4VDAwOjAwOjAwPC9pbnY6aW52b2ljZUlzc3VlZERhdGU+DQogICAgPGludjpzaWduZWREYXRlPg0KICAgIDwvaW52OnNpZ25lZERhdGU+DQogICAgPGludjpjdXJyZW5jeUNvZGU+Vk5EPC9pbnY6Y3VycmVuY3lDb2RlPg0KICAgIDxpbnY6YWRqdXN0bWVudFR5cGU+MTwvaW52OmFkanVzdG1lbnRUeXBlPg0KICAgIDxpbnY6cGF5bWVudHM+DQogICAgICA8aW52OnBheW1lbnQ+DQogICAgICAgIDxpbnY6cGF5bWVudE1ldGhvZE5hbWU+VE0vQ0s8L2ludjpwYXltZW50TWV0aG9kTmFtZT4NCiAgICAgIDwvaW52OnBheW1lbnQ+DQogICAgPC9pbnY6cGF5bWVudHM+DQogICAgPGludjpkZWxpdmVyeSAvPg0KICAgIDxpbnY6c2VsbGVyTGVnYWxOYW1lPkPDtG5nIFR5IEPhu5UgUGjhuqduIEPDtG5nIE5naOG7hyBUaW4gSOG7jWMgRUZZIFZp4buHdCBOYW08L2ludjpzZWxsZXJMZWdhbE5hbWU+DQogICAgPGludjpzZWxsZXJUYXhDb2RlPjAxMDI1MTkwNDE8L2ludjpzZWxsZXJUYXhDb2RlPg0KICAgIDxpbnY6c2VsbGVyQWRkcmVzc0xpbmU+VMOyYSBOaMOgIFNhbk5hbSBGb29kLCA3OCBEdXkgVMOibiwgQ+G6p3UgR2nhuqV5LCBIw6AgTuG7mWk8L2ludjpzZWxsZXJBZGRyZXNzTGluZT4NCiAgICA8aW52OnNlbGxlckZheE51bWJlcj4NCiAgICA8L2ludjpzZWxsZXJGYXhOdW1iZXI+DQogICAgPGludjpzZWxsZXJFbWFpbD4NCiAgICA8L2ludjpzZWxsZXJFbWFpbD4NCiAgICA8aW52OmRlbGl2ZXJ5T3JkZXJOdW1iZXI+DQogICAgPC9pbnY6ZGVsaXZlcnlPcmRlck51bWJlcj4NCiAgICA8aW52OmRlbGl2ZXJ5T3JkZXJCeT4NCiAgICA8L2ludjpkZWxpdmVyeU9yZGVyQnk+DQogICAgPGludjpkZWxpdmVyeU9yZGVyRGF0ZT4NCiAgICA8L2ludjpkZWxpdmVyeU9yZGVyRGF0ZT4NCiAgICA8aW52OmRlbGl2ZXJ5Qnk+DQogICAgPC9pbnY6ZGVsaXZlcnlCeT4NCiAgICA8aW52OmZyb21XYXJlaG91c2VOYW1lPg0KICAgIDwvaW52OmZyb21XYXJlaG91c2VOYW1lPg0KICAgIDxpbnY6dHJhbnNwb3J0YXRpb25NZXRob2Q+DQogICAgPC9pbnY6dHJhbnNwb3J0YXRpb25NZXRob2Q+DQogICAgPGludjp0b1dhcmVob3VzZU5hbWU+DQogICAgPC9pbnY6dG9XYXJlaG91c2VOYW1lPg0KICAgIDxpbnY6Y29udGFpbmVyTnVtYmVyPg0KICAgIDwvaW52OmNvbnRhaW5lck51bWJlcj4NCiAgICA8aW52OmRlbGl2ZXJ5T3JkZXJDb250ZW50Pg0KICAgIDwvaW52OmRlbGl2ZXJ5T3JkZXJDb250ZW50Pg0KICAgIDxpbnY6ZXhjaGFuZ2VSYXRlPjEgPC9pbnY6ZXhjaGFuZ2VSYXRlPg0KICAgIDxpbnY6aXRlbXM+DQogICAgICA8aW52Oml0ZW0+DQogICAgICAgIDxpbnY6bGluZU51bWJlcj4xPC9pbnY6bGluZU51bWJlcj4NCiAgICAgICAgPGludjppdGVtTmFtZT5JbnZvaWNlPC9pbnY6aXRlbU5hbWU+DQogICAgICAgIDxpbnY6cXVhbnRpdHk+MCA8L2ludjpxdWFudGl0eT4NCiAgICAgICAgPGludjppdGVtVG90YWxBbW91bnRXaXRob3V0VmF0PjExMTExMTExIDwvaW52Oml0ZW1Ub3RhbEFtb3VudFdpdGhvdXRWYXQ+DQogICAgICAgIDxpbnY6dmF0UGVyY2VudGFnZT4tMTwvaW52OnZhdFBlcmNlbnRhZ2U+DQogICAgICAgIDxpbnY6dmF0QW1vdW50PjAgPC9pbnY6dmF0QW1vdW50Pg0KICAgICAgICA8aW52OnVuaXRQcmljZT4wIDwvaW52OnVuaXRQcmljZT4NCiAgICAgICAgPGludjpwcm9tb3Rpb24+MDwvaW52OnByb21vdGlvbj4NCiAgICAgIDwvaW52Oml0ZW0+DQogICAgPC9pbnY6aXRlbXM+DQogICAgPGludjppbnZvaWNlVGF4QnJlYWtkb3ducz4NCiAgICAgIDxpbnY6aW52b2ljZVRheEJyZWFrZG93bj4NCiAgICAgICAgPGludjp2YXRQZXJjZW50YWdlPi0xPC9pbnY6dmF0UGVyY2VudGFnZT4NCiAgICAgIDwvaW52Omludm9pY2VUYXhCcmVha2Rvd24+DQogICAgPC9pbnY6aW52b2ljZVRheEJyZWFrZG93bnM+DQogICAgPGludjp0b3RhbEFtb3VudFdpdGhvdXRWQVQ+MTExMTExMTEgPC9pbnY6dG90YWxBbW91bnRXaXRob3V0VkFUPg0KICAgIDxpbnY6dG90YWxWQVRBbW91bnQ+MCA8L2ludjp0b3RhbFZBVEFtb3VudD4NCiAgICA8aW52OnRvdGFsQW1vdW50V2l0aFZBVD4xMTExMTExMSA8L2ludjp0b3RhbEFtb3VudFdpdGhWQVQ+DQogICAgPGludjp0b3RhbEFtb3VudFdpdGhWQVRJbldvcmRzPk3GsOG7nWkgbeG7mXQgdHJp4buHdSBt4buZdCB0csSDbSBtxrDhu51pIG3hu5l0IG5naMOsbiBt4buZdCB0csSDbSBtxrDhu51pIG3hu5l0IMSR4buTbmcgY2jhurVuLjwvaW52OnRvdGFsQW1vdW50V2l0aFZBVEluV29yZHM+DQogICAgPGludjpkaXNjb3VudEFtb3VudD4wIDwvaW52OmRpc2NvdW50QW1vdW50Pg0KICAgIDxpbnY6dXNlckRlZmluZXM+PC9pbnY6dXNlckRlZmluZXM+DQogIDwvaW52Omludm9pY2VEYXRhPg0KICA8aW52OmNvbnRyb2xEYXRhPg0KICAgIDxpbnY6c3lzdGVtQ29kZT5JSEQtVjM8L2ludjpzeXN0ZW1Db2RlPg0KICA8L2ludjpjb250cm9sRGF0YT4NCiAgPEluZm9LeT4NCiAgICA8TkdBWUtZLz4NCiAgPC9JbmZvS3k+DQo8L2ludjppbnZvaWNlPg0K",
  "signCloudMetaData": {
    "singletonSigning": {
      "entry": [
        {
          "key": "ALGORITHM",
          "value": "SHA-1"
        },
        {
          "key": "SIGNATUREFORMAT",
          "value": "DSIG"
        },
        {
          "key": "SIGNATUREID",
          "value": "seller"
        },
        {
          "key": "ATTRIBUTENAME",
          "value": "id"
        },
        {
          "key": "NODETOBESIGNED",
          "value": "data"
        },
        {
          "key": "SIGNATURELOCATION",
          "value": "inv:invoice"
        }
      ]
    }
  },
  "signingApp": "IHD",
  "docId": "RP_TEST-210422154526-39084-614900"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    },
    "authMode": {
      "type": "string",
      "description": "Hình thức xác thực"
    },
    "authorizeCode": {
      "type": "string",
      "description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
    },
    "mimeType": {
      "type": "string",
      "description": "MimeType của file cần ký. Ví dụ đối với file XML là ‘application/xml"
    },
    "signingFileData": {
      "type": "string",
      "description": "Nội dung file cần ký theo định dạng Base64."
    },
    "signCloudMetaData": {
      "type": "object",
      "properties": {
        "singletonSigning": {
          "type": "object",
          "properties": {
            "entry": {
              "type": "array",
              "items": [
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
    },
    "signingApp": {
      "type": "string",
      "description": "Mã ứng dụng ký"
    },
    "docId": {
      "type": "string",
      "description": "ID tài liệu, sử dụng để định danh tài liệu trường hợp 1 file ký nhiều lần, client muốn định danh tài liệu để có thể lấy về file đã ký sau cùng của tài liệu. Khi thực hiện ký lần đầu hệ thống sẽ trả về docId, những lần ký sau client truyền thêm docId (truyền vào hàm signFile và hàm authorizeFile) lên để xác định lần ký này cho tài liệu nào. Client có thể tải file đã ký mới nhất qua hàm downloadDocument"
    }
  },
  "required": [
    "agreementUUID",
    "authMode",
    "mimeType",
    "signingFileData"
  ]
}
Request  TH3: Ký file PDF Xác Thực Qua OTP-EMAIL
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2",
  "authMode": "EXPLICIT/OTP-EMAIL",
  "mimeType": "application/pdf",
  "signingFileData": "JVBERi0xLjMNCiXi48/TDQoNCjEgMCBvYmoNCjw8DQovVHlwZSAvQ2F0YWxvZw0KL091dGxpbmVzIDIgMCBSDQovUGFnZXMgMyAwIFINCj4+DQplbmRvYmoNCg0KMiAwIG9iag0KPDwNCi9UeXBlIC9PdXRsaW5lcw0KL0NvdW50IDANCj4+DQplbmRvYmoNCg0KMyAwIG9iag0KPDwNCi9UeXBlIC9QYWdlcw0KL0NvdW50IDINCi9LaWRzIFsgNCAwIFIgNiAwIFIgXSANCj4+DQplbmRvYmoNCg0KNCAwIG9iag0KPDwNCi9UeXBlIC9QYWdlDQovUGFyZW50IDMgMCBSDQovUmVzb3VyY2VzIDw8DQovRm9udCA8PA0KL0YxIDkgMCBSIA0KPj4NCi9Qcm9jU2V0IDggMCBSDQo+Pg0KL01lZGlhQm94IFswIDAgNjEyLjAwMDAgNzkyLjAwMDBdDQovQ29udGVudHMgNSAwIFINCj4+DQplbmRvYmoNCg0KNSAwIG9iag0KPDwgL0xlbmd0aCAxMDc0ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBBIFNpbXBsZSBQREYgRmlsZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIFRoaXMgaXMgYSBzbWFsbCBkZW1vbnN0cmF0aW9uIC5wZGYgZmlsZSAtICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjY0LjcwNDAgVGQNCigganVzdCBmb3IgdXNlIGluIHRoZSBWaXJ0dWFsIE1lY2hhbmljcyB0dXRvcmlhbHMuIE1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NTIuNzUyMCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDYyOC44NDgwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjE2Ljg5NjAgVGQNCiggdGV4dC4gQW5kIG1vcmUgdGV4dC4gQm9yaW5nLCB6enp6ei4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNjA0Ljk0NDAgVGQNCiggbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDU5Mi45OTIwIFRkDQooIEFuZCBtb3JlIHRleHQuIEFuZCBtb3JlIHRleHQuICkgVGoNCkVUDQpCVA0KL0YxIDAwMTAgVGYNCjY5LjI1MDAgNTY5LjA4ODAgVGQNCiggQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA1NTcuMTM2MCBUZA0KKCB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBFdmVuIG1vcmUuIENvbnRpbnVlZCBvbiBwYWdlIDIgLi4uKSBUag0KRVQNCmVuZHN0cmVhbQ0KZW5kb2JqDQoNCjYgMCBvYmoNCjw8DQovVHlwZSAvUGFnZQ0KL1BhcmVudCAzIDAgUg0KL1Jlc291cmNlcyA8PA0KL0ZvbnQgPDwNCi9GMSA5IDAgUiANCj4+DQovUHJvY1NldCA4IDAgUg0KPj4NCi9NZWRpYUJveCBbMCAwIDYxMi4wMDAwIDc5Mi4wMDAwXQ0KL0NvbnRlbnRzIDcgMCBSDQo+Pg0KZW5kb2JqDQoNCjcgMCBvYmoNCjw8IC9MZW5ndGggNjc2ID4+DQpzdHJlYW0NCjIgSg0KQlQNCjAgMCAwIHJnDQovRjEgMDAyNyBUZg0KNTcuMzc1MCA3MjIuMjgwMCBUZA0KKCBTaW1wbGUgUERGIEZpbGUgMiApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY4OC42MDgwIFRkDQooIC4uLmNvbnRpbnVlZCBmcm9tIHBhZ2UgMS4gWWV0IG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NzYuNjU2MCBUZA0KKCBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSB0ZXh0LiBBbmQgbW9yZSApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY2NC43MDQwIFRkDQooIHRleHQuIE9oLCBob3cgYm9yaW5nIHR5cGluZyB0aGlzIHN0dWZmLiBCdXQgbm90IGFzIGJvcmluZyBhcyB3YXRjaGluZyApIFRqDQpFVA0KQlQNCi9GMSAwMDEwIFRmDQo2OS4yNTAwIDY1Mi43NTIwIFRkDQooIHBhaW50IGRyeS4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gQW5kIG1vcmUgdGV4dC4gKSBUag0KRVQNCkJUDQovRjEgMDAxMCBUZg0KNjkuMjUwMCA2NDAuODAwMCBUZA0KKCBCb3JpbmcuICBNb3JlLCBhIGxpdHRsZSBtb3JlIHRleHQuIFRoZSBlbmQsIGFuZCBqdXN0IGFzIHdlbGwuICkgVGoNCkVUDQplbmRzdHJlYW0NCmVuZG9iag0KDQo4IDAgb2JqDQpbL1BERiAvVGV4dF0NCmVuZG9iag0KDQo5IDAgb2JqDQo8PA0KL1R5cGUgL0ZvbnQNCi9TdWJ0eXBlIC9UeXBlMQ0KL05hbWUgL0YxDQovQmFzZUZvbnQgL0hlbHZldGljYQ0KL0VuY29kaW5nIC9XaW5BbnNpRW5jb2RpbmcNCj4+DQplbmRvYmoNCg0KMTAgMCBvYmoNCjw8DQovQ3JlYXRvciAoUmF2ZSBcKGh0dHA6Ly93d3cubmV2cm9uYS5jb20vcmF2ZVwpKQ0KL1Byb2R1Y2VyIChOZXZyb25hIERlc2lnbnMpDQovQ3JlYXRpb25EYXRlIChEOjIwMDYwMzAxMDcyODI2KQ0KPj4NCmVuZG9iag0KDQp4cmVmDQowIDExDQowMDAwMDAwMDAwIDY1NTM1IGYNCjAwMDAwMDAwMTkgMDAwMDAgbg0KMDAwMDAwMDA5MyAwMDAwMCBuDQowMDAwMDAwMTQ3IDAwMDAwIG4NCjAwMDAwMDAyMjIgMDAwMDAgbg0KMDAwMDAwMDM5MCAwMDAwMCBuDQowMDAwMDAxNTIyIDAwMDAwIG4NCjAwMDAwMDE2OTAgMDAwMDAgbg0KMDAwMDAwMjQyMyAwMDAwMCBuDQowMDAwMDAyNDU2IDAwMDAwIG4NCjAwMDAwMDI1NzQgMDAwMDAgbg0KDQp0cmFpbGVyDQo8PA0KL1NpemUgMTENCi9Sb290IDEgMCBSDQovSW5mbyAxMCAwIFINCj4+DQoNCnN0YXJ0eHJlZg0KMjcxNA0KJSVFT0YNCg==",
  "signCloudMetaData": {
    "singletonSigning": {
      "entry": [
        {
          "key": "VISIBLESIGNATURE",
          "value": "true"
        },
        {
          "key": "COORDINATE",
          "value": "0,0,300,60"
        },
        {
          "key": "TEXTDIRECTION",
          "value": "RIGHTTOLEFT"
        },
        {
          "key": "VISUALSTATUS",
          "value": "false"
        },
        {
          "key": "IMAGEANDTEXT",
          "value": "true"
        },
        {
          "key": "TEXTCOLOR",
          "value": "blue"
        },
        {
          "key": "PAGENO",
          "value": "1"
        },
        {
          "key": "SIGNATUREIMAGE",
          "value": "iVBORw0KGgoAAAANSUhEUgAAAEIAAABBCAYAAABlwHJGAAAACXBIWXMAAAsTAAALEwEAmpwYAAA7cGlUWHRYTUw6Y29tLmFkb2JlLnhtcAAAAAAAPD94cGFja2V0IGJlZ2luPSLvu78iIGlkPSJXNU0wTXBDZWhpSHpyZVN6TlRjemtjOWQiPz4KPHg6eG1wbWV0YSB4bWxuczp4PSJhZG9iZTpuczptZXRhLyIgeDp4bXB0az0iQWRvYmUgWE1QIENvcmUgNS42LWMxMzIgNzkuMTU5Mjg0LCAyMDE2LzA0LzE5LTEzOjEzOjQwICAgICAgICAiPgogICA8cmRmOlJERiB4bWxuczpyZGY9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkvMDIvMjItcmRmLXN5bnRheC1ucyMiPgogICAgICA8cmRmOkRlc2NyaXB0aW9uIHJkZjphYm91dD0iIgogICAgICAgICAgICB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIKICAgICAgICAgICAgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiCiAgICAgICAgICAgIHhtbG5zOnN0RXZ0PSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvc1R5cGUvUmVzb3VyY2VFdmVudCMiCiAgICAgICAgICAgIHhtbG5zOnhtcD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wLyIKICAgICAgICAgICAgeG1sbnM6ZGM9Imh0dHA6Ly9wdXJsLm9yZy9kYy9lbGVtZW50cy8xLjEvIgogICAgICAgICAgICB4bWxuczpwaG90b3Nob3A9Imh0dHA6Ly9ucy5hZG9iZS5jb20vcGhvdG9zaG9wLzEuMC8iCiAgICAgICAgICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgICAgICAgICB4bWxuczpleGlmPSJodHRwOi8vbnMuYWRvYmUuY29tL2V4aWYvMS4wLyI+CiAgICAgICAgIDx4bXBNTTpPcmlnaW5hbERvY3VtZW50SUQ+eG1wLmRpZDowRTJEMDRBRjk5M0VFNjExQTIwMkFCRjUwNERDMUIxQTwveG1wTU06T3JpZ2luYWxEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06RG9jdW1lbnRJRD5hZG9iZTpkb2NpZDpwaG90b3Nob3A6YmRlODA2OTctNzE0Yy0xMWU4LWI2NDctYzE5YWIzZTM1ZGMzPC94bXBNTTpEb2N1bWVudElEPgogICAgICAgICA8eG1wTU06SW5zdGFuY2VJRD54bXAuaWlkOjNkMTg3YTc0LTgxNDQtYzU0MS1hMzE5LTU4OWUzNmI3MTU4MzwveG1wTU06SW5zdGFuY2VJRD4KICAgICAgICAgPHhtcE1NOkRlcml2ZWRGcm9tIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgPHN0UmVmOmluc3RhbmNlSUQ+eG1wLmlpZDpGMUVEQjU2Q0ZGNkFFODExOEI0Nzg0NDhGMDdFNEVBRDwvc3RSZWY6aW5zdGFuY2VJRD4KICAgICAgICAgICAgPHN0UmVmOmRvY3VtZW50SUQ+eG1wLmRpZDowRTJEMDRBRjk5M0VFNjExQTIwMkFCRjUwNERDMUIxQTwvc3RSZWY6ZG9jdW1lbnRJRD4KICAgICAgICAgPC94bXBNTTpEZXJpdmVkRnJvbT4KICAgICAgICAgPHhtcE1NOkhpc3Rvcnk+CiAgICAgICAgICAgIDxyZGY6U2VxPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjU2ODY5Nzg1LTYzMWEtOGU0ZC04ODBkLTM0YzM4ZTI2NmVhZjwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wNi0xNlQxNzowNToyMyswNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICAgICA8cmRmOmxpIHJkZjpwYXJzZVR5cGU9IlJlc291cmNlIj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OmFjdGlvbj5zYXZlZDwvc3RFdnQ6YWN0aW9uPgogICAgICAgICAgICAgICAgICA8c3RFdnQ6aW5zdGFuY2VJRD54bXAuaWlkOjNkMTg3YTc0LTgxNDQtYzU0MS1hMzE5LTU4OWUzNmI3MTU4Mzwvc3RFdnQ6aW5zdGFuY2VJRD4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OndoZW4+MjAxOC0wNi0xNlQxNzowNToyMyswNzowMDwvc3RFdnQ6d2hlbj4KICAgICAgICAgICAgICAgICAgPHN0RXZ0OnNvZnR3YXJlQWdlbnQ+QWRvYmUgUGhvdG9zaG9wIENDIDIwMTUuNSAoV2luZG93cyk8L3N0RXZ0OnNvZnR3YXJlQWdlbnQ+CiAgICAgICAgICAgICAgICAgIDxzdEV2dDpjaGFuZ2VkPi88L3N0RXZ0OmNoYW5nZWQ+CiAgICAgICAgICAgICAgIDwvcmRmOmxpPgogICAgICAgICAgICA8L3JkZjpTZXE+CiAgICAgICAgIDwveG1wTU06SGlzdG9yeT4KICAgICAgICAgPHhtcDpDcmVhdG9yVG9vbD5BZG9iZSBQaG90b3Nob3AgQ0MgMjAxNS41IChXaW5kb3dzKTwveG1wOkNyZWF0b3JUb29sPgogICAgICAgICA8eG1wOkNyZWF0ZURhdGU+MjAxOC0wNi0xMVQxMzoxMzoyMSswNzowMDwveG1wOkNyZWF0ZURhdGU+CiAgICAgICAgIDx4bXA6TW9kaWZ5RGF0ZT4yMDE4LTA2LTE2VDE3OjA1OjIzKzA3OjAwPC94bXA6TW9kaWZ5RGF0ZT4KICAgICAgICAgPHhtcDpNZXRhZGF0YURhdGU+MjAxOC0wNi0xNlQxNzowNToyMyswNzowMDwveG1wOk1ldGFkYXRhRGF0ZT4KICAgICAgICAgPGRjOmZvcm1hdD5pbWFnZS9wbmc8L2RjOmZvcm1hdD4KICAgICAgICAgPHBob3Rvc2hvcDpDb2xvck1vZGU+MzwvcGhvdG9zaG9wOkNvbG9yTW9kZT4KICAgICAgICAgPHRpZmY6T3JpZW50YXRpb24+MTwvdGlmZjpPcmllbnRhdGlvbj4KICAgICAgICAgPHRpZmY6WFJlc29sdXRpb24+NzIwMDAwLzEwMDAwPC90aWZmOlhSZXNvbHV0aW9uPgogICAgICAgICA8dGlmZjpZUmVzb2x1dGlvbj43MjAwMDAvMTAwMDA8L3RpZmY6WVJlc29sdXRpb24+CiAgICAgICAgIDx0aWZmOlJlc29sdXRpb25Vbml0PjI8L3RpZmY6UmVzb2x1dGlvblVuaXQ+CiAgICAgICAgIDxleGlmOkNvbG9yU3BhY2U+NjU1MzU8L2V4aWY6Q29sb3JTcGFjZT4KICAgICAgICAgPGV4aWY6UGl4ZWxYRGltZW5zaW9uPjY2PC9leGlmOlBpeGVsWERpbWVuc2lvbj4KICAgICAgICAgPGV4aWY6UGl4ZWxZRGltZW5zaW9uPjY1PC9leGlmOlBpeGVsWURpbWVuc2lvbj4KICAgICAgPC9yZGY6RGVzY3JpcHRpb24+CiAgIDwvcmRmOlJERj4KPC94OnhtcG1ldGE+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgCjw/eHBhY2tldCBlbmQ9InciPz5V4kAUAAAAIGNIUk0AAHolAACAgwAA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"
        }
      ]
    }
  },
  "notificationSubject": "EFY - Xác thực tài khoản",
  "notificationTemplate": "EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút",
  "signingApp": "IHD"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    },
    "authMode": {
      "type": "string",
      "description": "Hình thức xác thực"
    },
    "mimeType": {
      "type": "string",
      "description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
    },
    "signingFileData": {
      "type": "string",
      "description": "Nội dung file cần ký theo định dạng Base64."
    },
    "signCloudMetaData": {
      "type": "object",
      "properties": {
        "singletonSigning": {
          "type": "object",
          "properties": {
            "entry": {
              "type": "array",
              "items": [
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                },
                {
                  "type": "object",
                  "properties": {
                    "key": {
                      "type": "string"
                    },
                    "value": {
                      "type": "string"
                    }
                  }
                }
              ]
            }
          }
        }
      },
      "description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
    },
    "notificationSubject": {
      "type": "string",
      "description": "Định dang tiêu đề Email được Remote Signing gửi mã xác thực OTP."
    },
    "notificationTemplate": {
      "type": "string",
      "description": "Định dạng thông điệp sẽ được gửi vào mail của khách hàng trong đó chứa mã xác thực (OTP) được sinh ngẫu nhiên. Ví dụ: EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút"
    },
    "signingApp": {
      "type": "string",
      "description": "Mã ứng dụng ký"
    }
  },
  "required": [
    "agreementUUID",
    "authMode",
    "mimeType",
    "signingFileData"
  ]
}
Request  TH4: Ký file XML hoá đơn theo chuẩn TT78 của Thuế
HideShow
Body
{
  "agreementUUID": "13ae13a443e2",
  "authMode": "EXPLICIT/PIN",
  "authorizeCode": "12345678",
  "mimeType": "application/xml",
  "signingFileData": "PEhEb24+PERMSERvbiBJZD0iSW52b2ljZURhdGEiPjxUVENodW5nPjxQQmFuPjIuMC4wPC9QQmFuPjxUSERvbj5Iw7NhIMSRxqFuIGdpw6EgdHLhu4sgZ2lhIHTEg25nPC9USERvbj48S0hNU0hEb24+MTwvS0hNU0hEb24+PEtISERvbj5DMjFUREc8L0tISERvbj48U0hEb24+MTwvU0hEb24+PE5MYXA+MjAyMS0xMS0xMTwvTkxhcD48RFZUVGU+Vk5EPC9EVlRUZT48SFRUVG9hbj5UTS9DSzwvSFRUVG9hbj48TVNUVENHUD4wMTAyNTE5MDQxPC9NU1RUQ0dQPjwvVFRDaHVuZz48TkRIRG9uPjxOQmFuPjxUZW4+Q8OUTkcgVFkgVE5ISCBUUlVZ4buATiBUSMOUTkcgVMOZTkcgVknhu4ZUPC9UZW4+PE1TVD4wMjAxMDYwNTIwPC9NU1Q+PERDaGk+VOG6p25nIDksIHTDsmEgbmjDoCBTYW5uYW08L0RDaGk+PFNEVGhvYWk+KDA0KSA3NDY4NzM2NTQ1PC9TRFRob2FpPjwvTkJhbj48Tk11YT48VGVuPkPDlE5HIFRZIFROSEggQ8agIEtIw40gQ0jDjU5IIFjDgUMgSDJUIEjDgCBO4buYSTwvVGVuPjxNU1Q+MDEwODQ1Njg3MDwvTVNUPjxEQ2hpPktodSBjaOG7oyBt4bubaSwgdOG7lSA1LCBuZ8O1IDE1OSwgxJHGsOG7nW5nIFTDonkgU8ahbiwgVGjhu4sgdHLhuqVuIFBow7luZywgSHV54buHbiDEkGFuIFBoxrDhu6NuZywgSMOgIE7hu5lpPC9EQ2hpPjxNS0hhbmc+Y3R0bmhoY2tjeGgydDwvTUtIYW5nPjxTRFRob2FpLz48SFZUTk1IYW5nPkPDlE5HIFRZIFROSEggQ8agIEtIw40gQ0jDjU5IIFjDgUMgSDJUIEjDgCBO4buYSTwvSFZUTk1IYW5nPjxUTkhhbmc+MTExMDAwMTc4Mzk5IC0gVOG6oWkgTmfDom4gaMOgbmcgVE1DUCBDw7RuZyB0aMawxqFuZyBWaeG7h3QgTmFtIOKAkyBjaGkgbmjDoW5oIELhuq9jIFPDoGkgR8OybjwvVE5IYW5nPjwvTk11YT48RFNISERWdT48SEhEVnU+PFRDaGF0PjE8L1RDaGF0PjxTVFQ+MTwvU1RUPjxNSEhEVnU+SEgwMDAyNTwvTUhIRFZ1PjxUSEhEVnU+RMSDbSBiw7RuZyB2dcO0bmcgLSBTcXVhcmUgaGFtPC9USEhEVnU+PFNMdW9uZz4xPC9TTHVvbmc+PERHaWE+MTI1MDAwPC9ER2lhPjxUaFRpZW4+MTI1MDAwPC9UaFRpZW4+PFRTdWF0PjEwJTwvVFN1YXQ+PC9ISERWdT48L0RTSEhEVnU+PFRUb2FuPjxUSFRUTFRTdWF0PjxMVFN1YXQ+PFRTdWF0PjEwJTwvVFN1YXQ+PFRoVGllbj4xMjUwMDA8L1RoVGllbj48VFRodWU+MTI1MDA8L1RUaHVlPjwvTFRTdWF0PjwvVEhUVExUU3VhdD48VGdUQ1RodWU+MTI1MDAwPC9UZ1RDVGh1ZT48VGdUVGh1ZT4xMjUwMDwvVGdUVGh1ZT48VGdUVFRCU28+MTM3NTAwPC9UZ1RUVEJTbz48VGdUVFRCQ2h1Pk3hu5l0IHRyxINtIGJhIG3GsMahaSBi4bqjeSBuZ2jDrG4gbsSDbSB0csSDbSDEkeG7k25nIGNo4bq1bi48L1RnVFRUQkNodT48L1RUb2FuPjwvTkRIRG9uPjwvRExIRG9uPjxEU0NLUz48TkJhbi8+PE5NdWEvPjwvRFNDS1M+PC9IRG9uPg",
  "signCloudMetaData": {
    "singletonSigning": {
      "entry": [
        {
          "key": "SIGNATUREFORMAT",
          "value": "TAX-211120"
        },
        {
          "key": "SIGNINGTIMEXMLSN",
          "value": "https://hoadondientu.gdt.gov.vn"
        },
        {
          "key": "SIGNATURELOCATION",
          "value": "DSCKS/NBan"
        },
        {
          "key": "NODETOBESIGNED",
          "value": "InvoiceData"
        },
        {
          "key": "SIGNATUREID",
          "value": "seller"
        }
      ]
    }
  },
  "signingApp": "IHD"
}
Schema
{
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    },
    "authMode": {
      "type": "string",
      "description": "Hình thức xác thực"
    },
    "authorizeCode": {
      "type": "string",
      "description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
    },
    "mimeType": {
      "type": "string",
      "description": "MimeType của file cần ký. Ví dụ đối với file XML là ‘application/xml"
    },
    "signingFileData": {
      "type": "string",
      "description": "Nội dung file cần ký theo định dạng Base64."
    },
    "signCloudMetaData": {
      "type": "object",
      "properties": {
        "singletonSigning": {
          "type": "object",
          "properties": {
            "entry": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "key": {
                    "type": "string"
                  },
                  "value": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
    },
    "signingApp": {
      "type": "string",
      "description": "Mã ứng dụng ký"
    }
  },
  "required": [
    "agreementUUID",
    "authMode",
    "mimeType",
    "signingFileData"
  ],
  "$schema": "http://json-schema.org/draft-04/schema#"
}
Request  TH5: Ký file XML tờ khai đăng ký theo chuẩn TT78 của Thuế
HideShow
Body
{
  "agreementUUID": "13ae13a443e2",
  "authMode": "EXPLICIT/PIN",
  "authorizeCode": "12345678",
  "mimeType": "application/xml",
  "signingFileData": "PFRLaGFpPjxETFRLaGFpIElkPSJEZWNsYXJhdGlvbkRhdGEiPjxUVENodW5nPjxQQmFuPjIuMC4wPC9QQmFuPjxNU28+MDEvxJBLVMSQLUjEkMSQVDwvTVNvPjxUZW4+VOG7nSBraGFpIMSRxINuZyBrw70vdGhheSDEkeG7lWkgdGjDtG5nIHRpbiBz4butIGThu6VuZyBow7NhIMSRxqFuIMSRaeG7h24gdOG7rTwvVGVuPjxMREtVTmhpZW0+MTwvTERLVU5oaWVtPjxUTk5UPkzhu4cgVGVzdCBUVDc4IDE8L1ROTlQ+PE1TVD45OTk5OTk5NzAyPC9NU1Q+PENRVFFMeT5D4bulYyBUaHXhur8gVHAuIEjhu5MgQ2jDrSBNaW5oPC9DUVRRTHk+PE1DUVRRTHk+NzAxMDA8L01DUVRRTHk+PE5MSGU+TWFpIE5n4buNYyBM4buHIDE8L05MSGU+PERDTEhlPlRo4bunIMSQ4bupYywgVHAuIEjhu5MgQ2jDrSBNaW5oIDE8L0RDTEhlPjxEQ1REVHU+bWFpbmdvY2xlLndvcmtAZ21haWwuY29tPC9EQ1REVHU+PERUTEhlPjA5NjgwNDc4MDM8L0RUTEhlPjxERGFuaD5I4buTIENow60gTWluaDwvRERhbmg+PE5MYXA+MjAyMS0xMS0xOTwvTkxhcD48L1RUQ2h1bmc+PE5EVEtoYWk+PEhUSERvbj48Q01hPjE8L0NNYT48S0NNYT4wPC9LQ01hPjwvSFRIRG9uPjxIVEdETEhERFQ+PE5OVERCS0toYW4+MDwvTk5UREJLS2hhbj48Tk5US1RETlVCTkQ+MDwvTk5US1RETlVCTkQ+PENETFRURENRVD4wPC9DRExUVERDUVQ+PENETFFUQ1ROPjA8L0NETFFUQ1ROPjwvSFRHRExIRERUPjxQVGh1Yz48Q0REdT4xPC9DRER1PjxDQlRIb3A+MDwvQ0JUSG9wPjwvUFRodWM+PExIRFNEdW5nPjxIREdUR1Q+MTwvSERHVEdUPjxIREJIYW5nPjE8L0hEQkhhbmc+PEhEQlRTQ29uZz4wPC9IREJUU0Nvbmc+PEhEQkhEVFFHaWE+MDwvSERCSERUUUdpYT48SERLaGFjPjE8L0hES2hhYz48Q1R1PjE8L0NUdT48L0xIRFNEdW5nPjxEU0NUU1NEdW5nPjxDVFM+PFNUVD4xPC9TVFQ+PFRUQ2h1Yz5DPVZOLCBPPUPDlE5HIFRZIEPhu5QgUEjhuqZOIEPDlE5HIE5HSOG7hiBUSU4gSOG7jEMgRUZZIFZJ4buGVCBOQU0sIENOPUVGWUNBX1RFU1Q8L1RUQ2h1Yz48U2VyaT41NDAxMEEwREJBMTQ5NzFFQTQ5ODFGODEyRTQwOERFNzwvU2VyaT48VE5nYXk+MjAyMS0xMC0yM1QwOToyMzowMDwvVE5nYXk+PEROZ2F5PjIwMjItMTAtMjNUMDk6MjM6MDA8L0ROZ2F5PjxIVGh1Yz4zPC9IVGh1Yz48L0NUUz48Q1RTPjxTVFQ+MjwvU1RUPjxUVENodWM+Qz1WTiwgTz1Dw5RORyBUWSBD4buUIFBI4bqmTiBDw5RORyBOR0jhu4YgVElOIEjhu4xDIEVGWSBWSeG7hlQgTkFNLCBDTj1FRllDQV9URVNUPC9UVENodWM+PFNlcmk+NTQwMTBBMEE5MzAxQ0FDQTUxQjgzMjM1NDhCNDY4OTk8L1Nlcmk+PFROZ2F5PjIwMjEtMTAtMjNUMDk6MjQ6MDA8L1ROZ2F5PjxETmdheT4yMDIyLTEwLTIzVDA5OjI0OjAwPC9ETmdheT48SFRodWM+MTwvSFRodWM+PC9DVFM+PC9EU0NUU1NEdW5nPjxEU0RLVU5oaWVtPjxTVFQ+MTwvU1RUPjxUTEhEb24+SMOzYSDEkcahbiBiw6FuIGjDoG5nPC9UTEhEb24+PEtITVNIRG9uPjI8L0tITVNIRG9uPjxLSEhEb24+SzIxVEFCPC9LSEhEb24+PE1TVD45OTk5OTk5NzcwPC9NU1Q+PFRUQ2h1Yz5Dw7RuZyB0eSBM4buHIHRlc3Q8L1RUQ2h1Yz48TURpY2g+TOG6rXAgaMOzYSDEkcahbjwvTURpY2g+PFROZ2F5PjIwMjEtMTEtMTJUMDA6MDA6MDA8L1ROZ2F5PjxETmdheT4yMDIxLTExLTMwVDAwOjAwOjAwPC9ETmdheT48UFRodWM+VE0vQ0s8L1BUaHVjPjwvRFNES1VOaGllbT48L05EVEtoYWk+PC9ETFRLaGFpPjxEU0NLUz48Tk5ULz48L0RTQ0tTPjwvVEtoYWk+",
  "signCloudMetaData": {
    "singletonSigning": {
      "entry": [
        {
          "key": "SIGNATUREFORMAT",
          "value": "TAX-211120"
        },
        {
          "key": "SIGNINGTIMEXMLSN",
          "value": "https://hoadondientu.gdt.gov.vn"
        },
        {
          "key": "SIGNATURELOCATION",
          "value": "DSCKS/NNT"
        },
        {
          "key": "NODETOBESIGNED",
          "value": "DeclarationData"
        },
        {
          "key": "SIGNATUREID",
          "value": "proid"
        }
      ]
    }
  },
  "signingApp": "IHD"
}
Schema
{
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    },
    "authMode": {
      "type": "string",
      "description": "Hình thức xác thực"
    },
    "authorizeCode": {
      "type": "string",
      "description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
    },
    "mimeType": {
      "type": "string",
      "description": "MimeType của file cần ký. Ví dụ đối với file XML là ‘application/xml"
    },
    "signingFileData": {
      "type": "string",
      "description": "Nội dung file cần ký theo định dạng Base64."
    },
    "signCloudMetaData": {
      "type": "object",
      "properties": {
        "singletonSigning": {
          "type": "object",
          "properties": {
            "entry": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "key": {
                    "type": "string"
                  },
                  "value": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      },
      "description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
    },
    "signingApp": {
      "type": "string",
      "description": "Mã ứng dụng ký"
    }
  },
  "required": [
    "agreementUUID",
    "authMode",
    "mimeType",
    "signingFileData"
  ],
  "$schema": "http://json-schema.org/draft-04/schema#"
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "responseCode": 1007,
  "responseMessage": "REQUEST ACCEPTED",
  "billCode": "EFY_CA",
  "timestamp": "2020-02-28T13:28:42+07:00",
  "status": true,
  "notificationTemplate": "EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút",
  "notificationSubject": "EFY - Xác thực tài khoản",
  "signedFileData": "RmlsZSBiaW5hcnkgdGhhdCBiZSBzaWduZWQ=",
  "mimeType": "application/pdf",
  "multipleSignedFileData": [
    {
      "signedFileData": "RmlsZSBiaW5hcnkgdGhhdCBiZSBzaWduZWQ=",
      "mimeType": "application/pdf",
      "signedFileName": "invoice_123456.pdf",
      "dmsMetaData": ""
    }
  ],
  "certificateDN": "E.g: CN=Nguyen Van A, O=B Company,C=VN",
  "certificateSerialNumber": "54010A5560E78C1DAC82237E280A775F",
  "certificateThumbprint": "B72E67D9DE53332B632A7863F7BF5AA77AD0D08C",
  "validFrom": "2020-02-26T16:03:05+07:00",
  "validTo": "2021-02-25T16:03:05+07:00",
  "issuerDN": "CN=Mobile-ID Trusted Network, O=MOBILE-ID,C=VN",
  "sharedMode": 1,
  "docId": "RP_TEST-210422154526-39084-614900"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "responseCode": {
      "type": "number",
      "description": "Mã kết quả. Thông thường sẽ là 1007"
    },
    "responseMessage": {
      "type": "string",
      "description": "Mô tả chi tiết kết quả"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "timestamp": {
      "type": "string",
      "description": "Timestamp hiện tại"
    },
    "status": {
      "type": "boolean",
      "description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
    },
    "notificationTemplate": {
      "type": "string",
      "description": "Định dạng thông điệp sẽ được gửi vào mail của khách hàng trong đó chứa mã xác thực (OTP) được sinh ngẫu nhiên. Ví dụ: EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút"
    },
    "notificationSubject": {
      "type": "string",
      "description": "Định dang tiêu đề Email được Remote Signing gửi mã xác thực OTP."
    },
    "authorizeCredential": {
      "type": "string",
      "description": "In case of Authorize Code isn’t sent by Remote Signing, Email of client/customer also is responded back to Finance/Insurance company and they use that information to send Authorize Code to their end-user"
    },
    "signedFileData": {
      "type": "string",
      "description": "Nội dung file đã ký theo định dạng Base64"
    },
    "mimeType": {
      "type": "string",
      "description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
    },
    "signedFileUUID": {
      "type": "string",
      "description": "ID của file đã ký được tạo bởi Remote Signing"
    },
    "multipleSignedFileData": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "signedFileData": {
            "type": "string",
            "description": "Nội dung file đã ký theo định dạng Base64"
          },
          "mimeType": {
            "type": "string",
            "description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
          },
          "signedFileUUID": {
            "type": "string",
            "description": "ID của file đã ký được tạo bởi Remote Signing"
          },
          "signedFileName": {
            "type": "string",
            "description": "Tên file đã ký"
          },
          "dmsMetaData": {
            "type": "string",
            "description": "Thông tin DMS được sử dụng để tải xuống tài liệu đã ký"
          }
        },
        "required": [
          "mimeType"
        ]
      },
      "description": "Trong trường hợp ký nhiều file, danh sách file đã ký sẽ được trả về trong đối tượng này."
    },
    "xmlSignature": {
      "type": "string",
      "description": "Chữ ký XML (XMLDSig or XML-XadDES)"
    },
    "certificateDN": {
      "type": "string",
      "description": "`Thông tin của chủ sở hữu chứng thư số (DN). E.g: CN=Nguyen Van A, O=B Company,C=VN`"
    },
    "certificateSerialNumber": {
      "type": "string",
      "description": "`Serial number của chứng thư số E.g: 5405ABCDEF`"
    },
    "certificateThumbprint": {
      "type": "string",
      "description": "Thumbprint chứng thư số (certificate hash)"
    },
    "validFrom": {
      "type": "string",
      "description": "Thời điểm chứng thư số bắt đầu có hiệu lực"
    },
    "validTo": {
      "type": "string",
      "description": "Thời điểm chứng thư số hết hiệu lực"
    },
    "issuerDN": {
      "type": "string",
      "description": "`Thông tin nhà phát hành chứng thư số (DN) E.g: CN=Mobile-ID Trusted Network, O=MOBILE-ID,C=VN`"
    },
    "sharedMode": {
      "type": "number",
      "enum": [
        1,
        2,
        3
      ],
      "default": 1,
      "description": "Chế độ chia sẻ nào được áp dụng cho chứng thư số"
    },
    "docId": {
      "type": "string",
      "description": "ID tài liệu, sử dụng để định danh tài liệu trường hợp 1 file ký nhiều lần, client muốn định danh tài liệu để có thể lấy về file đã ký sau cùng của tài liệu. Khi thực hiện ký lần đầu hệ thống sẽ trả về docId, những lần ký sau client truyền thêm docId (truyền vào hàm signFile và hàm authorizeFile) lên để xác định lần ký này cho tài liệu nào. Client có thể tải file đã ký mới nhất qua hàm downloadDocument"
    }
  },
  "required": [
    "responseCode",
    "mimeType"
  ]
}

Xác thực ký file

Xác thực ký file
POST/signing/file/authorize

Trong trường hợp (ký file)[#danh-sach-ham-xac-thuc-ky-file-post] sử dụng hình thức xác thực OTP. Mã OTP được gửi về email hoặc số điện thoại của NSD. Sau khi NSD nhập mã OTP, Ứng dụng thực hiện gọi yêu cầu đến hàm này để lấy về nội dung file đã được ký.

Reference: Auth Mode, Response Code

Example URI

POST https://api.remotesigning.vn/signing/file/authorize
Request  Xác thực ký file
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2",
  "billCode": "EFY_CA",
  "authorizeCode": "12345678",
  "signCloudMetaData": {
    "'singletonSigning'": {
      "entry": [
        {
          "key": "Hello, world!",
          "value": "Hello, world!"
        }
      ]
    },
    "'counterSigning'": {
      "entry": [
        {
          "key": "Hello, world!",
          "value": "Hello, world!"
        }
      ]
    }
  },
  "docId": "RP_TEST-210422154526-39084-614900"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "authorizeCode": {
      "type": "string",
      "description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
    },
    "signCloudMetaData": {
      "type": "object",
      "properties": {
        "'singletonSigning'": {
          "type": "object",
          "properties": {
            "entry": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "key": {
                    "type": "string",
                    "description": "key"
                  },
                  "value": {
                    "type": "string",
                    "description": "value"
                  }
                }
              }
            }
          },
          "description": "Thông tin ký dành cho khách hàng"
        },
        "'counterSigning'": {
          "type": "object",
          "properties": {
            "entry": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "key": {
                    "type": "string",
                    "description": "key"
                  },
                  "value": {
                    "type": "string",
                    "description": "value"
                  }
                }
              }
            }
          },
          "description": "Thông tin ký dành cho tổ chức"
        }
      },
      "description": "SignCloudMetaData chứa các thuộc tính người ký bổ sung được sử dụng để hiển thị chữ ký PDF: Tạo độ, Hình nền, Vị trí người ký, Lý do người ký, Màu văn bản. Trong trường hợp sigining XML, nó sẽ chỉ ra loại nào sẽ được áp dụng XMLDSig, XML-XaDES, vùng chữ ký Một khi tham số này không được sử dụng, Ký từ xa sẽ sử dụng giá trị mặc định đã được cấu hình trong hệ thống. Trong trường hợp quá trình ký kết truy cập, SignCloudMetaData bao gồm 2 MetaDatas cho các thuộc tính của người ký và khách hàng của Relying Party"
    },
    "docId": {
      "type": "string",
      "description": "ID tài liệu, sử dụng để định danh tài liệu trường hợp 1 file ký nhiều lần, client muốn định danh tài liệu để có thể lấy về file đã ký sau cùng của tài liệu. Khi thực hiện ký lần đầu hệ thống sẽ trả về docId, những lần ký sau client truyền thêm docId (truyền vào hàm signFile và hàm authorizeFile) lên để xác định lần ký này cho tài liệu nào. Client có thể tải file đã ký mới nhất qua hàm downloadDocument"
    }
  },
  "required": [
    "agreementUUID"
  ]
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "responseCode": 1007,
  "responseMessage": "REQUEST ACCEPTED",
  "billCode": "EFY_CA",
  "timestamp": "2020-02-28T13:28:42+07:00",
  "status": true,
  "remainingCounter": 1,
  "signedFileData": "RmlsZSBiaW5hcnkgdGhhdCBiZSBzaWduZWQ=",
  "mimeType": "application/pdf",
  "signedFileUUID": "Hello, world!",
  "xmlSignature": "Hello, world!",
  "docId": "RP_TEST-210422154526-39084-614900"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "responseCode": {
      "type": "number",
      "description": "Mã kết quả. Thông thường sẽ là 1007"
    },
    "responseMessage": {
      "type": "string",
      "description": "Mô tả chi tiết kết quả"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "timestamp": {
      "type": "string",
      "description": "Timestamp hiện tại"
    },
    "status": {
      "type": "boolean",
      "description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
    },
    "remainingCounter": {
      "type": "number",
      "description": "Sau khi thay đổi mã PIN thành công, tham số này sẽ là bộ đếm tối đa được cấu hình trên Remote Signin. Mỗi khi thay đổi mã PIN không thay công tham số này sẽ bị giảm đi 1. Nếu tham số này về 0 yêu cầu sẽ bị chặn. Sau một khoảng thời gian (được cấu hình trên Remote Signing) thì sẽ được bỏ chặn tự động."
    },
    "signedFileData": {
      "type": "string",
      "description": "Nội dung file đã ký theo định dạng Base64"
    },
    "mimeType": {
      "type": "string",
      "description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
    },
    "signedFileUUID": {
      "type": "string",
      "description": "ID của file đã ký được tạo bởi Remote Signing"
    },
    "xmlSignature": {
      "type": "string",
      "description": "Chữ ký XML (XMLDSig or XML-XadDES)"
    },
    "docId": {
      "type": "string",
      "description": "ID tài liệu, sử dụng để định danh tài liệu trường hợp 1 file ký nhiều lần, client muốn định danh tài liệu để có thể lấy về file đã ký sau cùng của tài liệu. Khi thực hiện ký lần đầu hệ thống sẽ trả về docId, những lần ký sau client truyền thêm docId (truyền vào hàm signFile và hàm authorizeFile) lên để xác định lần ký này cho tài liệu nào. Client có thể tải file đã ký mới nhất qua hàm downloadDocument"
    }
  },
  "required": [
    "responseCode",
    "mimeType"
  ]
}

Ký Hash

Ký Hash
POST/signing/hash

Cũng giống như trường hợp ký file, nhưng thay vì gửi lên nội dung file. Ứng dụng chỉ cần gửi mã băm nội dung file, Remote Signing sẽ thực hiện ký vào mã băm này. Nếu phương thưc

Reference: Auth Mode, Response Code

Example URI

POST https://api.remotesigning.vn/signing/hash
Request  Sign Hash
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2",
  "authMode": "Hello, world!",
  "authorizeCode": "12345678",
  "encryption": "RSA",
  "hash": "f3a8a2f048b6ae0d3a5b14a803d707ffeb190a91fc8719c3c8886c64a1732094",
  "hashs": [
    "f3a8a2f048b6ae0d3a5b14a803d707ffeb190a91fc8719c3c8886c64a1732094",
    "f3a8a2f048b6ae0d3a5b14a803d707ffeb190a91fc8719c3c8886c64a1732094"
  ],
  "hashAlgorithm": "SHA-256",
  "mimeType": "application/sha256-binary",
  "signingApp": "IHD"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    },
    "authMode": {
      "type": "string",
      "enum": [
        "EXPLICIT/PIN",
        "EXPLICIT/OTP-SMS",
        "EXPLICIT/OTP-EMAIL",
        "EXPLICIT/PIN"
      ],
      "default": "EXPLICIT/PIN",
      "description": "Hình thức xác thực"
    },
    "authorizeCode": {
      "type": "string",
      "description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
    },
    "encryption": {
      "type": "string",
      "description": "Hệ mã hóa được sử dụng mặc định là RSA",
      "default": "RSA"
    },
    "hash": {
      "type": "string",
      "description": "Giá trị Hash dùng để ký"
    },
    "hashs": {
      "type": "array",
      "description": "Mảng giá trị Hash dùng để ký"
    },
    "hashAlgorithm": {
      "type": "string",
      "enum": [
        "SHA-256",
        "SHA-384",
        "SHA-512"
      ],
      "description": "Thuật toán sử dụng để băm dữ liệu"
    },
    "mimeType": {
      "type": "string",
      "enum": [
        "application/sha256-binary",
        "application/sha384-binary",
        "application/sha512-binary"
      ],
      "description": "Mime type cho chuỗi hash"
    },
    "signingApp": {
      "type": "string",
      "description": "Mã ứng dụng ký"
    }
  },
  "required": [
    "agreementUUID",
    "authMode",
    "hash",
    "hashAlgorithm",
    "mimeType"
  ]
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "responseCode": 1007,
  "responseMessage": "REQUEST ACCEPTED",
  "billCode": "EFY_CA",
  "timestamp": "2020-02-28T13:28:42+07:00",
  "status": true,
  "notificationTemplate": "EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút",
  "notificationSubject": "EFY - Xác thực tài khoản",
  "authorizeCredential": "Hello, world!",
  "signatureValue": "Hello, world!",
  "signatureValues": [
    "C6bENR+KLDfUSxLNl5QpdlDZKKK29n7k1tsNBhPeZ+FflGI0TmkKz8NDMz6a/m8mI9/cH2pkI65yzsbeSlBVkdNSARkzBGLsT7Bg3pnGe8/re/WTSB/EjVI2oH2JvVOtQbm0Yjzuvgnei5BuRTgw6hpF+k8UbT1OHCM2kY4efI/wos/vBFrxspIsw/wCvdQuhPrSrsFj2hSZ8ScUv5Z5Gt+Ay4nPrixA6x5aK2NanM2ind9Vu9yiCY+O9hisjn8eVEldbU4yD+IJnjQLFr3GRAfutZduExm2b9QzFUd8zQuIZYCpadFXPR6J5uQnLrcsoP5TmSfjuiKQcymPc5FV6A==",
    "C6bENR+KLDfUSxLNl5QpdlDZKKK29n7k1tsNBhPeZ+FflGI0TmkKz8NDMz6a/m8mI9/cH2pkI65yzsbeSlBVkdNSARkzBGLsT7Bg3pnGe8/re/WTSB/EjVI2oH2JvVOtQbm0Yjzuvgnei5BuRTgw6hpF+k8UbT1OHCM2kY4efI/wos/vBFrxspIsw/wCvdQuhPrSrsFj2hSZ8ScUv5Z5Gt+Ay4nPrixA6x5aK2NanM2ind9Vu9yiCY+O9hisjn8eVEldbU4yD+IJnjQLFr3GRAfutZduExm2b9QzFUd8zQuIZYCpadFXPR6J5uQnLrcsoP5TmSfjuiKQcymPc5FV6A=="
  ]
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "responseCode": {
      "type": "number",
      "description": "Mã kết quả. Thông thường sẽ là 1007"
    },
    "responseMessage": {
      "type": "string",
      "description": "Mô tả chi tiết kết quả"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "timestamp": {
      "type": "string",
      "description": "Timestamp hiện tại"
    },
    "status": {
      "type": "boolean",
      "description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
    },
    "notificationTemplate": {
      "type": "string",
      "description": "Định dạng thông điệp sẽ được gửi vào mail của khách hàng trong đó chứa mã xác thực (OTP) được sinh ngẫu nhiên. Ví dụ: EFY: Mã xác thực của bạn là: {AuthorizeCode}. Mã này sẽ hết hạn sau 5 phút"
    },
    "notificationSubject": {
      "type": "string",
      "description": "Định dang tiêu đề Email được Remote Signing gửi mã xác thực OTP."
    },
    "authorizeCredential": {
      "type": "string",
      "description": "In case of Authorize Code isn’t sent by Remote Signing, Email of client/customer also is responded back to Finance/Insurance company and they use that information to send Authorize Code to their end-user"
    },
    "signatureValue": {
      "type": "string",
      "description": "Chữ ký PKCS#1 theo định dang Base64"
    },
    "signatureValues": {
      "type": "array",
      "description": "Mảng chữ ký PKCS#1 theo định dang Base64"
    }
  },
  "required": [
    "responseCode"
  ]
}

Xác thực ký Hash

Xác thực ký Hash
POST/signing/hash/authorize

Trong trường hợp (ký Hash)[#danh-sach-ham-xac-thuc-ky-hash-post] sử dụng hình thức xác thực OTP. Mã OTP được gửi về email hoặc số điện thoại của NSD. Sau khi NSD nhập mã OTP, Ứng dụng thực hiện gọi yêu cầu đến hàm này để lấy về nội dung đã được ký.

Reference: Auth Mode, Response Code

Example URI

POST https://api.remotesigning.vn/signing/hash/authorize
Request  Xác thực ký Hash
HideShow
Headers
Content-Type: application/json
Body
{
  "agreementUUID": "13ae13a443e2",
  "billCode": "EFY_CA",
  "authorizeCode": "12345678"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "agreementUUID": {
      "type": "string",
      "description": "ID hợp đồng"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "authorizeCode": {
      "type": "string",
      "description": "Mã xác thực của khách hàng. Trong trường hợp hình thức xác thực qua mã PIN được sử dụng thì mã xác thực là mã pin."
    }
  },
  "required": [
    "agreementUUID"
  ]
}
Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "responseCode": 1007,
  "responseMessage": "REQUEST ACCEPTED",
  "billCode": "EFY_CA",
  "timestamp": "2020-02-28T13:28:42+07:00",
  "status": true,
  "remainingCounter": 1,
  "signatureValue": "Hello, world!"
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "responseCode": {
      "type": "number",
      "description": "Mã kết quả. Thông thường sẽ là 1007"
    },
    "responseMessage": {
      "type": "string",
      "description": "Mô tả chi tiết kết quả"
    },
    "billCode": {
      "type": "string",
      "description": "200221112613-3540-601895 (string, required) - Mã giao dịch duy nhất, được gửi về sau mỗi yêu cầu lên Remote Signing."
    },
    "timestamp": {
      "type": "string",
      "description": "Timestamp hiện tại"
    },
    "status": {
      "type": "boolean",
      "description": "Trạng thái kết quả (true: Thành công, false: Lỗi)"
    },
    "remainingCounter": {
      "type": "number",
      "description": "Sau khi thay đổi mã PIN thành công, tham số này sẽ là bộ đếm tối đa được cấu hình trên Remote Signin. Mỗi khi thay đổi mã PIN không thay công tham số này sẽ bị giảm đi 1. Nếu tham số này về 0 yêu cầu sẽ bị chặn. Sau một khoảng thời gian (được cấu hình trên Remote Signing) thì sẽ được bỏ chặn tự động."
    },
    "signatureValue": {
      "type": "string",
      "description": "Chữ ký PKCS#1 theo định dang Base64"
    }
  },
  "required": [
    "responseCode"
  ]
}

Download Signed Files

Download Signed Files
GET/signing/download/file/{billCode}

Download file đã ký.

Reference: Response Code

Example URI

GET https://api.remotesigning.vn/signing/download/file/billCode
URI Parameters
HideShow
billCode
string (required) 

bill code

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "signedFiles": [
    {
      "fileName": "signed.pdf",
      "base64": "c2lnbmVkLnBkZg==",
      "mimeType": "application/pdf"
    }
  ]
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "signedFiles": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "fileName": {
            "type": "string",
            "description": "Tên file"
          },
          "base64": {
            "type": "string",
            "description": "Nội dung file đã ký theo định dạng Base64"
          },
          "mimeType": {
            "type": "string",
            "description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
          }
        },
        "required": [
          "fileName",
          "base64",
          "mimeType"
        ]
      },
      "description": "mảng file đã ký"
    }
  }
}

Download Signed Documents

Download Signed Documents
GET/signing/download/document/{docId}

Download tài liệu đã ký.

Reference: Response Code

Example URI

GET https://api.remotesigning.vn/signing/download/document/docId
URI Parameters
HideShow
docId
string (required) 

document id

Response  200
HideShow
Headers
Content-Type: application/json
Body
{
  "signedFiles": [
    {
      "fileName": "signed.pdf",
      "base64": "c2lnbmVkLnBkZg==",
      "mimeType": "application/pdf"
    }
  ]
}
Schema
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "signedFiles": {
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "fileName": {
            "type": "string",
            "description": "Tên file"
          },
          "base64": {
            "type": "string",
            "description": "Nội dung file đã ký theo định dạng Base64"
          },
          "mimeType": {
            "type": "string",
            "description": "MimeType của file cần ký. Ví dụ đối với file PDF là ‘application/pdf’"
          }
        },
        "required": [
          "fileName",
          "base64",
          "mimeType"
        ]
      },
      "description": "mảng file đã ký"
    }
  }
}

Tham Khảo

ShareMode

Đây là chế độ chia sẻ chứng thư số trên Remote Signing

Value Description
1 PRIVATE_MODE
2 RP_SHARED_MODE
3 AGREEMENT_SHARED_MODE

AuthMode

Hình thức xác thực NSD

Value Description
EXPLICIT/PIN Xác thực qua mã PIN
EXPLICIT/OTP-SMS Xác thực qua hình thức OTP-SMS
EXPLICIT/OTP-EMAIL Xác thực qua hình thức OTP-EMAIL

ResponseCode

Value Description
0 SUCCESSFULLY
1000 INVALID IP ADDRESS
1001 INVALID CREDENTIAL DATA
1002 INVALID PARAMS
1003 UNEXPECTED EXCEPTION
1004 INVALID AUTHORIZATION CODE
1005 AUTHORIZATION BLOCKED
1006 AUTHORIZATION CODE TIMEOUT
1007 REQUEST ACCEPTED
1008 AGREEEMENT NOT FOUND
1009 CERTIFICATE IS NOT ENROLLED
1010 AGREEMENT EXISTED
1011 UNSUPPORTED OPERATION
1012 ACCESS DENIED
1013 AGREEMENT NOT READY
1014 CERTIFICATE IS EXPIRED
1015 BILLCODE TIMEOUT DUE TO UNEXPECTED EXCEPTION WHILE SIGNING
1016 FILE IS BEING PROCESSED
1017 AGREEMENT REVOKED
1018 SUCCESSFULLY. YOUR PASSCODE NEED TO BE CHANGED
1019 FUNCTION ACCESS DENIED
1020 FAILED TO CHECK REVOCATION
1021 CERTIFICATE REVOKED
1022 CERTIFICATE UNKNOWN
1023 SHARED AGREEMENT NOT FOUND
1024 SHARED AGREEMENT INVALID SHARED MODE
1025 FILE NOT FOUND
1026 MULTIPLE CLIENT MACHINE YSING THE SAME AGREEMENT UUID
1027 TRANSACTION NOT FINISHED
1029 CREDENTIALS HAVE BEEN EXPIRED
1028 EMAIL HAS BEEN REGISTERED

SignCloudMetaData

Ngoài việc ký file thông thường bạn có thể gửi kèm các thông tin khác để mô tả chi tiết về yêu cầu ký như (hiển thị khung chữ ký, lý do ký, màu chữ,… trên file pdf). Để thực hiện việc này bạn cần truyền lên dữ liệu trong thẻ signCloudMetaData. Trong thẻ này bạn có thể tùy chỉnh thông tin chữ ký số của cá nhân và tổ chức bằng cách thêm các cặp gía trị {key: 'key name', value: 'value'} vào trong 2 thẻ (singletonSigning: Dành cho chứ ký cá nhân, counterSigning: Dành cho chữ ký đơn vị). Bảng bên dưới mô tả chi tiết các giá trị trong cặp key, value.

Key Mô tả File Gía trị mẫu
VISIBLESIGNATURE Hiển thị khung chữ ký (true, false) pdf true
IMAGEANDTEXT Hiển thị cả chữ và ảnh trên khung chữ ký pdf true
SIGNATUREIMAGE Hình ảnh vào khung chữ ký value là String base64. Định dạng support : png , jpg pdf aW1hZ2UgdG8gYWRkIHRvIHRoZS
BzaWduYXR1cmUgZnJhbWUgYXMgQm
FzZTY0IHN0cmluZw==
PAGENO Thiết lập trang đặt khung chữ ký: “1”,“First”,“Last” pdf 1
POSITIONIDENTIFIER Đoạn string để tìm kiếm nơi đặt chữ ký pdf
RECTANGLEOFFSET Khi tìm được chuỗi string, đây là độ dời (x,y) để đặt chữ ký cho đẹp hơn pdf '-30,5'
RECTANGLESIZE Kích thước khung chữ nhận chữ ký (Width,Height) pdf '170,90'
COORDINATE Thiết lập vị trí tuyệt đối cho khung chữ ký, thứ tự “x1,y1,x2,y2”, lưu ý không có khoảng trắng giữa các giá trị. pdf '0,0,300,60'
TEXTCOLOR Thiết lập màu chữ cho khung chữ ký pdf red
TEXTDIRECTION Vị trí hiển thị text trên khung chữ ký pdf LEFTTORIGHT: Text bên trái, Image bên phải
RIGHTTOLEFT : Text bên phải và Image bên trái
SHOWSIGNERINFOSIGNERINFOPREFIX Hiển thị thông tin người ký trên khung chữ ký. Phần thông tin sau PREFIX sẽ được lấy từ trường CN chứng thư số pdf {SHOWSIGNERINFO: true,SIGNERINFOPREFIX: 'Ký bởi'} Sẽ hiện thị dòng : “Ký bởi: {Certificate Commmon Name}”
SHOWDATETIMEDATETIMEPREFIX Hiển thị thông tin ngày ký trên khung chữ ký. Dữ liệu ngày ký sẽ lấy theo giờ trên server pdf {SHOWDATETIME: true,DATETIMEPREFIX: 'Ký ngày'} Sẽ hiện thị dòng : “Ký ngày: {DD/MM/YYYY}”
SHOWREASON, SIGNREASONPREFIXSIGNREASON Hiển thị thông tin REASON trên khung chữ ký pdf {SHOWREASON: true, SIGNREASONPREFIX: 'Lý do',SIGNREASON:'Duyệt'} Sẽ hiện thị dòng : “Lý do: Duyệt”
SHOWLOCATION, LOCATIONLOCATIONPREFIX Hiển thị thông tin LOCATION trên khung chữ ký pdf {SHOWLOCATION: true, LOCATION: 'Hà Nội', LOCATIONPREFIX:'Nơi ký'} Sẽ hiện thị dòng : “Nơi ký: Hà Nội”
LOCKAFTERSIGNING Lock tài liệu sau khi ký , Tài liệu đã lock sẽ không thểm add thêm chữ ký (true, false) pdf true
SHOWEMAILEMAILPREFIX Hiển thị email trên chữ ký pdf {SHOWEMAIL: true, EMAILPREFIX: 'Email: '} Sẽ hiện thị dòng : “Email: [địa chỉ email]”
ALGORITHM Thuật toán băm xml SHA-1
SIGNATUREFORMAT định dạng chữ ký số (DSIG DSIG_SINGLE_NODE DSIG_MULTIPLE_NODES DSIG_XPATH XADES_EPES) xml DSIG
SIGNATUREID id của thẻ chưa dữ liệu cần ký xml seller
ATTRIBUTENAME Tên thuộc tính id xml id
CANONICALIZATIONMETHOD CANONICALIZATIONMETHOD (EXCLUSIVE, EXCLUSIVE_WITH_COMMENTS, INCLUSIVE, INCLUSIVE_WITH_COMMENTS) xml INCLUSIVE
NODETOBESIGNED NODETOBESIGNED xml data
SIGNATURELOCATION SIGNATURELOCATION xml inv:invoice

Generated by aglio on 15 Jul 2022