CX
5/8/2026
blog.summarize
blog.share_blog
API này dùng để xem danh sách, tạo, cập nhật và xoá API Key trong một workspace.
API Key dùng để xác thực các ứng dụng tự động khi gọi public API. Mỗi key hoạt động dưới danh nghĩa người dùng được chọn tại accountId và bị giới hạn bởi quyền hiện tại của người dùng đó.
Bảo vệ secret: Credential đầy đủ chỉ được trả về một lần sau khi tạo tại
data.secretToken. Hãy lưu an toàn ngay lúc đó. API danh sách không cho phép lấy lại secret.
Mọi request cần có:
Authorization: Bearer {tokenId}-{secretToken}
Content-Type: application/jsonNgười dùng gắn với credential đang gọi phải có quyền quản lý API Key tương ứng:
| Thao tác | Quyền cần có |
|---|---|
| Xem danh sách | Xem API Key |
| Tạo hoặc cập nhật | Tạo và chỉnh sửa API Key |
| Xoá | Xoá API Key |
Workspace được xác định từ credential đang gọi. Không gửi workspace ID trong body.
| Thao tác | Method | Endpoint |
|---|---|---|
| Xem danh sách API Key | POST |
/bapi/v1/api-keys/list |
| Tạo API Key | POST |
/bapi/v1/api-keys |
| Tạo API Key (alias) | POST |
/bapi/v1/api-keys/create |
| Cập nhật API Key | PUT |
/bapi/v1/api-keys/{apiKeyId} |
| Xoá API Key | POST |
/bapi/v1/api-keys/delete |
Endpoint danh sách dùng POST nhưng chỉ đọc dữ liệu.
Quy ước HTTP status:
| Kết quả | HTTP status |
|---|---|
Tạo thành công với r = 0 |
201 |
Danh sách, cập nhật hoặc xoá thành công với r = 0 |
200 |
Lỗi kiểm tra dữ liệu, phân quyền hoặc lỗi nghiệp vụ khác với r != 0 |
400 |
| Credential gọi API không hợp lệ hoặc đã hết hạn | 401 |
| Vượt giới hạn tần suất | 429 |
| Lỗi máy chủ | 500 |
Thao tác chỉ thành công khi r = 0.
| Trường | Kiểu | Mô tả |
|---|---|---|
id |
String | ID của API Key do hệ thống sinh |
name |
String | Tên dễ nhận biết; bắt buộc và không được trùng trong workspace |
description |
String | Mô tả không bắt buộc |
isActive |
Boolean | true cho phép sử dụng key; false vô hiệu hoá key ngay lập tức |
expiresOn |
Long | Thời điểm hết hạn theo Unix milliseconds; 0 nghĩa là không hết hạn |
accountId |
String | Tài khoản có quyền được sử dụng khi key gọi API |
created |
Long | Thời điểm tạo theo Unix milliseconds |
createdBy |
String | ID người tạo API Key |
createdByInfo |
Object/null | Thông tin tóm tắt người tạo nếu có |
accountIdInfo |
Object/null | Thông tin tóm tắt người dùng được chọn tại accountId nếu có |
secretToken không thuộc tài nguyên được trả về từ API danh sách. Trường này chỉ xuất hiện trong response tạo thành công.
Endpoint: POST /bapi/v1/api-keys/list
Tất cả các trường đều không bắt buộc. Gửi {} để dùng giá trị mặc định.
{
"page": 1,
"limit": 50,
"name": "integration",
"isActive": true,
"accountId": "AC8M3Q7D2K1P",
"order": "created",
"sort": "desc"
}| Trường | Kiểu | Mô tả |
|---|---|---|
page |
Integer | Số trang, bắt đầu từ 1. Mặc định: 1 |
limit |
Integer | Số lượng mỗi trang. Mặc định: 50 |
id |
String | Lọc chính xác theo API Key ID |
name |
String | Tìm kiếm một phần theo tên |
description |
String | Tìm kiếm một phần theo mô tả |
isActive |
Boolean | Lọc theo trạng thái đang hoạt động hoặc đã vô hiệu hoá |
accountId |
String | Lọc chính xác theo tài khoản thực thi |
expiresOn |
String | Khoảng thời gian hết hạn theo milliseconds, định dạng {from}-{to} |
created |
String | Khoảng thời gian tạo theo milliseconds, định dạng {from}-{to} |
order |
String | Trường tài nguyên dùng để sắp xếp. Mặc định: created |
sort |
String | asc hoặc desc. Mặc định: desc |
Với khoảng thời gian một phía, để trống phía còn lại. Ví dụ:
"1780000000000-": lớn hơn hoặc bằng thời điểm bắt đầu."-1790000000000": nhỏ hơn hoặc bằng thời điểm kết thúc.curl --location 'https://{workspace-domain}/bapi/v1/api-keys/list' \
--header 'Authorization: Bearer {tokenId}-{secretToken}' \
--header 'Content-Type: application/json' \
--data '{
"page": 1,
"limit": 50,
"isActive": true,
"order": "created",
"sort": "desc"
}'{
"r": 0,
"msg": "Success",
"meta": {
"total": 1,
"currentPage": 1,
"lastPage": 1,
"perPage": 50
},
"data": [
{
"id": "AT8M3Q7D2K1P",
"name": "Order integration",
"description": "Key used by the order synchronization service",
"isActive": true,
"expiresOn": 1786185511152,
"accountId": "AC8M3Q7D2K1P",
"created": 1783507200000,
"createdBy": "PE7M2Q9D4K6RX",
"createdByInfo": null,
"accountIdInfo": null
}
]
}Response không bao giờ chứa secretToken có thể sử dụng được.
Endpoint: POST /bapi/v1/api-keys
Alias tương đương: POST /bapi/v1/api-keys/create.
{
"name": "Order integration",
"description": "Key used by the order synchronization service",
"isActive": true,
"expiresOn": 1786185511152,
"accountId": "AC8M3Q7D2K1P"
}| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
name |
String | Có | Tên API Key không được trùng |
description |
String | Không | Mục đích sử dụng hoặc đơn vị sở hữu integration |
isActive |
Boolean | Không | Key có được phép sử dụng hay không. Mặc định: true |
expiresOn |
Long | Không | Unix milliseconds trong tương lai; bỏ qua hoặc gửi 0 nếu không hết hạn |
accountId |
String | Có | Tài khoản đang hoạt động trong workspace, có quyền sẽ được key sử dụng |
Nên chọn tài khoản có quyền tối thiểu, chỉ đủ cho nghiệp vụ của integration.
curl --location 'https://{workspace-domain}/bapi/v1/api-keys' \
--header 'Authorization: Bearer {tokenId}-{secretToken}' \
--header 'Content-Type: application/json' \
--data '{
"name": "Order integration",
"description": "Key used by the order synchronization service",
"isActive": true,
"expiresOn": 1786185511152,
"accountId": "AC8M3Q7D2K1P"
}'{
"r": 0,
"msg": "Success",
"data": {
"id": "AT8M3Q7D2K1P",
"secretToken": "AT8M3Q7D2K1P-<one-time-secret>"
}
}Hãy sao chép data.secretToken ngay khi nhận response. Không đưa secret vào source code, bộ nhớ trình duyệt, URL, ticket, tin nhắn hoặc log ứng dụng.
Endpoint: PUT /bapi/v1/api-keys/{apiKeyId}
ID trên URL là nguồn tin cậy. Nếu body có id, giá trị đó sẽ bị bỏ qua và thay bằng {apiKeyId}.
{
"name": "Order integration",
"description": "Temporarily disabled during maintenance",
"isActive": false,
"expiresOn": 1786185511152,
"accountId": "AC8M3Q7D2K1P"
}name, description, isActive và accountId chỉ thay đổi khi được gửi.
Luôn gửi
expiresOnkhi cập nhật. Nếu bỏ qua, phiên bản dịch vụ hiện tại sẽ đặt trường này thành0(không hết hạn). Gửi rõ0khi đó là kết quả mong muốn.
Thay đổi hoặc xoá thời hạn không làm lộ hay thay thế secret hiện tại. Để xoay vòng secret, hãy tạo key mới, cập nhật ứng dụng sử dụng key, sau đó vô hiệu hoá hoặc xoá key cũ.
curl --location --request PUT \
'https://{workspace-domain}/bapi/v1/api-keys/AT8M3Q7D2K1P' \
--header 'Authorization: Bearer {tokenId}-{secretToken}' \
--header 'Content-Type: application/json' \
--data '{
"description": "Temporarily disabled during maintenance",
"isActive": false,
"expiresOn": 1786185511152
}'{
"r": 0,
"msg": "Success"
}Dùng API danh sách với ID của key để xác minh trạng thái sau cập nhật.
Endpoint: POST /bapi/v1/api-keys/delete
Xoá sẽ thu hồi key vĩnh viễn và không thể hoàn tác. Nếu cần tạm dừng có thể khôi phục, hãy cập nhật isActive: false.
{
"id": "AT8M3Q7D2K1P"
}curl --location 'https://{workspace-domain}/bapi/v1/api-keys/delete' \
--header 'Authorization: Bearer {tokenId}-{secretToken}' \
--header 'Content-Type: application/json' \
--data '{
"id": "AT8M3Q7D2K1P"
}'{
"r": 0,
"msg": "Success"
}Nếu một key tự xoá chính nó, response xoá vẫn có thể thành công nhưng credential đó không thể xác thực các request tiếp theo.
| HTTP | r |
Mô tả |
|---|---|---|
400 |
10 |
Người dùng gọi API không có quyền quản lý API Key tương ứng |
400 |
405 |
Thiếu API Key ID hoặc không tìm thấy key |
400 |
407 |
Thiếu tên hoặc tên đã tồn tại |
400 |
420 |
Hướng sắp xếp phải là asc hoặc desc |
400 |
700 |
Lỗi máy chủ |
401 |
100001 |
Credential gọi API bị thiếu, sai, đã vô hiệu hoá hoặc hết hạn |
429 |
42900 |
Vượt giới hạn tần suất gọi API |
Ví dụ:
{
"r": 407,
"msg": "NAME_EXIST"
}blog.blogs_related
Bắt đầu đổi mới phương thức vận hành và tự chủ hệ thống quản trị công việc của bạn
CÔNG TY CỔ PHẦN STRINGEE
Văn phòng