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

Thu tiền

~28 phút đọc

Yêu cầu thanh toán VietQR, bill POS, việc cần xử lý của thu tiền và mẫu mã đơn riêng của công ty. Không giữ tiền: paid chỉ khi giao dịch đã xác thực.

MethodPathTóm tắtQuyềnNhóm tốc độTương tác
GET/v1/collect/billsDanh sách billpayment_request.readreadScalar
POST/v1/collect/billsTạo bill và QR động cho POScollect.bill.createcollectScalar
POST/v1/collect/bills/{bill_ref}:cancelHuỷ billcollect.bill.createwriteScalar
POST/v1/collect/bills/{bill_ref}:mark-cashBill đã trả tiền mặtcollect.bill.createwriteScalar
GET/v1/payment-requestsDanh sách yêu cầu thanh toánpayment_request.readreadScalar
POST/v1/payment-requestsTạo yêu cầu thanh toánpayment_request.createcollectScalar
GET/v1/payment-requests/{id}Chi tiết yêu cầu thanh toánpayment_request.readreadScalar
PATCH/v1/payment-requests/{id}Sửa yêu cầu thanh toánpayment_request.updatewriteScalar
GET/v1/payment-requests/{id}/timelineNhật ký yêu cầu thanh toánpayment_request.readreadScalar
GET/v1/payment-requests/{id}/transactionsGiao dịch đã khớp với yêu cầupayment_request.readreadScalar
POST/v1/payment-requests/{id}:cancelHuỷ yêu cầu thanh toánpayment_request.cancelwriteScalar
POST/v1/payment-requests/{id}:receiptGửi biên nhậnpayment_request.remindwriteScalar
POST/v1/payment-requests/{id}:remindNhắc thanh toánpayment_request.remindwriteScalar
POST/v1/payment-requests/{id}:resend-remainderGửi phần còn lạipayment_request.updatewriteScalar
POST/v1/payment-requests/{id}:resolve-overpayĐánh dấu đã xử lý tiền thừapayment_request.resolve_overpaywriteScalar

Danh sách bill

Mới nhất trước; lọc theo quầy hoặc ca.

Quyền: payment_request.read Scope: collect:read
  • Nhóm tốc độ: read
  • Phản hồi thành công 200: Danh sách bill. — BillList, application/json
  • Mã lỗi riêng của endpoint: invalid_cursor
TênVị tríBắt buộcKiểuMô tả
limitqueryKhôngintegerSố phần tử mỗi trang (1–100, mặc định 20).
cursorqueryKhôngCursorCon trỏ phân trang mờ (cur_…) lấy từ next_cursor; không tự tạo hay sửa.
company_idqueryKhôngOrgIdMã công ty / tổ chức (org_…).
counterqueryKhôngCounterIdMã quầy thu ngân (ctr_…).
shiftqueryKhôngstring—
statequeryKhôngstring—
curl -sS -X GET "https://api.dongtien.pro/v1/collect/bills" \
-H "Authorization: Bearer $DT_API_KEY"

Mở trong tài liệu tương tác

Tạo bill và QR động cho POS

Tra cửa hàng/quầy theo slug; ca đang mở của quầy nhận bill. Gửi lại cùng bill_ref và cùng nội dung trả lại bill cũ (Idempotency-Replayed); cùng bill_ref khác nội dung trả 422. Cần Idempotency-Key (nên bằng bill_ref). Khi bill được trả đủ bằng tiền đã xác thực phát collect.bill.paid.

Quyền: collect.bill.create Scope: collect:write Idempotency-Key: bắt buộc
TênVị tríBắt buộcKiểuMô tả
idempotency-keyheaderKhôngstringKhoá chống gửi trùng (≤ 255 ký tự, nên là UUID). Giữ 24 giờ; gửi lại cùng khoá + cùng nội dung trả lại kết quả cũ. Bắt buộc ở máy chủ (thiếu → 400 idempotency_key_required); SDK tự sinh.
curl -sS -X POST "https://api.dongtien.pro/v1/collect/bills" \
-H "Authorization: Bearer $DT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"store": "q1-nguyen-hue",
"counter": "quay-1",
"bill_ref": "HD-000123",
"amount": 185000
}'

Mở trong tài liệu tương tác

Huỷ bill

Bill đang waiting chuyển cancelled và yêu cầu thanh toán của nó cũng bị huỷ. Bill đã paid/cash_paid trả 409 conflict. POS sửa số tiền: huỷ rồi tạo bill_ref mới.

Quyền: collect.bill.create Scope: collect:write Idempotency-Key: tuỳ chọn
TênVị tríBắt buộcKiểuMô tả
bill_refpathCóstring—
counterqueryCóstringQuầy của bill (bill_ref chỉ duy nhất trong một quầy).
idempotency-keyheaderKhôngstringKhoá chống gửi trùng (≤ 255 ký tự, nên là UUID). Giữ 24 giờ; gửi lại cùng khoá + cùng nội dung trả lại kết quả cũ.
curl -sS -X POST "https://api.dongtien.pro/v1/collect/bills/$BILL_REF:cancel?counter=ctr_0f5k2m9q4h7t3n8r6v1w0x5yz0" \
-H "Authorization: Bearer $DT_API_KEY"

Mở trong tài liệu tương tác

Bill đã trả tiền mặt

Bill waiting chuyển cash_paid; yêu cầu thanh toán bị huỷ với lý do cash. Tiền chuyển khoản đến sau đó vào việc cần xử lý.

Quyền: collect.bill.create Scope: collect:write Idempotency-Key: tuỳ chọn
TênVị tríBắt buộcKiểuMô tả
bill_refpathCóstring—
counterqueryCóstringQuầy của bill (bill_ref chỉ duy nhất trong một quầy).
idempotency-keyheaderKhôngstringKhoá chống gửi trùng (≤ 255 ký tự, nên là UUID). Giữ 24 giờ; gửi lại cùng khoá + cùng nội dung trả lại kết quả cũ.
curl -sS -X POST "https://api.dongtien.pro/v1/collect/bills/$BILL_REF:mark-cash?counter=ctr_0f5k2m9q4h7t3n8r6v1w0x5yz0" \
-H "Authorization: Bearer $DT_API_KEY"

Mở trong tài liệu tương tác

Danh sách yêu cầu thanh toán

Mới nhất trước. view=attention gồm yêu cầu provisional, short, over chưa xử lý và expired có tiền về muộn.

Quyền: payment_request.read Scope: collect:read
  • Nhóm tốc độ: read
  • Phản hồi thành công 200: Danh sách yêu cầu. — PaymentRequestList, application/json
  • Mã lỗi riêng của endpoint: invalid_cursor
TênVị tríBắt buộcKiểuMô tả
limitqueryKhôngintegerSố phần tử mỗi trang (1–100, mặc định 20).
cursorqueryKhôngCursorCon trỏ phân trang mờ (cur_…) lấy từ next_cursor; không tự tạo hay sửa.
company_idqueryKhôngOrgIdMã công ty / tổ chức (org_…).
statequeryKhôngstring—
viewqueryKhôngstring—
store_idqueryKhôngStoreIdMã cửa hàng (sto_…).
counter_idqueryKhôngCounterIdMã quầy thu ngân (ctr_…).
account_idqueryKhôngAccountIdMã tài khoản ngân hàng (acc_…).
qqueryKhôngstringTìm theo mã DTP…, ref hoặc tên khách.
fromqueryKhôngTimestamp | DateTạo từ thời điểm này (giờ Việt Nam nếu là ngày).
toqueryKhôngTimestamp | Date—
curl -sS -X GET "https://api.dongtien.pro/v1/payment-requests" \
-H "Authorization: Bearer $DT_API_KEY"

Mở trong tài liệu tương tác

Tạo yêu cầu thanh toán

Sinh mã DTP…, dựng VietQR (số tiền khoá khi có amount) và trang pay_url. Cần Idempotency-Key. Tài khoản chưa có kênh xác thực được trả warnings: ["ACCOUNT_PROVISIONAL_ONLY"]: tiền về sẽ ở trạng thái tạm tính và yêu cầu không tự chuyển paid (D36). Không giữ tiền.

Quyền: payment_request.create Scope: collect:write Idempotency-Key: bắt buộc
TênVị tríBắt buộcKiểuMô tả
idempotency-keyheaderKhôngstringKhoá chống gửi trùng (≤ 255 ký tự, nên là UUID). Giữ 24 giờ; gửi lại cùng khoá + cùng nội dung trả lại kết quả cũ. Bắt buộc ở máy chủ (thiếu → 400 idempotency_key_required); SDK tự sinh.
curl -sS -X POST "https://api.dongtien.pro/v1/payment-requests" \
-H "Authorization: Bearer $DT_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" \
-d '{
"account": "acb_4521",
"amount": 250000,
"ref": "DH-10492"
}'

Mở trong tài liệu tương tác

Chi tiết yêu cầu thanh toán

Tra theo pr_… hoặc mã nội dung DTP….

Quyền: payment_request.read Scope: collect:read
  • Nhóm tốc độ: read
  • Phản hồi thành công 200: Yêu cầu. — PaymentRequest, application/json
  • Mã lỗi riêng của endpoint: resource_not_found
TênVị tríBắt buộcKiểuMô tả
idpathCóPaymentRequestRefMã yêu cầu pr_… hoặc mã nội dung DTP….
curl -sS -X GET "https://api.dongtien.pro/v1/payment-requests/$ID" \
-H "Authorization: Bearer $DT_API_KEY"

Mở trong tài liệu tương tác

Sửa yêu cầu thanh toán

Chỉ khi yêu cầu còn waiting và chưa có giao dịch nào gắn; mã DTP… và tài khoản không bao giờ đổi. Đổi số tiền sinh lại QR. Trái điều kiện trả 409 conflict.

Quyền: payment_request.update Scope: collect:write Idempotency-Key: tuỳ chọn
TênVị tríBắt buộcKiểuMô tả
idpathCóPaymentRequestRefMã yêu cầu pr_… hoặc mã nội dung DTP….
idempotency-keyheaderKhôngstringKhoá chống gửi trùng (≤ 255 ký tự, nên là UUID). Giữ 24 giờ; gửi lại cùng khoá + cùng nội dung trả lại kết quả cũ.
curl -sS -X PATCH "https://api.dongtien.pro/v1/payment-requests/$ID" \
-H "Authorization: Bearer $DT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"amount": 300000,
"expires_in_minutes": 60
}'

Mở trong tài liệu tương tác

Nhật ký yêu cầu thanh toán

Chỉ thêm, theo thời gian tăng dần.

Quyền: payment_request.read Scope: collect:read
  • Nhóm tốc độ: read
  • Phản hồi thành công 200: Các dòng nhật ký. — PaymentRequestEventList, application/json
  • Mã lỗi riêng của endpoint: resource_not_found
TênVị tríBắt buộcKiểuMô tả
idpathCóPaymentRequestRefMã yêu cầu pr_… hoặc mã nội dung DTP….
curl -sS -X GET "https://api.dongtien.pro/v1/payment-requests/$ID/timeline" \
-H "Authorization: Bearer $DT_API_KEY"

Mở trong tài liệu tương tác

Giao dịch đã khớp với yêu cầu

Gồm cả giao dịch tạm tính (chưa tính vào received_verified).

Quyền: payment_request.read Scope: collect:read
  • Nhóm tốc độ: read
  • Phản hồi thành công 200: Giao dịch khớp. — PaymentRequestTransactionList, application/json
  • Mã lỗi riêng của endpoint: resource_not_found
TênVị tríBắt buộcKiểuMô tả
idpathCóPaymentRequestRefMã yêu cầu pr_… hoặc mã nội dung DTP….
curl -sS -X GET "https://api.dongtien.pro/v1/payment-requests/$ID/transactions" \
-H "Authorization: Bearer $DT_API_KEY"

Mở trong tài liệu tương tác

Huỷ yêu cầu thanh toán

Chỉ khi còn waiting. Tiền chuyển sau khi huỷ không gắn vào yêu cầu: vào việc cần xử lý (late_payment). Phát payment_request.cancelled.

Quyền: payment_request.cancel Scope: collect:write Idempotency-Key: tuỳ chọn
TênVị tríBắt buộcKiểuMô tả
idpathCóPaymentRequestRefMã yêu cầu pr_… hoặc mã nội dung DTP….
idempotency-keyheaderKhôngstringKhoá chống gửi trùng (≤ 255 ký tự, nên là UUID). Giữ 24 giờ; gửi lại cùng khoá + cùng nội dung trả lại kết quả cũ.
curl -sS -X POST "https://api.dongtien.pro/v1/payment-requests/$ID:cancel" \
-H "Authorization: Bearer $DT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"reason": "Khách đổi ý, không mua nữa"
}'

Mở trong tài liệu tương tác

Gửi biên nhận

Chỉ khi paid hoặc over. Ghi dòng receipt vào nhật ký và đưa biên nhận gửi tới recipient vào hàng đợi thông báo (gửi lại cùng người nhận không tạo thêm tin).

Quyền: payment_request.remind Scope: collect:write Idempotency-Key: tuỳ chọn
TênVị tríBắt buộcKiểuMô tả
idpathCóPaymentRequestRefMã yêu cầu pr_… hoặc mã nội dung DTP….
idempotency-keyheaderKhôngstringKhoá chống gửi trùng (≤ 255 ký tự, nên là UUID). Giữ 24 giờ; gửi lại cùng khoá + cùng nội dung trả lại kết quả cũ.
curl -sS -X POST "https://api.dongtien.pro/v1/payment-requests/$ID:receipt" \
-H "Authorization: Bearer $DT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipient": {
"channel": "email",
"address": "ketoan@cuahangminhanh.vn"
}
}'

Mở trong tài liệu tương tác

Nhắc thanh toán

Ghi dòng reminded vào nhật ký và đưa lời nhắc gửi tới recipient vào hàng đợi thông báo. Chỉ với yêu cầu waiting, provisional hoặc short.

Quyền: payment_request.remind Scope: collect:write Idempotency-Key: tuỳ chọn
TênVị tríBắt buộcKiểuMô tả
idpathCóPaymentRequestRefMã yêu cầu pr_… hoặc mã nội dung DTP….
idempotency-keyheaderKhôngstringKhoá chống gửi trùng (≤ 255 ký tự, nên là UUID). Giữ 24 giờ; gửi lại cùng khoá + cùng nội dung trả lại kết quả cũ.
curl -sS -X POST "https://api.dongtien.pro/v1/payment-requests/$ID:remind" \
-H "Authorization: Bearer $DT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"recipient": {
"channel": "email",
"address": "ketoan@cuahangminhanh.vn"
}
}'

Mở trong tài liệu tương tác

Gửi phần còn lại

Chỉ khi short. Giữ nguyên mã DTP…, đặt locked_amount = amount − đã nhận (xác thực) và sinh lại QR.

Quyền: payment_request.update Scope: collect:write Idempotency-Key: tuỳ chọn
TênVị tríBắt buộcKiểuMô tả
idpathCóPaymentRequestRefMã yêu cầu pr_… hoặc mã nội dung DTP….
idempotency-keyheaderKhôngstringKhoá chống gửi trùng (≤ 255 ký tự, nên là UUID). Giữ 24 giờ; gửi lại cùng khoá + cùng nội dung trả lại kết quả cũ.
curl -sS -X POST "https://api.dongtien.pro/v1/payment-requests/$ID:resend-remainder" \
-H "Authorization: Bearer $DT_API_KEY"

Mở trong tài liệu tương tác

Đánh dấu đã xử lý tiền thừa

Chỉ khi over. Chỉ đánh dấu overpay_resolved_at: hệ thống không hoàn tiền (D2).

Quyền: payment_request.resolve_overpay Scope: collect:write Idempotency-Key: tuỳ chọn
TênVị tríBắt buộcKiểuMô tả
idpathCóPaymentRequestRefMã yêu cầu pr_… hoặc mã nội dung DTP….
idempotency-keyheaderKhôngstringKhoá chống gửi trùng (≤ 255 ký tự, nên là UUID). Giữ 24 giờ; gửi lại cùng khoá + cùng nội dung trả lại kết quả cũ.
curl -sS -X POST "https://api.dongtien.pro/v1/payment-requests/$ID:resolve-overpay" \
-H "Authorization: Bearer $DT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"note": "Đã báo khách, đối trừ vào đơn hàng sau"
}'

Mở trong tài liệu tương tác

TrườngKiểuBắt buộcMô tả
dataBill[]Có—
data[].amountPositiveVndCó—
data[].bill_refstringCó—
data[].counterCounterRefCó—
data[].created_atTimestampCó—
data[].idBillIdCó—
data[].objectstringCóGiá trị: bill.
data[].paid_atTimestamp | nullCó—
data[].payment_methodstringCóGiá trị: transfer, cash.
data[].payment_requestobject | nullCóYêu cầu thanh toán của bill (QR). null với bill tiền mặt.
data[].shift_idShiftId | nullCó—
data[].sourcestringCóGiá trị: pos_api, manual.
data[].stateBillStateCóGiá trị: waiting, paid, expired, cash_paid, cancelled.
data[].storeStoreRefCó—
has_morebooleanCó—
next_cursorstring | nullCóCon trỏ trang kế; null khi hết dữ liệu.
objectstringCóGiá trị: list.
TrườngKiểuBắt buộcMô tả
accountstringKhôngBỏ trống: dùng tài khoản của quầy.
amountintegerCó—
bill_refstringCóMã bill của POS; duy nhất trong quầy. Dùng làm Idempotency-Key.
counterstringCóslug của quầy.
customer_namestringKhông—
expires_in_minutesintegerKhôngMặc định theo qr_ttl_min của quầy.
notestringKhông—
storestringCóslug của cửa hàng.
TrườngKiểuBắt buộcMô tả
amountPositiveVndCó—
bill_refstringCó—
counterCounterRefCó—
counter.idCounterIdCó—
counter.namestringCó—
counter.slugstringCó—
created_atTimestampCó—
idBillIdCó—
objectstringCóGiá trị: bill.
paid_atTimestamp | nullCó—
payment_methodstringCóGiá trị: transfer, cash.
payment_requestobject | nullCóYêu cầu thanh toán của bill (QR). null với bill tiền mặt.
payment_request.accountPaymentAccountRefCó—
payment_request.allow_partialbooleanCó—
payment_request.amountinteger | nullCónull: khách tự nhập số tiền.
payment_request.cancelled_reasonstring | nullCó—
payment_request.company_idOrgIdCó—
payment_request.counterCounterRef | nullCó—
payment_request.created_atTimestampCó—
payment_request.created_byUserId | nullCó—
payment_request.customer_namestring | nullCó—
payment_request.expires_atTimestampCó—
payment_request.idPaymentRequestIdCó—
payment_request.late_verifiedbooleanCótrue: được xác thực muộn sau khi hết hạn (A2) nhưng vẫn gắn vào yêu cầu.
payment_request.locked_amountinteger | nullCóSố tiền khoá trong QR hiện hành (khác amount sau :resend-remainder).
payment_request.memo_codestringCó—
payment_request.note_internalstring | nullCó—
payment_request.objectstringCóGiá trị: payment_request.
payment_request.opened_atstring | nullCóLần đầu khách mở trang thanh toán.
payment_request.over_byintegerCóThừa so với amount (chỉ khi over).
payment_request.overpay_resolved_atTimestamp | nullCó—
payment_request.paid_atTimestamp | nullCó—
payment_request.pay_urlstring (uri)CóTrang thanh toán công khai pay.dongtien.pro/r/{mã}.
payment_request.qrobjectCó—
payment_request.received_provisionalintegerCóTổng tiền tạm tính (chưa tính là đã nhận).
payment_request.received_verifiedintegerCóTổng tiền đã xác thực đã gắn vào yêu cầu.
payment_request.refstring | nullCó—
payment_request.short_byintegerCóCòn thiếu (chỉ khi short/provisional).
payment_request.sourcestringCó—
payment_request.statePaymentRequestStateCóGiá trị: waiting, provisional, short, paid, over, expired, cancelled.
payment_request.storeStoreRef | nullCó—
payment_request.versionintegerCóTăng mỗi lần đổi trạng thái; dùng để phát hiện cập nhật cũ.
payment_request.warningsstring[]CóGiá trị: ACCOUNT_PROVISIONAL_ONLY.
shift_idShiftId | nullCó—
sourcestringCóGiá trị: pos_api, manual.
stateBillStateCóGiá trị: waiting, paid, expired, cash_paid, cancelled.
storeStoreRefCó—
store.idStoreIdCó—
store.namestringCó—
store.slugstringCó—
TrườngKiểuBắt buộcMô tả
dataPaymentRequest[]Có—
data[].accountPaymentAccountRefCó—
data[].allow_partialbooleanCó—
data[].amountinteger | nullCónull: khách tự nhập số tiền.
data[].cancelled_reasonstring | nullCó—
data[].company_idOrgIdCó—
data[].counterCounterRef | nullCó—
data[].created_atTimestampCó—
data[].created_byUserId | nullCó—
data[].customer_namestring | nullCó—
data[].expires_atTimestampCó—
data[].idPaymentRequestIdCó—
data[].late_verifiedbooleanCótrue: được xác thực muộn sau khi hết hạn (A2) nhưng vẫn gắn vào yêu cầu.
data[].locked_amountinteger | nullCóSố tiền khoá trong QR hiện hành (khác amount sau :resend-remainder).
data[].memo_codestringCó—
data[].note_internalstring | nullCó—
data[].objectstringCóGiá trị: payment_request.
data[].opened_atstring | nullCóLần đầu khách mở trang thanh toán.
data[].over_byintegerCóThừa so với amount (chỉ khi over).
data[].overpay_resolved_atTimestamp | nullCó—
data[].paid_atTimestamp | nullCó—
data[].pay_urlstring (uri)CóTrang thanh toán công khai pay.dongtien.pro/r/{mã}.
data[].qrobjectCó—
data[].received_provisionalintegerCóTổng tiền tạm tính (chưa tính là đã nhận).
data[].received_verifiedintegerCóTổng tiền đã xác thực đã gắn vào yêu cầu.
data[].refstring | nullCó—
data[].short_byintegerCóCòn thiếu (chỉ khi short/provisional).
data[].sourcestringCó—
data[].statePaymentRequestStateCóGiá trị: waiting, provisional, short, paid, over, expired, cancelled.
data[].storeStoreRef | nullCó—
data[].versionintegerCóTăng mỗi lần đổi trạng thái; dùng để phát hiện cập nhật cũ.
data[].warningsstring[]CóGiá trị: ACCOUNT_PROVISIONAL_ONLY.
has_morebooleanCó—
next_cursorstring | nullCóCon trỏ trang kế; null khi hết dữ liệu.
objectstringCóGiá trị: list.
TrườngKiểuBắt buộcMô tả
accountstringCóTài khoản nhận: acc_… hoặc bí danh <ngân hàng>_<4 số cuối>. Bí danh trùng nhiều tài khoản trả 409 account_alias_ambiguous.
allow_partialbooleanKhông—
amountinteger | nullKhôngSố tiền; null/bỏ trống để khách tự nhập.
counter_idCounterIdKhông—
customer_namestringKhông—
expires_in_minutesintegerKhôngHạn thanh toán, mặc định 24 giờ, tối đa 30 ngày.
notestringKhôngGhi chú nội bộ, không hiện cho khách.
refstringKhôngMã tham chiếu của bạn (đơn hàng…).
TrườngKiểuBắt buộcMô tả
accountPaymentAccountRefCó—
account.bankstringCó—
account.idAccountIdCó—
account.labelstringCó—
account.last4stringCó—
account.truststringCóprovisional_only: tài khoản chưa có kênh xác thực được (Open API, sao kê, email có chữ ký, SMS có người gửi do hệ điều hành cấp) — tiền về sẽ ở trạng thái tạm tính (D36). Giá trị: verifiable, provisional_only.
allow_partialbooleanCó—
amountinteger | nullCónull: khách tự nhập số tiền.
cancelled_reasonstring | nullCó—
company_idOrgIdCó—
counterCounterRef | nullCó—
counter.idCounterIdCó—
counter.namestringCó—
counter.slugstringCó—
created_atTimestampCó—
created_byUserId | nullCó—
customer_namestring | nullCó—
expires_atTimestampCó—
idPaymentRequestIdCó—
late_verifiedbooleanCótrue: được xác thực muộn sau khi hết hạn (A2) nhưng vẫn gắn vào yêu cầu.
locked_amountinteger | nullCóSố tiền khoá trong QR hiện hành (khác amount sau :resend-remainder).
memo_codestringCó—
note_internalstring | nullCó—
objectstringCóGiá trị: payment_request.
opened_atstring | nullCóLần đầu khách mở trang thanh toán.
over_byintegerCóThừa so với amount (chỉ khi over).
overpay_resolved_atTimestamp | nullCó—
paid_atTimestamp | nullCó—
pay_urlstring (uri)CóTrang thanh toán công khai pay.dongtien.pro/r/{mã}.
qrobjectCó—
qr.emvstringCóChuỗi VietQR (EMVCo) để vẽ mã QR; số tiền khoá khi locked_amount có giá trị.
received_provisionalintegerCóTổng tiền tạm tính (chưa tính là đã nhận).
received_verifiedintegerCóTổng tiền đã xác thực đã gắn vào yêu cầu.
refstring | nullCó—
short_byintegerCóCòn thiếu (chỉ khi short/provisional).
sourcestringCó—
statePaymentRequestStateCóGiá trị: waiting, provisional, short, paid, over, expired, cancelled.
storeStoreRef | nullCó—
store.idStoreIdCó—
store.namestringCó—
store.slugstringCó—
versionintegerCóTăng mỗi lần đổi trạng thái; dùng để phát hiện cập nhật cũ.
warningsstring[]CóGiá trị: ACCOUNT_PROVISIONAL_ONLY.
TrườngKiểuBắt buộcMô tả
allow_partialbooleanKhông—
amountinteger | nullKhông—
customer_namestring | nullKhông—
expires_in_minutesintegerKhông—
notestring | nullKhông—
refstring | nullKhông—
TrườngKiểuBắt buộcMô tả
dataPaymentRequestEvent[]Có—
data[].actorstring | nullCóuser:usr_…, key:apk_… hoặc system:recon.
data[].atTimestampCó—
data[].detailmap<string, any>Có—
data[].from_statePaymentRequestState | nullCóGiá trị: waiting, provisional, short, paid, over, expired, cancelled.
data[].idstringCó—
data[].kindstringCóGiá trị: created, opened, provisional, verified, short, over, reminded, receipt, expired, cancelled, overpay_resolved, reconciled, remainder_sent, updated, tx_attached, tx_detached.
data[].to_statePaymentRequestState | nullCóGiá trị: waiting, provisional, short, paid, over, expired, cancelled.
objectstringCóGiá trị: list.
TrườngKiểuBắt buộcMô tả
dataPaymentRequestTransaction[]Có—
data[].amountPositiveVndCó—
data[].amount_appliedPositiveVndCó—
data[].channelstringCóGiá trị: android, ios, email, openapi, statement, import.
data[].last4stringCó4 số cuối tài khoản nhận.
data[].linked_atTimestampCó—
data[].occurred_atTimestampCó—
data[].payer_maskedstring | nullCóTên người chuyển đã rút gọn (NGUYEN T*** NHUNG).
data[].transaction_idTxIdCó—
data[].trust_basisstringCóGiá trị: trusted_sender, sender_verified_ios, email_dkim_direct, email_dkim_forwarded, none.
data[].verification_levelstringCóGiá trị: provisional, verified.
data[].verified_bystring | nullCóGiá trị: openapi, statement, trusted_sender, email_dkim, manual, import.
objectstringCóGiá trị: list.
TrườngKiểuBắt buộcMô tả
reasonstringKhông—
TrườngKiểuBắt buộcMô tả
recipientobject | objectCó—
TrườngKiểuBắt buộcMô tả
notestringKhông—

Lưu ý về từ "đã xác thực": đây là xác thực nguồn, không phải ngân hàng xác nhận quyết toán.