Skip to main content

Direct Debit

Manage automatic debit (Direct Debit) links: register, pay, cancel the link, and refund.


Register a link​

API: POST /v1/direct-debit/register

const result = await client.directDebit.register({
requestId: 'REQ_001',
phone: '0935926988',
returnUrl: 'https://example.com/callback',
bankBin: '970418',
accountName: 'NGUYEN VAN A',
});

Parameters​

FieldTypeRequiredDescription
requestIdstring✓Unique request ID
phonestring✓Phone number
returnUrlstring✓Callback URL after registration
bankBinstring✕Bank BIN. Use BankBinEnum
accountNamestring✕Account holder name

Response​

Returns the registration URL in data (string).


Pay a bill​

API: POST /v1/direct-debit/payment-bill

const result = await client.directDebit.paymentBill({
requestId: 'REQ_002',
subscriptionId: 'SUB_001',
amount: '500000',
description: 'Thanh toán đơn hàng',
partnerCode: 'one-pay',
serviceProviderName: 'TINGEE',
});

Parameters​

FieldTypeRequiredDescription
requestIdstring✓Unique request ID
subscriptionIdstring✓Direct Debit link ID
amountstring✓Amount (as a string)
descriptionstring✓Payment description
partnerCodestring✓Partner code (one-pay)
serviceProviderNamestring✓Service provider name
clientIdstring✕Client ID
expirationTimestring✕Expiration time
tokenRefstring✕Reference token
accountNumberstring✕Account number
returnUrlstring✕Callback URL
additionalDataobject✕Additional data

Response​

{
"code": "00",
"message": "Success",
"data": {
"code": "00",
"status": "success",
"transactionCode": "TXN_001"
}
}
FieldTypeDescription
data.codestringResult code
data.statusstringStatus: success, failure, pending, pending-confirm, ...
data.transactionCodestringTransaction code
data.isSentConfirmEmailbooleanWhether a confirmation email was sent
data.isSentConfirmZalobooleanWhether a Zalo confirmation was sent
data.returnUrlstringRedirect URL

Cancel a link​

API: DELETE /v1/direct-debit/delete-subscription

const result = await client.directDebit.deleteSubscription({
requestId: 'REQ_003',
subscriptionId: 'SUB_001',
tokenRef: 'TOKEN_REF',
returnUrl: 'https://example.com/callback',
});

Parameters​

FieldTypeRequiredDescription
requestIdstring✓Unique request ID
subscriptionIdstring✓Direct Debit link ID
tokenRefstring✓Reference token
returnUrlstring✓Callback URL

Response​

{
"code": "00",
"message": "Success",
"data": {
"code": "00",
"confirmUrl": "https://..."
}
}
FieldTypeDescription
data.codestringResult code
data.confirmUrlstringURL to confirm the link cancellation

Refund​

API: POST /v1/direct-debit/refund

const result = await client.directDebit.refund({
subscriptionId: 'SUB_001',
tokenRef: 'TOKEN_REF',
transactionId: 'TXN_001',
amount: 100000,
});

Parameters​

FieldTypeRequiredDescription
subscriptionIdstring✓Direct Debit link ID
tokenRefstring✓Reference token
transactionIdstring✓ID of the transaction to refund
amountnumber✓Refund amount

Response​

{
"code": "00",
"message": "Success",
"data": {
"refundAmount": 100000,
"transactionId": "TXN_REFUND_001",
"status": "success"
}
}
FieldTypeDescription
data.refundAmountnumberRefunded amount
data.transactionIdstringRefund transaction ID
data.statusstringStatus: success, failure, Pending

Edit payment method​

API: PUT /v1/direct-debit/edit-confirm-payment-method

const result = await client.directDebit.editConfirmPaymentMethod({
requestId: 'REQ_004',
returnUrl: 'https://example.com/callback',
subscriptionId: 'SUB_001',
});

Parameters​

FieldTypeRequiredDescription
requestIdstring✓Unique request ID
returnUrlstring✓Callback URL
subscriptionIdstring✓Direct Debit link ID

Response​

Returns the confirmation URL in data (string).


Link status​

API: GET /v1/direct-debit/get-subscription-status

const result = await client.directDebit.getSubscriptionStatus({
subscriptionId: 'SUB_001',
tokenRef: 'TOKEN_REF',
});

Parameters (query)​

FieldTypeRequiredDescription
subscriptionIdstring✓Direct Debit link ID
tokenRefstring✓Reference token
requestIdstring✕Request ID

Response​

{
"code": "00",
"message": "Success",
"data": {
"subscriptionId": "SUB_001",
"tokenRef": "TOKEN_REF",
"bankBin": "970418",
"bankName": "BIDV",
"accountNumber": "0935926988",
"accountName": "NGUYEN VAN A",
"phone": "0935926988",
"status": "active",
"confirmPaymentByEmail": false,
"confirmPaymentByZalo": true,
"confirmPhoneNumber": "0935926988"
}
}
FieldTypeDescription
data.subscriptionIdstringLink ID
data.tokenRefstringReference token
data.bankBinstringBank BIN. Use BankBinEnum
data.bankNamestringBank name. Use BankNameEnum
data.accountNumberstringAccount number
data.phonestringPhone number
data.statusstringactive or inactive
data.confirmPaymentByEmailbooleanConfirm via email
data.confirmPaymentByZalobooleanConfirm via Zalo

Transaction status​

API: GET /v1/direct-debit/get-transaction-status

const result = await client.directDebit.getTransactionStatus({
transactionId: 'TXN_001',
tokenRef: 'TOKEN_REF',
subscriptionId: 'SUB_001',
});

Parameters (query)​

FieldTypeRequiredDescription
transactionIdstring✓Transaction ID
tokenRefstring✓Reference token
subscriptionIdstring✓Direct Debit link ID

Response​

{
"code": "00",
"message": "Success",
"data": {
"transactionId": "TXN_001",
"subscriptionId": "SUB_001",
"tokenRef": "TOKEN_REF",
"bankBin": "970418",
"accountNumber": "0935926988",
"amount": 500000,
"status": "success",
"transactionDate": "2025-01-15T10:30:00Z"
}
}
FieldTypeDescription
data.transactionIdstringTransaction ID
data.subscriptionIdstringLink ID
data.bankBinstringBank BIN. Use BankBinEnum
data.amountnumberAmount
data.statusstringsuccess, failed, pending, insufficient-balance, ...
data.transactionDatestringTransaction time
data.customerobjectCustomer information (onepayAccountId, name, phone, email)

Transaction history​

API: GET /v1/direct-debit/get-paging-transactions

const result = await client.directDebit.getPagingTransactions({
subscriptionId: 'SUB_001',
tokenRef: 'TOKEN_REF',
skipCount: 0,
maxResultCount: 10,
});

Parameters (query)​

FieldTypeRequiredDescription
subscriptionIdstring✓Direct Debit link ID
tokenRefstring✓Reference token
startTimestring✕Filter start time
endTimestring✕Filter end time
skipCountnumber✕Number of records to skip
maxResultCountnumber✕Maximum number of records

Response​

Returns PagedResultDto with totalCount and an items array:

FieldTypeDescription
items[].transactionIdstringTransaction ID
items[].codestringResult code
items[].bankNamestringBank name. Use BankNameEnum
items[].amountstringAmount
items[].contentstringTransaction description
items[].accountNumberstringAccount number
items[].transactionDatestringTransaction time
items[].statusstringsuccess, failure, pending, refunded, ...