Khoá API
khoa apiKhoá API: tạo, xoay, thu hồi, gia hạn và xem các lần gọi gần đây (không bao giờ hiện lại khoá). khoa api: tao, xoay, thu hoi, gia han va xem cac lan goi gan day (khong bao gio hien lai khoa).Khoá API: tạo, xoay, thu hồi, gia hạn và xem các lần gọi gần đây (không bao giờ hiện lại khoá).
Endpoint
Phần tiêu đề “Endpoint”| Method | Path | Tóm tắt | Quyền | Nhóm tốc độ | Tương tác |
|---|---|---|---|---|---|
GET | /v1/api-keys | Danh sách khoá API của tổ chức | apikey.read | read | Scalar |
POST | /v1/api-keys | Tạo khoá API (bí mật chỉ trả một lần) | apikey.write | write | Scalar |
GET | /v1/api-keys/{id} | Chi tiết khoá API (không bao giờ có bí mật) | apikey.read | read | Scalar |
GET | /v1/api-keys/{id}/calls | Các lệnh gọi mẫu gần đây của khoá | apikey.read | read | Scalar |
POST | /v1/api-keys/{id}:extend | Dời hạn khoá (tối đa 12 tháng kể từ bây giờ; khôi phục được khoá đã hết hạn) | apikey.write | write | Scalar |
POST | /v1/api-keys/{id}:revoke | Thu hồi khoá (có hiệu lực trên mọi máy chủ trong vòng 5 giây) | apikey.write | write | Scalar |
POST | /v1/api-keys/{id}:rotate | Xoay khoá: cấp khoá thay thế, khoá cũ còn dùng 24 giờ | apikey.write | write | Scalar |
Chi tiết endpoint
Phần tiêu đề “Chi tiết endpoint”GET /v1/api-keys
Phần tiêu đề “GET /v1/api-keys”Danh sách khoá API của tổ chức
Chỉ người giữ nút gốc với phạm vi all xem được (còn lại 403 permission_denied). Phân trang theo con trỏ.
- Nhóm tốc độ:
read - Phản hồi thành công
200: Danh sách khoá. —ApiKeyList,application/json - Mã lỗi riêng của endpoint:
invalid_cursor
Tham số
Phần tiêu đề “Tham số”| Tên | Vị trí | Bắt buộc | Kiểu | Mô tả |
|---|---|---|---|---|
limit | query | Không | integer | Số phần tử mỗi trang (1–100, mặc định 20). |
cursor | query | Không | Cursor | Con trỏ phân trang mờ (cur_…) lấy từ next_cursor; không tự tạo hay sửa. |
state | query | Không | string | — |
env | query | Không | string | live: dữ liệu thật; test: sandbox. |
curl -sS -X GET "https://api.dongtien.pro/v1/api-keys" \ -H "Authorization: Bearer $DT_API_KEY"import { createClient } from "@dongtien/sdk";
const dt = createClient({ apiKey: process.env.DT_API_KEY! });
const { data } = await dt.GET("/v1/api-keys");import os
from dongtien import DongTienfrom dongtien_api.api.khoa_api import list_api_keys
with DongTien(api_key=os.environ["DT_API_KEY"]) as dt: result = list_api_keys.sync(client=dt.client)POST /v1/api-keys
Phần tiêu đề “POST /v1/api-keys”Tạo khoá API (bí mật chỉ trả một lần)
Cần xác thực lại gần đây. Khoá không mang scope mà người tạo không thực hiện được ở mọi công ty khoá chạm tới (403 permission_denied); công ty hoặc tài khoản ngoài phạm vi → 404. Được ghi nhật ký kiểm toán apikey.create.
- Nhóm tốc độ:
write - Nội dung yêu cầu:
CreateApiKey(application/json, bắt buộc) - Phản hồi thành công
201: Khoá vừa tạo (kèm bí mật). —ApiKeyIssued,application/json - Mã lỗi riêng của endpoint:
step_up_required,conflict
curl -sS -X POST "https://api.dongtien.pro/v1/api-keys" \ -H "Authorization: Bearer $DT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Đồng bộ kế toán", "env": "live", "scopes": [ "transactions:read", "accounts:read" ], "all_companies": true, "ip_allowlist": [ "203.0.113.0/24" ], "expires_at": "2030-06-30T00:00:00+07:00"}'import { createClient } from "@dongtien/sdk";
const dt = createClient({ apiKey: process.env.DT_API_KEY! });
const { data } = await dt.POST("/v1/api-keys", { body: { "name": "Đồng bộ kế toán", "env": "live", "scopes": [ "transactions:read", "accounts:read" ], "all_companies": true, "ip_allowlist": [ "203.0.113.0/24" ], "expires_at": "2030-06-30T00:00:00+07:00" },});import os
from dongtien import DongTienfrom dongtien_api.api.khoa_api import create_api_keyfrom dongtien_api.models import CreateApiKey
with DongTien(api_key=os.environ["DT_API_KEY"]) as dt: result = create_api_key.sync( client=dt.client, body=CreateApiKey.from_dict({ "name": "Đồng bộ kế toán", "env": "live", "scopes": [ "transactions:read", "accounts:read", ], "all_companies": True, "ip_allowlist": [ "203.0.113.0/24", ], "expires_at": "2030-06-30T00:00:00+07:00", }), )GET /v1/api-keys/{id}
Phần tiêu đề “GET /v1/api-keys/{id}”Chi tiết khoá API (không bao giờ có bí mật)
Quyền: apikey.read- Nhóm tốc độ:
read - Phản hồi thành công
200: Khoá. —ApiKey,application/json - Mã lỗi riêng của endpoint:
resource_not_found
Tham số
Phần tiêu đề “Tham số”| Tên | Vị trí | Bắt buộc | Kiểu | Mô tả |
|---|---|---|---|---|
id | path | Có | ApiKeyId | Mã khoá API (apk_…). |
curl -sS -X GET "https://api.dongtien.pro/v1/api-keys/$ID" \ -H "Authorization: Bearer $DT_API_KEY"import { createClient } from "@dongtien/sdk";
const dt = createClient({ apiKey: process.env.DT_API_KEY! });
const { data } = await dt.GET("/v1/api-keys/{id}", { params: { path: { "id": "apk_0f5k2m9q4h7t3n8r6v1w0x5yz0" }, },});import os
from dongtien import DongTienfrom dongtien_api.api.khoa_api import get_api_key
with DongTien(api_key=os.environ["DT_API_KEY"]) as dt: result = get_api_key.sync(id="apk_0f5k2m9q4h7t3n8r6v1w0x5yz0", client=dt.client)GET /v1/api-keys/{id}/calls
Phần tiêu đề “GET /v1/api-keys/{id}/calls”Các lệnh gọi mẫu gần đây của khoá
Phương thức, đường dẫn, mã trạng thái (không có nội dung). Tối đa 50 lệnh gần nhất, không phân trang.
Quyền: apikey.read- Nhóm tốc độ:
read - Phản hồi thành công
200: Các lệnh gọi. —ApiKeyCallList,application/json - Mã lỗi riêng của endpoint:
resource_not_found
Tham số
Phần tiêu đề “Tham số”| Tên | Vị trí | Bắt buộc | Kiểu | Mô tả |
|---|---|---|---|---|
id | path | Có | ApiKeyId | Mã khoá API (apk_…). |
limit | query | Không | integer | — |
curl -sS -X GET "https://api.dongtien.pro/v1/api-keys/$ID/calls" \ -H "Authorization: Bearer $DT_API_KEY"import { createClient } from "@dongtien/sdk";
const dt = createClient({ apiKey: process.env.DT_API_KEY! });
const { data } = await dt.GET("/v1/api-keys/{id}/calls", { params: { path: { "id": "apk_0f5k2m9q4h7t3n8r6v1w0x5yz0" }, },});import os
from dongtien import DongTienfrom dongtien_api.api.khoa_api import list_api_key_calls
with DongTien(api_key=os.environ["DT_API_KEY"]) as dt: result = list_api_key_calls.sync(id="apk_0f5k2m9q4h7t3n8r6v1w0x5yz0", client=dt.client)POST /v1/api-keys/{id}:extend
Phần tiêu đề “POST /v1/api-keys/{id}:extend”Dời hạn khoá (tối đa 12 tháng kể từ bây giờ; khôi phục được khoá đã hết hạn)
Cần xác thực lại gần đây. Khoá đã thu hồi mãi mãi bị thu hồi (409 conflict). Được ghi nhật ký kiểm toán apikey.extend.
- Nhóm tốc độ:
write - Nội dung yêu cầu:
ExtendApiKey(application/json, bắt buộc) - Phản hồi thành công
200: Khoá sau khi dời hạn. —ApiKey,application/json - Mã lỗi riêng của endpoint:
step_up_required,resource_not_found,conflict
Tham số
Phần tiêu đề “Tham số”| Tên | Vị trí | Bắt buộc | Kiểu | Mô tả |
|---|---|---|---|---|
id | path | Có | ApiKeyId | Mã khoá API (apk_…). |
curl -sS -X POST "https://api.dongtien.pro/v1/api-keys/$ID:extend" \ -H "Authorization: Bearer $DT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "expires_at": "2030-06-30T00:00:00+07:00"}'import { createClient } from "@dongtien/sdk";
const dt = createClient({ apiKey: process.env.DT_API_KEY! });
const { data } = await dt.POST("/v1/api-keys/{id}:extend", { params: { path: { "id": "apk_0f5k2m9q4h7t3n8r6v1w0x5yz0" }, }, body: { "expires_at": "2030-06-30T00:00:00+07:00" },});import os
from dongtien import DongTienfrom dongtien_api.api.khoa_api import extend_api_keyfrom dongtien_api.models import ExtendApiKey
with DongTien(api_key=os.environ["DT_API_KEY"]) as dt: result = extend_api_key.sync( id="apk_0f5k2m9q4h7t3n8r6v1w0x5yz0", client=dt.client, body=ExtendApiKey.from_dict({ "expires_at": "2030-06-30T00:00:00+07:00", }), )POST /v1/api-keys/{id}:revoke
Phần tiêu đề “POST /v1/api-keys/{id}:revoke”Thu hồi khoá (có hiệu lực trên mọi máy chủ trong vòng 5 giây)
Cần xác thực lại gần đây. Khoá đã thu hồi → 409 conflict. Thu hồi khoá thay thế trong thời gian ân hạn cũng thu hồi khoá tiền nhiệm. Được ghi nhật ký kiểm toán apikey.revoke.
- Nhóm tốc độ:
write - Nội dung yêu cầu:
RevokeApiKey(application/json) - Phản hồi thành công
200: Khoá đã thu hồi. —ApiKey,application/json - Mã lỗi riêng của endpoint:
step_up_required,resource_not_found,conflict
Tham số
Phần tiêu đề “Tham số”| Tên | Vị trí | Bắt buộc | Kiểu | Mô tả |
|---|---|---|---|---|
id | path | Có | ApiKeyId | Mã khoá API (apk_…). |
curl -sS -X POST "https://api.dongtien.pro/v1/api-keys/$ID:revoke" \ -H "Authorization: Bearer $DT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "reason": "Khoá bị lộ trong kho mã nguồn."}'import { createClient } from "@dongtien/sdk";
const dt = createClient({ apiKey: process.env.DT_API_KEY! });
const { data } = await dt.POST("/v1/api-keys/{id}:revoke", { params: { path: { "id": "apk_0f5k2m9q4h7t3n8r6v1w0x5yz0" }, }, body: { "reason": "Khoá bị lộ trong kho mã nguồn." },});import os
from dongtien import DongTienfrom dongtien_api.api.khoa_api import revoke_api_keyfrom dongtien_api.models import RevokeApiKey
with DongTien(api_key=os.environ["DT_API_KEY"]) as dt: result = revoke_api_key.sync( id="apk_0f5k2m9q4h7t3n8r6v1w0x5yz0", client=dt.client, body=RevokeApiKey.from_dict({ "reason": "Khoá bị lộ trong kho mã nguồn.", }), )POST /v1/api-keys/{id}:rotate
Phần tiêu đề “POST /v1/api-keys/{id}:rotate”Xoay khoá: cấp khoá thay thế, khoá cũ còn dùng 24 giờ
Cần xác thực lại gần đây. Chỉ xoay được khoá đang active (còn lại 409 conflict); người xoay phải có khả năng cấp mọi scope của khoá cũ. Được ghi nhật ký kiểm toán apikey.rotate; phản hồi có Cache-Control: no-store.
- Nhóm tốc độ:
write - Nội dung yêu cầu:
RotateApiKey(application/json) - Phản hồi thành công
200: Khoá thay thế và khoá cũ. —RotatedApiKey,application/json - Mã lỗi riêng của endpoint:
step_up_required,resource_not_found,conflict
Tham số
Phần tiêu đề “Tham số”| Tên | Vị trí | Bắt buộc | Kiểu | Mô tả |
|---|---|---|---|---|
id | path | Có | ApiKeyId | Mã khoá API (apk_…). |
curl -sS -X POST "https://api.dongtien.pro/v1/api-keys/$ID:rotate" \ -H "Authorization: Bearer $DT_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Đồng bộ kế toán (xoay quý 3)", "expires_at": "2030-06-30T00:00:00+07:00"}'import { createClient } from "@dongtien/sdk";
const dt = createClient({ apiKey: process.env.DT_API_KEY! });
const { data } = await dt.POST("/v1/api-keys/{id}:rotate", { params: { path: { "id": "apk_0f5k2m9q4h7t3n8r6v1w0x5yz0" }, }, body: { "name": "Đồng bộ kế toán (xoay quý 3)", "expires_at": "2030-06-30T00:00:00+07:00" },});import os
from dongtien import DongTienfrom dongtien_api.api.khoa_api import rotate_api_keyfrom dongtien_api.models import RotateApiKey
with DongTien(api_key=os.environ["DT_API_KEY"]) as dt: result = rotate_api_key.sync( id="apk_0f5k2m9q4h7t3n8r6v1w0x5yz0", client=dt.client, body=RotateApiKey.from_dict({ "name": "Đồng bộ kế toán (xoay quý 3)", "expires_at": "2030-06-30T00:00:00+07:00", }), )Đối tượng
Phần tiêu đề “Đối tượng”ApiKeyList
Phần tiêu đề “ApiKeyList”| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
data | ApiKey[] | Có | — |
data[].all_companies | boolean | Có | Mọi công ty của tổ chức (kể cả công ty thêm sau), trừ công ty cô lập cứng. |
data[].bank_account_ids | AccountId[] | null | Có | Chỉ các tài khoản này; null = mọi tài khoản của công ty khoá chạm tới. |
data[].company_ids | OrgId[] | Có | Công ty khoá được dùng; rỗng khi all_companies. |
data[].created_at | Timestamp | Có | — |
data[].created_by | UserId | Có | — |
data[].display | string | Có | dt_live_ + vài ký tự đầu + •••• + 4 ký tự cuối: phần duy nhất được hiện lại. |
data[].env | string | Có | live: dữ liệu thật; test: sandbox. Giá trị: live, test. |
data[].expires_at | Timestamp | null | Có | — |
data[].extended_at | Timestamp | null | Có | — |
data[].grace_until | string | null | Có | Khoá cũ vẫn dùng được đến thời điểm này sau khi xoay. |
data[].id | ApiKeyId | Có | — |
data[].ip_allowlist | string[] | Có | Địa chỉ IPv4/IPv6 hoặc CIDR được phép; rỗng = không giới hạn. |
data[].last4 | string | Có | — |
data[].last_used_at | Timestamp | null | Có | — |
data[].last_used_ip | string | null | Có | — |
data[].name | string | Có | — |
data[].pinned_version | string | null | Có | Phiên bản API (YYYY-MM-DD) khoá được ghim. |
data[].revoked_at | Timestamp | null | Có | — |
data[].revoked_reason | string | null | Có | — |
data[].rotated_from_id | string | null | Có | Khoá tiền nhiệm khi đây là khoá thay thế sau :rotate. |
data[].scopes | string[] | Có | Các scope khoá mang (xem danh mục scope). |
data[].start | string | Có | — |
data[].state | string | Có | Giá trị: active, revoked, expired. |
has_more | boolean | Có | — |
next_cursor | string | null | Có | Con trỏ trang kế; null khi hết dữ liệu. |
object | string | Có | Giá trị: list. |
CreateApiKey
Phần tiêu đề “CreateApiKey”| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
all_companies | boolean | Không | Mọi công ty của tổ chức (kể cả công ty thêm sau), trừ công ty cô lập cứng. |
bank_account_ids | AccountId[] | Không | Giới hạn theo tài khoản; bỏ trống = mọi tài khoản của các công ty được chọn. |
company_ids | OrgId[] | Không | Cần khi all_companies=false. |
env | string | Có | live: dữ liệu thật; test: sandbox. Giá trị: live, test. |
expires_at | string (date-time) | Không | Bắt buộc với khoá live; tối đa 12 tháng kể từ bây giờ. |
ip_allowlist | string[] | Không | Địa chỉ IPv4/IPv6 hoặc CIDR; giá trị sai → 422. |
name | string | Có | — |
pinned_version | string | Không | Phiên bản API YYYY-MM-DD để ghim. |
scopes | string[] | Có | Giá trị: transactions:read, accounts:read, balances:read, invoices:read, counterparties:read, cashflow:read, settlement:read, export:read, audit:read, mcp:read, collect:write, reconcile:propose, import:write, webhooks:write, integrations:write, collect:read, integrations:read, billing:read. |
ApiKeyIssued
Phần tiêu đề “ApiKeyIssued”| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
all_companies | boolean | Có | Mọi công ty của tổ chức (kể cả công ty thêm sau), trừ công ty cô lập cứng. |
bank_account_ids | AccountId[] | null | Có | Chỉ các tài khoản này; null = mọi tài khoản của công ty khoá chạm tới. |
company_ids | OrgId[] | Có | Công ty khoá được dùng; rỗng khi all_companies. |
created_at | Timestamp | Có | — |
created_by | UserId | Có | — |
display | string | Có | dt_live_ + vài ký tự đầu + •••• + 4 ký tự cuối: phần duy nhất được hiện lại. |
env | string | Có | live: dữ liệu thật; test: sandbox. Giá trị: live, test. |
expires_at | Timestamp | null | Có | — |
extended_at | Timestamp | null | Có | — |
grace_until | string | null | Có | Khoá cũ vẫn dùng được đến thời điểm này sau khi xoay. |
id | ApiKeyId | Có | — |
ip_allowlist | string[] | Có | Địa chỉ IPv4/IPv6 hoặc CIDR được phép; rỗng = không giới hạn. |
key | string | Có | Khoá đầy đủ, chỉ hiện một lần. Hãy lưu ngay: không thể lấy lại. |
last4 | string | Có | — |
last_used_at | Timestamp | null | Có | — |
last_used_ip | string | null | Có | — |
name | string | Có | — |
pinned_version | string | null | Có | Phiên bản API (YYYY-MM-DD) khoá được ghim. |
revoked_at | Timestamp | null | Có | — |
revoked_reason | string | null | Có | — |
rotated_from_id | string | null | Có | Khoá tiền nhiệm khi đây là khoá thay thế sau :rotate. |
scopes | string[] | Có | Các scope khoá mang (xem danh mục scope). |
start | string | Có | — |
state | string | Có | Giá trị: active, revoked, expired. |
ApiKey
Phần tiêu đề “ApiKey”| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
all_companies | boolean | Có | Mọi công ty của tổ chức (kể cả công ty thêm sau), trừ công ty cô lập cứng. |
bank_account_ids | AccountId[] | null | Có | Chỉ các tài khoản này; null = mọi tài khoản của công ty khoá chạm tới. |
company_ids | OrgId[] | Có | Công ty khoá được dùng; rỗng khi all_companies. |
created_at | Timestamp | Có | — |
created_by | UserId | Có | — |
display | string | Có | dt_live_ + vài ký tự đầu + •••• + 4 ký tự cuối: phần duy nhất được hiện lại. |
env | string | Có | live: dữ liệu thật; test: sandbox. Giá trị: live, test. |
expires_at | Timestamp | null | Có | — |
extended_at | Timestamp | null | Có | — |
grace_until | string | null | Có | Khoá cũ vẫn dùng được đến thời điểm này sau khi xoay. |
id | ApiKeyId | Có | — |
ip_allowlist | string[] | Có | Địa chỉ IPv4/IPv6 hoặc CIDR được phép; rỗng = không giới hạn. |
last4 | string | Có | — |
last_used_at | Timestamp | null | Có | — |
last_used_ip | string | null | Có | — |
name | string | Có | — |
pinned_version | string | null | Có | Phiên bản API (YYYY-MM-DD) khoá được ghim. |
revoked_at | Timestamp | null | Có | — |
revoked_reason | string | null | Có | — |
rotated_from_id | string | null | Có | Khoá tiền nhiệm khi đây là khoá thay thế sau :rotate. |
scopes | string[] | Có | Các scope khoá mang (xem danh mục scope). |
start | string | Có | — |
state | string | Có | Giá trị: active, revoked, expired. |
ApiKeyCallList
Phần tiêu đề “ApiKeyCallList”| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
data | ApiKeyCall[] | Có | — |
data[].at | Timestamp | Có | — |
data[].ip | string | null | Có | — |
data[].method | string | Có | — |
data[].ms | integer | Có | Thời gian xử lý (mili giây). |
data[].path | string | Có | — |
data[].status | integer | Có | — |
has_more | boolean | Có | Giá trị: false. |
next_cursor | any | null | Có | — |
object | string | Có | Giá trị: list. |
ExtendApiKey
Phần tiêu đề “ExtendApiKey”| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
expires_at | string (date-time) | Có | — |
RevokeApiKey
Phần tiêu đề “RevokeApiKey”| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
reason | string | Không | — |
RotateApiKey
Phần tiêu đề “RotateApiKey”| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
expires_at | string (date-time) | Không | — |
name | string | Không | — |
RotatedApiKey
Phần tiêu đề “RotatedApiKey”| Trường | Kiểu | Bắt buộc | Mô tả |
|---|---|---|---|
key | ApiKeyIssued | Có | — |
key.all_companies | boolean | Có | Mọi công ty của tổ chức (kể cả công ty thêm sau), trừ công ty cô lập cứng. |
key.bank_account_ids | AccountId[] | null | Có | Chỉ các tài khoản này; null = mọi tài khoản của công ty khoá chạm tới. |
key.company_ids | OrgId[] | Có | Công ty khoá được dùng; rỗng khi all_companies. |
key.created_at | Timestamp | Có | — |
key.created_by | UserId | Có | — |
key.display | string | Có | dt_live_ + vài ký tự đầu + •••• + 4 ký tự cuối: phần duy nhất được hiện lại. |
key.env | string | Có | live: dữ liệu thật; test: sandbox. Giá trị: live, test. |
key.expires_at | Timestamp | null | Có | — |
key.extended_at | Timestamp | null | Có | — |
key.grace_until | string | null | Có | Khoá cũ vẫn dùng được đến thời điểm này sau khi xoay. |
key.id | ApiKeyId | Có | — |
key.ip_allowlist | string[] | Có | Địa chỉ IPv4/IPv6 hoặc CIDR được phép; rỗng = không giới hạn. |
key.key | string | Có | Khoá đầy đủ, chỉ hiện một lần. Hãy lưu ngay: không thể lấy lại. |
key.last4 | string | Có | — |
key.last_used_at | Timestamp | null | Có | — |
key.last_used_ip | string | null | Có | — |
key.name | string | Có | — |
key.pinned_version | string | null | Có | Phiên bản API (YYYY-MM-DD) khoá được ghim. |
key.revoked_at | Timestamp | null | Có | — |
key.revoked_reason | string | null | Có | — |
key.rotated_from_id | string | null | Có | Khoá tiền nhiệm khi đây là khoá thay thế sau :rotate. |
key.scopes | string[] | Có | Các scope khoá mang (xem danh mục scope). |
key.start | string | Có | — |
key.state | string | Có | Giá trị: active, revoked, expired. |
old_key | ApiKey | Có | — |
old_key.all_companies | boolean | Có | Mọi công ty của tổ chức (kể cả công ty thêm sau), trừ công ty cô lập cứng. |
old_key.bank_account_ids | AccountId[] | null | Có | Chỉ các tài khoản này; null = mọi tài khoản của công ty khoá chạm tới. |
old_key.company_ids | OrgId[] | Có | Công ty khoá được dùng; rỗng khi all_companies. |
old_key.created_at | Timestamp | Có | — |
old_key.created_by | UserId | Có | — |
old_key.display | string | Có | dt_live_ + vài ký tự đầu + •••• + 4 ký tự cuối: phần duy nhất được hiện lại. |
old_key.env | string | Có | live: dữ liệu thật; test: sandbox. Giá trị: live, test. |
old_key.expires_at | Timestamp | null | Có | — |
old_key.extended_at | Timestamp | null | Có | — |
old_key.grace_until | string | null | Có | Khoá cũ vẫn dùng được đến thời điểm này sau khi xoay. |
old_key.id | ApiKeyId | Có | — |
old_key.ip_allowlist | string[] | Có | Địa chỉ IPv4/IPv6 hoặc CIDR được phép; rỗng = không giới hạn. |
old_key.last4 | string | Có | — |
old_key.last_used_at | Timestamp | null | Có | — |
old_key.last_used_ip | string | null | Có | — |
old_key.name | string | Có | — |
old_key.pinned_version | string | null | Có | Phiên bản API (YYYY-MM-DD) khoá được ghim. |
old_key.revoked_at | Timestamp | null | Có | — |
old_key.revoked_reason | string | null | Có | — |
old_key.rotated_from_id | string | null | Có | Khoá tiền nhiệm khi đây là khoá thay thế sau :rotate. |
old_key.scopes | string[] | Có | Các scope khoá mang (xem danh mục scope). |
old_key.start | string | Có | — |
old_key.state | string | Có | Giá trị: active, revoked, expired. |