Bỏ qua để đến nội dung

Xác thực

~3 phút đọc

Mọi lời gọi tới /v1 mang một khoá API trong header Authorization. Khoá được tạo trong trang Nhà phát triển của tài khoản; mỗi khoá thuộc một tổ chức và chỉ làm được những việc nằm trong scope của nó.

Authorization: Bearer dt_test_…
Tiền tốDữ liệuDùng khi
dt_test_Dữ liệu thử (sandbox), không tác động tài khoản thật.Phát triển, kiểm thử tự động, ví dụ trong tài liệu.
dt_live_Dữ liệu thật của tổ chức.Chạy thật.

Giữ hai khoá ở hai biến môi trường khác nhau và đừng dùng khoá dt_live_ trong mã chạy thử. Ví dụ trong tài liệu luôn đọc khoá từ $DT_API_KEY.

Mỗi route ghi quyền cần có (x-dt-permission) và scope của khoá (x-dt-scope) trong đặc tả OpenAPI. Với các route đọc hiện có:

ScopeCho phép
accounts:readDanh sách và chi tiết tài khoản ngân hàng (che STK 4 số cuối).
transactions:readDanh sách, chi tiết, nguồn gốc, nhật ký, đồng bộ và tổng hợp giao dịch.
balances:readSố dư của một tài khoản hoặc của tất cả tài khoản (tách tạm tính/đã xác thực).
webhooks:writeTạo, sửa endpoint webhook, kiểm thử (:test), phát lại (:replay), xoay khoá (:rotate-secret).
mcp:readGọi các công cụ MCP chỉ đọc (/mcp/readonly hoặc chế độ đọc).
collect:writeTạo yêu cầu thanh toán VietQR và mã đơn DTP.
reconcile:proposeTạo phân bổ đối soát nháp, yêu cầu checker duyệt.
integrations:readĐọc trạng thái và nhật ký các kênh tích hợp thương mại/chat.
integrations:writeQuản lý (integration.manage), kiểm thử (integration.test) và phát lại sự kiện tích hợp (integration.replay). Không áp dụng cho xoay credential (luôn cần con người thao tác qua step-up).

"Đã xác thực" trong balances:read là xác thực nguồn, không phải ngân hàng xác nhận quyết toán.

Khoá thiếu scope nhận 403 scope_not_allowed; khoá đủ scope nhưng người cấp không có quyền trên dữ liệu đó nhận 403 permission_denied. Hãy cấp khoá đúng scope tối thiểu bạn cần.

  • Lưu khoá trong trình quản lý bí mật hoặc biến môi trường của nơi chạy, không đưa vào mã nguồn, ảnh chụp màn hình hay nhật ký.
  • SDK không bao giờ ghi khoá vào log hay thông điệp lỗi; mã của bạn cũng nên như vậy.
  • Khoá có thể được giới hạn theo địa chỉ IP: lời gọi từ IP khác nhận 403 ip_not_allowed.
  • Nghi ngờ lộ khoá: thu hồi ngay trong trang Nhà phát triển. Từ lúc đó mọi lời gọi bằng khoá đó nhận 401 api_key_revoked.
HTTPMã lỗiThử lạiÝ nghĩa
401unauthenticatedkhôngCần đăng nhập
401invalid_api_keykhôngKhoá API không hợp lệ
401api_key_expiredkhôngKhoá API đã hết hạn
401api_key_revokedkhôngKhoá API đã bị thu hồi
403ip_not_allowedkhôngĐịa chỉ IP không được phép với khoá này
403permission_deniedkhôngKhông đủ quyền
403scope_not_allowedkhôngPhạm vi khoá không cho phép route này

Cả bảy lỗi đều không nên thử lại nguyên văn: sửa khoá, scope hoặc IP rồi mới gọi lại. Cách đọc phản hồi lỗi ở trang Lỗi.