API Key lại có hai loại, cấp cho hai việc khác nhau — dùng nhầm sẽ bị từ chối:
API Key
Mọi request tới Integration API gửi kèm headerX-API-Key:
Lỗi liên quan tới API Key
Mọi lỗi đều trả401 với code: "UNAUTHORIZED"; nguyên nhân nằm trong message:
Key bị thu hồi và key hết hạn trả về cùng thông báo với key sai — hệ thống không phân biệt ra ngoài. Chi tiết: Mã lỗi.
Lấy Access Token — Partner Login
Khi bạn muốn nhúng giao diện econtractid (iframe trên web hoặc SDK mobile), người dùng cuối cần một access token. Backend của bạn dùng API Key để đổi lấy token cho một người dùng cụ thể:Request
Response
Trả về HTTP201 (mặc định của POST), body bọc trong envelope chuẩn:
userInfo ở trên là bản rút gọn. Response thật còn có address, avatar, memberOf, updatedAt, và các trường chữ ký (defaultSignature, imageSignatures, backgroundSignatures).status là số (1 = chờ kích hoạt, 2 = đang hoạt động). organizationId bằng -1 với người dùng bên ngoài — đây là giá trị bình thường, không phải lỗi.Lỗi
Giới hạn quan trọng
Dùng access token gọi API
Token gửi qua headerx-access-token, giá trị là JWT thuần:
X-API-Key (người dùng = tài khoản gắn với key) hoặc x-access-token (người dùng = chủ sở hữu token). Gửi kèm cả hai thì API Key được ưu tiên, token bị bỏ qua — nên chỉ gửi một.
401 khi token trông vẫn hợp lệ
Tầng xác thực chỉ kiểm tra chữ ký và hạn dùng của token, không kiểm tra quyền. Nhận
401 nghĩa là token/header sai — vấn đề về quyền hạn trả 403, còn dữ liệu không thuộc phạm vi người dùng trả 404.Vòng đời token
Vì hệ thống không có endpoint refresh, luồng xử lý khi token hết hạn là lấy token mới:
Áp dụng vào tích hợp
Nhúng web (iframe)
Truyền token qua query param
atSDK Flutter
Truyền token vào
openTaskList(), làm mới bằng updateAccessToken()
