Update VCN
Process
MERCHANT calls this API to update a VCN.
API Information
URL: /b2b-iccp-service/api/ext/iccp/vcn-update/{vcnId}
Method: PUT
Request
Main Parameters Table
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | request_id | String(100) | ✅ | Unique ID for each Request from MERCHANT to Baokim. |
| 2 | request_time | String(20) | ✅ | Request sent time. Format: YYYY-MM-DD H:i:s |
| 3 | master_merchant_code | String(50) | ✅ | Unique identifier for MASTER MERCHANT |
| 4 | sub_merchant_code | String(50) | ✅ | Unique identifier for SUB MERCHANT |
| 5 | reference_id | String(50) | ✅ | Reference code |
| 6 | customer_name | String(255) | ✅ | Customer name |
| 7 | expiry | String(7) | ✅ | Expiry date on the VCN card, format MM/YYYY expiry must be at least 1 month later than the current time and at most 24 months from the current time |
| 8 | control_type | Number | ✅ | 1: accountControl 2: inControlRules |
| 9 | account_control | Object | ❌ | Required if control_type = 1 |
| 10 | in_control_rules | Object | ❌ | Required if control_type = 2 |
account_control Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | alias | String | ✅ | Unique memorable code for the Control |
| 2 | card_limit | Object | ❌ | Sets the overall limit for the card - throughout the card's lifecycle |
| 3 | monthly_limit | Object | ❌ | Sets the card's monthly limit |
| 4 | daily_limit | Object | ❌ | Sets the card's daily limit |
| 5 | weekly_limit | Object | ❌ | Sets the card's weekly limit |
| 6 | quarterly_limit | Object | ❌ | Sets the card's quarterly limit |
| 7 | yearly_limit | Object | ❌ | Sets the card's yearly limit |
| 8 | geographies | Object | ❌ | Sets card usage by geographic region |
| 9 | merchant_category_codes | Object | ❌ | Sets card usage by MCC |
| 10 | start_date | String | ❌ | Card usage period - Start |
| 11 | end_date | String | ❌ | Card usage period - End |
account_control.card_limit Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | card_amount | Number | ✅ | Transaction value |
| 2 | available_balance | Number | ❌ | Available balance readOnly -> Pass a value if available; MasterCard uses it only to collect information (if any), not to validate information |
| 3 | authorisation_count | Number | ✅ | Number of transactions |
account_control.monthly_limit Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | card_amount | Number | ✅ | Transaction value |
| 2 | available_balance | Number | ❌ | Available balance readOnly -> Pass a value if available; MasterCard uses it only to collect information (if any), not to validate information |
| 3 | authorisation_count | Number | ✅ | Number of transactions |
account_control.daily_limit Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | card_amount | Number | ✅ | Transaction value |
| 2 | available_balance | Number | ❌ | Available balance readOnly -> Pass a value if available; MasterCard uses it only to collect information (if any), not to validate information |
| 3 | authorisation_count | Number | ✅ | Number of transactions |
account_control.weekly_limit Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | card_amount | Number | ✅ | Transaction value |
| 2 | available_balance | Number | ❌ | Available balance readOnly -> Pass a value if available; MasterCard uses it only to collect information (if any), not to validate information |
| 3 | authorisation_count | Number | ✅ | Number of transactions |
account_control.quarterly_limit Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | card_amount | Number | ✅ | Transaction value |
| 2 | available_balance | Number | ❌ | Available balance readOnly -> Pass a value if available; MasterCard uses it only to collect information (if any), not to validate information |
| 3 | authorisation_count | Number | ✅ | Number of transactions |
account_control.yearly_limit Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | card_amount | Number | ✅ | Transaction value |
| 2 | available_balance | Number | ❌ | Available balance readOnly -> Pass a value if available; MasterCard uses it only to collect information (if any), not to validate information |
| 3 | authorisation_count | Number | ✅ | Number of transactions |
account_control.geographies Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | country_codes | Array | ✅ | List of country codes - 3-character format |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
account_control.merchant_category_codes Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | mccs | Array | ✅ | List of MCCs |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | alias | String | ✅ | Unique memorable code for the Control |
| 2 | transaction_limits | Object | ❌ | Sets the amount limit per card transaction |
| 3 | geographies | Object | ❌ | Sets card usage by geographic region |
| 4 | velocities | Object | ❌ | Sets the frequency limit and/or the total card transaction amount within a given period |
| 5 | validity_periods | Object | ❌ | Controls the effective period of the control |
| 6 | amount_ranges | Object | ❌ | Controls the transaction value within a min, max range |
| 7 | acceptor_ids | Object | ❌ | Sets control over which Merchants/Acquirers the card is allowed to transact with |
| 8 | ageing_velocities | Object | ❌ | Sets and controls the available credit limit on the card |
| 9 | curfews | Object | ❌ | Sets control over card transactions by time window on specific days, and can specify the applicable time zone |
| 10 | time_of_days | Object | ❌ | Sets control over card transactions within specific time windows of each day |
| 11 | merchant_category_codes | Object | ❌ | Sets control over card transactions by the merchant's MCC industry code |
| 12 | merchant_names | Object | ❌ | Sets control over card transactions by Merchant name (card acceptor) |
| 13 | merchant_amounts | Object | ❌ | Sets control over card transactions by amount per transaction for a specific currency |
| 14 | transaction_environments | Object | ❌ | Sets control over card transactions by transaction method |
| 15 | approve_control | Object | ❌ | Sets control over card transactions - all configured rules apply to approving/declining the transaction |
| 16 | entry_modes | Object | ❌ | Sets control over transactions by card entry type |
in_control_rules.transaction_limits Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | amount | Float | ✅ | Maximum transaction value per transaction This value is set according to the billing currency of the RCN registered with BPC min: 0 max: 99999999999999 |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.geographies Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | country_codes | Array | ✅ | List of country codes - 3-character format |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.velocities Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | max_trans | Number | ✅ | Maximum number of transactions allowed within a given period min: 1 max: 99999999 |
| 2 | cumulative_limit | Float | ❌ | Maximum cumulative transaction amount allowed within a given period If passed as = 0 - equivalent to unlimited (ignore this configured limit) min: 0 max: 99999999999999 |
| 3 | period | String | ✅ | Applicable period - DAILY -> Daily - WEEKLY -> Weekly - QUARTERLY -> Quarterly - CONTINUOUS -> From the time of setup, with no reset date for the count/cumulative total (reports whenever the threshold is reached) - MONTHLY -> Monthly - YEARLY -> Yearly |
| 4 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.validity_periods Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | from | String | ✅ | Start time of the control's effective period |
| 2 | to | String | ✅ | End time of the control's effective period |
| 3 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.amount_ranges Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | min_amount | Float | ✅ | Minimum transaction amount - min: 0 - max: 99999999999999 - min_amount < max_amount |
| 2 | max_amount | Float | ✅ | Maximum transaction amount - min: 0 - max: 99999999999999 - min_amount < max_amount |
| 3 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.acceptor_ids Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | acceptors | Object | ✅ | Can set merchant or acquirer |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.acceptor_ids.acceptors Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | acceptor_id | String | ✅ | Merchant ID – identifier of the card acceptor (merchant) where the transaction takes place. |
| 2 | acquirer_id | String | ✅ | Acquirer ID – identifier of the bank/payment processor (acquirer) that processes the transaction for the merchant. |
in_control_rules.ageing_velocities Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | authorization_hold_days | Number | ✅ | Number of days a transaction is held on the virtual card, used to determine when the configured credit limit resets min: 0 max: 9999 |
| 2 | cumulative_limit | Number | ✅ | Total limit If passed as = 0 - equivalent to unlimited (ignore this configured limit) min: 0 max: 99999999999999 |
| 3 | time_zone | String | ✅ | Time zone applied for calculating the date and time to unhold the transaction so it is removed from the available credit calculation |
| 4 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.curfews Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | from_time | String | ✅ | Start time allowed for transactions. |
| 2 | to_time | String | ✅ | End time allowed for transactions (after this time, the transaction is declined) |
| 3 | time_zone | String(3) | ❌ | Time zone applied to the above time window Example: UTC |
| 4 | days | Array | ✅ | List of days of the week the limit applies to: SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY. Can be passed as multiple values, separated by commas |
| 5 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.time_of_days Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | times | Array | ✅ | List of objects configuring the time allowed for transactions (after this time, the transaction is declined) Can be passed as an array of configs |
| 2 | time_zone | String | ✅ | Time zone applied to the above time window (fromTime-toTime) Note that the default applied is GMT (not the timezone registered for the RCN) Be sure to pass this in Example: UTC |
| 3 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
Description of the object inside in_control_rules.time_of_days.times(1)
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | from_time | String | ✅ | Start time allowed for transactions. |
| 2 | to_time | String | ✅ | End time allowed for transactions (after this time, the transaction is declined) |
| 3 | days | Array | ✅ | Days of the week the limit applies to: SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY. Can be passed as multiple values, separated by commas |
in_control_rules.merchant_category_codes Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | mccs | Array | ✅ | List of MCCs |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.merchant_names Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | merchant_names | Array | ✅ | List of merchant names (sent in the DE43 field of the authorization message) This name must match the name in the bank's payment data (DE43 field) |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
Description of the data inside in_control_rules.merchant_amounts(13)
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | value | Float | ✅ | Maximum amount/transaction according to the currency_code set below min: 0 max: 99999999999999 |
| 2 | currency_code | String | ✅ | Currency code according to the (ISO) 4217 standard Default: 704 |
| 3 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.transaction_environments Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | environment_codes | Array | ✅ | List of transaction methods - ATM – Transaction at an automated teller machine. - ECOM – E-commerce (online) transaction. - MOTO – Mail Order/Telephone Order (order placed by mail/phone, without the card or cardholder present). - PAYPASS – Contactless payment. - POS – In-person transaction at a store (swiped on a POS machine). - PWCB – Purchase with Cash Back. |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.approve_control Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.entry_modes Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | mode | String | ✅ | Card entry type accepted for payment Default: EMV |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
Request Example - control_type = 1 (AccountControl)
{
"request_id": "TT20260209163542",
"request_time": "2026-03-24 16:28:32",
"master_merchant_code": "MERCHANTCODE_MASTER",
"sub_merchant_code": "MERCHANTCODE_SUB",
"reference_id": "TT20260209163542",
"customer_name": "NGUYỄN VĂN A",
"expiry": "12/2026",
"control_type": 1,
"account_control": {
"alias": "TT20260209163542",
"card_limit": {
"card_amount": 10000000000,
"available_balance": 0,
"authorisation_count": 100
},
"daily_limit": {
"card_amount": 10000000000,
"available_balance": 10000000000,
"authorisation_count": 100
},
"weekly_limit": {
"card_amount": 10000000000,
"available_balance": 10000000000,
"authorisation_count": 100
},
"monthly_limit": {
"card_amount": 10000000000,
"available_balance": 10000000000,
"authorisation_count": 100
},
"quarterly_limit": {
"card_amount": 10000000000,
"available_balance": 10000000000,
"authorisation_count": 100
},
"yearly_limit": {
"card_amount": 10000000000,
"available_balance": 10000000000,
"authorisation_count": 100
},
"geographies": {
"country_codes": [
"704",
"840"
],
"negate": 0
},
"merchant_category_codes": {
"mccs": [
"3001",
"3005"
],
"negate": 0
},
"start_date": "2025-12-01",
"end_date": "2035-12-01"
}
}
Request Example - control_type = 2 (InControlRules)
{
"request_id": "1774414149152",
"request_time": "2026-03-25 11:49:09",
"master_merchant_code": "MASTERMERCHANTCODE",
"sub_merchant_code": "SUBMERCHANTCODE",
"reference_id": "1774414086020",
"customer_name": "NGUYỄN VĂN C",
"expiry": "12/2026",
"control_type": 2,
"in_control_rules": {
"alias": "1774414086020",
"transaction_limits": {
"amount": 10000000000,
"negate": 0
},
"geographies": {
"country_codes": [
"704",
"840"
],
"negate": 0
},
"velocities": {
"max_trans": 9999999,
"cumulative_limit": 1500,
"period": "DAILY",
"negate": 0
},
"validity_periods": {
"from": "2026-07-25 11:51:09",
"to": "2035-12-01 00:00:00",
"negate": 0
},
"amount_ranges": {
"min_amount": 0,
"max_amount": 100000000,
"negate": 0
},
"acceptor_ids": {
"acceptors": {
"acceptor_id": "126548888899997",
"acquirer_id": "1232135435"
},
"negate": 0
},
"ageing_velocities": {
"authorization_hold_days": 30,
"cumulative_limit": 0,
"time_zone": "UTC",
"negate": 0
},
"curfews": {
"from_time": "00:00",
"to_time": "23:59",
"time_zone": "UTC",
"days": [
"MONDAY",
"TUESDAY",
"WEDNESDAY"
],
"negate": 0
},
"time_of_days": {
"times": [
{
"from_time": "00:00",
"to_time": "23:59",
"days": [
"MONDAY",
"TUESDAY",
"WEDNESDAY"
]
}
],
"time_zone": "UTC",
"negate": 0
},
"merchant_category_codes": {
"mccs": [
"3001",
"3005"
],
"negate": 0
},
"merchant_names": {
"merchant_names": [
"Amazon"
],
"negate": 0
},
"merchant_amounts": {
"value": 10000000,
"currency_code": "704",
"negate": 0
},
"transaction_environments": {
"environment_codes": [
"ECOM",
"POS"
],
"negate": 0
},
"approve_control": {
"negate": 0
},
"entry_modes": {
"mode": "EMV",
"negate": 0
}
}
}
Response
Main Parameters Table
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | code | Number(3) | ✅ | Baokim error code |
| 2 | message | String(200) | ✅ | Baokim error code message |
| 3 | data | Object | ✅ | Data returned by Baokim |
data Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | reference_id | String | ✅ | Reference code for the VCN creation request |
| 2 | vcn_id | Number | ✅ | VCN ID |
| 3 | customer_name | String | ✅ | Customer name |
| 4 | expiry | String(7) | ✅ | Expiry date on the VCN card, format MM/YYYY |
| 5 | control_type | Number | ✅ | 1: accountControl 2: inControlRules |
| 6 | account_control | Object | ❌ | Required if control_type = 1 |
| 7 | in_control_rules | Object | ❌ | Required if control_type = 2 |
data.account_control Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | alias | String | ✅ | Unique memorable code for the Control |
| 2 | card_limit | Object | ❌ | Sets the overall limit for the card - throughout the card's lifecycle |
| 3 | monthly_limit | Object | ❌ | Sets the card's monthly limit |
| 4 | daily_limit | Object | ❌ | Sets the card's daily limit |
| 5 | weekly_limit | Object | ❌ | Sets the card's weekly limit |
| 6 | quarterly_limit | Object | ❌ | Sets the card's quarterly limit |
| 7 | yearly_limit | Object | ❌ | Sets the card's yearly limit |
| 8 | geographies | Object | ❌ | Sets card usage by geographic region |
| 9 | merchant_category_codes | Object | ❌ | Sets card usage by MCC |
| 10 | start_date | String | ❌ | Card usage period - Start |
| 11 | end_date | String | ❌ | Card usage period - End |
account_control.card_limit Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | card_amount | Number | ✅ | Transaction value |
| 2 | available_balance | Number | ❌ | Available balance readOnly -> Pass a value if available; MasterCard uses it only to collect information (if any), not to validate information |
| 3 | authorisation_count | Number | ✅ | Number of transactions |
account_control.monthly_limit Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | card_amount | Number | ✅ | Transaction value |
| 2 | available_balance | Number | ❌ | Available balance readOnly -> Pass a value if available; MasterCard uses it only to collect information (if any), not to validate information |
| 3 | authorisation_count | Number | ✅ | Number of transactions |
account_control.daily_limit Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | card_amount | Number | ✅ | Transaction value |
| 2 | available_balance | Number | ❌ | Available balance readOnly -> Pass a value if available; MasterCard uses it only to collect information (if any), not to validate information |
| 3 | authorisation_count | Number | ✅ | Number of transactions |
account_control.weekly_limit Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | card_amount | Number | ✅ | Transaction value |
| 2 | available_balance | Number | ❌ | Available balance readOnly -> Pass a value if available; MasterCard uses it only to collect information (if any), not to validate information |
| 3 | authorisation_count | Number | ✅ | Number of transactions |
account_control.quarterly_limit Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | card_amount | Number | ✅ | Transaction value |
| 2 | available_balance | Number | ❌ | Available balance readOnly -> Pass a value if available; MasterCard uses it only to collect information (if any), not to validate information |
| 3 | authorisation_count | Number | ✅ | Number of transactions |
account_control.yearly_limit Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | card_amount | Number | ✅ | Transaction value |
| 2 | available_balance | Number | ❌ | Available balance readOnly -> Pass a value if available; MasterCard uses it only to collect information (if any), not to validate information |
| 3 | authorisation_count | Number | ✅ | Number of transactions |
account_control.geographies Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | country_codes | Array | ✅ | List of country codes - 3-character format |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
account_control.merchant_category_codes Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | mccs | Array | ✅ | List of MCCs |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
data.in_control_rules Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | alias | String | ✅ | Unique memorable code for the Control |
| 2 | transaction_limits | Object | ❌ | Sets the amount limit per card transaction |
| 3 | geographies | Object | ❌ | Sets card usage by geographic region |
| 4 | velocities | Object | ❌ | Sets the frequency limit and/or the total card transaction amount within a given period |
| 5 | validity_periods | Object | ❌ | Controls the effective period of the control |
| 6 | amount_ranges | Object | ❌ | Controls the transaction value within a min, max range |
| 7 | acceptor_ids | Object | ❌ | Sets control over which Merchants/Acquirers the card is allowed to transact with |
| 8 | ageing_velocities | Object | ❌ | Sets and controls the available credit limit on the card |
| 9 | curfews | Object | ❌ | Sets control over card transactions by time window on specific days, and can specify the applicable time zone |
| 10 | time_of_days | Object | ❌ | Sets control over card transactions within specific time windows of each day |
| 11 | merchant_category_codes | Object | ❌ | Sets control over card transactions by the merchant's MCC industry code |
| 12 | merchant_names | Object | ❌ | Sets control over card transactions by Merchant name (card acceptor) |
| 13 | merchant_amounts | Object | ❌ | Sets control over card transactions by amount per transaction for a specific currency |
| 14 | transaction_environments | Object | ❌ | Sets control over card transactions by transaction method |
| 15 | approve_control | Object | ❌ | Sets control over card transactions - all configured rules apply to approving/declining the transaction |
| 16 | entry_modes | Object | ❌ | Sets control over transactions by card entry type |
in_control_rules.transaction_limits Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | amount | Float | ✅ | Maximum transaction value per transaction This value is set according to the billing currency of the RCN registered with BPC min: 0 max: 99999999999999 |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.geographies Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | country_codes | Array | ✅ | List of country codes - 3-character format |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.velocities Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | max_trans | Number | ✅ | Maximum number of transactions allowed within a given period min: 1 max: 99999999 |
| 2 | cumulative_limit | Number | ❌ | Maximum cumulative transaction amount allowed within a given period If passed as = 0 - equivalent to unlimited (ignore this configured limit) min: 0 max: 99999999999999 |
| 3 | period | String | ✅ | Applicable period - DAILY -> Daily - WEEKLY -> Weekly - QUARTERLY -> Quarterly - CONTINUOUS -> From the time of setup, with no reset date for the count/cumulative total (reports whenever the threshold is reached) - MONTHLY -> Monthly - YEARLY -> Yearly |
| 4 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.validity_periods Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | from | String | ✅ | Start time of the control's effective period |
| 2 | to | String | ✅ | End time of the control's effective period |
| 3 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.amount_ranges Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | min_amount | Float | ✅ | Minimum transaction amount min: 0 max: 99999999999999 min_amount < max_amount |
| 2 | max_amount | Float | ✅ | Maximum transaction amount min: 0 max: 99999999999999 min_amount < max_amount |
| 3 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.acceptor_ids Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | acceptors | Object | ✅ | Can set merchant or acquirer |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.acceptor_ids.acceptors Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | acceptor_id | String | ✅ | Merchant ID – identifier of the card acceptor (merchant) where the transaction takes place. |
| 2 | acquirer_id | String | ✅ | Acquirer ID – identifier of the bank/payment processor (acquirer) that processes the transaction for the merchant. |
in_control_rules.ageing_velocities Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | authorization_hold_days | Number | ✅ | Number of days a transaction is held on the virtual card, used to determine when the configured credit limit resets min: 0 max: 9999 |
| 2 | cumulative_limit | Number | ✅ | Total limit If passed as = 0 - equivalent to unlimited (ignore this configured limit) min: 0 max: 99999999999999 |
| 3 | time_zone | String | ✅ | Time zone applied for calculating the date and time to unhold the transaction so it is removed from the available credit calculation |
| 4 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.curfews Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | from_time | String | ✅ | Start time allowed for transactions. |
| 2 | to_time | String | ✅ | End time allowed for transactions (after this time, the transaction is declined) |
| 3 | time_zone | String(3) | ❌ | Time zone applied to the above time window Example: UTC |
| 4 | days | Array | ✅ | List of days of the week the limit applies to: SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY. Can be passed as multiple values, separated by commas |
| 5 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.time_of_days Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | times | Array | ✅ | List of objects configuring the time allowed for transactions (after this time, the transaction is declined) Can be passed as an array of configs |
| 2 | time_zone | String | ✅ | Time zone applied to the above time window (fromTime-toTime) Note that the default applied is GMT (not the timezone registered for the RCN) Be sure to pass this in Example: UTC |
| 3 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
Description of the object inside in_control_rules.time_of_days.times(1)
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | from_time | String | ✅ | Start time allowed for transactions. |
| 2 | to_time | String | ✅ | End time allowed for transactions (after this time, the transaction is declined) |
| 3 | days | Array | ✅ | Days of the week the limit applies to: SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY. Can be passed as multiple values, separated by commas |
in_control_rules.merchant_category_codes Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | mccs | Array | ✅ | List of MCCs |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.merchant_names Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | merchant_names | Array | ✅ | List of merchant names (sent in the DE43 field of the authorization message) This name must match the name in the bank's payment data (DE43 field) |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.merchant_amounts Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | value | Float | ✅ | Maximum amount/transaction according to the currency_code set below min: 0 max: 99999999999999 |
| 2 | currency_code | String | ✅ | Currency code according to the (ISO) 4217 standard |
| 3 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.transaction_environments Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | environment_codes | Array | ✅ | List of transaction methods - ATM – Transaction at an automated teller machine. - ECOM – E-commerce (online) transaction. - MOTO – Mail Order/Telephone Order (order placed by mail/phone, without the card or cardholder present). - PAYPASS – Contactless payment. - POS – In-person transaction at a store (swiped on a POS machine). - PWCB – Purchase with Cash Back. |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.approve_control Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
in_control_rules.entry_modes Information
| No. | Field Name | Data Type | Required | Description |
|---|---|---|---|---|
| 1 | mode | String | ✅ | Card entry type accepted for payment Default: EMV |
| 2 | negate | Number | ✅ | Determines whether the rule is applied in reverse? 1. true 0. false => Default |
Response Example
{
"code": 100,
"message": "Success",
"data": {
"reference_id": "1774513778373",
"vcn_id": 2355,
"customer_name": "NGUYỄN VĂN C",
"expiry": "12/2026",
"control_type": 2,
"account_control": null,
"in_control_rules": {
"alias": "1774513778373",
"transaction_limits": {
"amount": 20000000000,
"negate": 1
},
"geographies": {
"country_codes": [
"704",
"840"
],
"negate": 1
},
"velocities": {
"max_trans": 9999999,
"cumulative_limit": 1500,
"period": "DAILY",
"negate": 1
},
"validity_periods": {
"from": "2026-03-26 15:56:00",
"to": "2035-12-01 00:00:00",
"negate": 0
},
"amount_ranges": {
"min_amount": 0,
"max_amount": 100000000,
"negate": 0
},
"acceptor_ids": {
"acceptors": {
"acceptor_id": "126548888899997",
"acquirer_id": "1232135435"
},
"negate": 0
},
"ageing_velocities": {
"authorization_hold_days": 30,
"cumulative_limit": 0,
"time_zone": "UTC",
"negate": 0
},
"curfews": {
"from_time": "00:00",
"to_time": "23:59",
"time_zone": "UTC",
"days": [
"MONDAY",
"TUESDAY",
"WEDNESDAY"
],
"negate": 0
},
"time_of_days": {
"times": [
{
"from_time": "00:00",
"to_time": "23:59",
"days": [
"MONDAY",
"TUESDAY",
"WEDNESDAY"
]
}
],
"time_zone": "UTC",
"negate": 0
},
"merchant_category_codes": {
"mccs": [
"3001",
"3005"
],
"negate": 0
},
"merchant_names": {
"merchant_names": [
"Amazon"
],
"negate": 0
},
"merchant_amounts": {
"value": 10000000,
"currency_code": "704",
"negate": 0
},
"transaction_environments": {
"environment_codes": [
"ECOM",
"POS"
],
"negate": 0
},
"approve_control": {
"negate": 0
},
"entry_modes": {
"mode": "EMV",
"negate": 0
}
}
}
}
Error Codes
| Error Code | Description |
|---|---|
| 100 | Success |
| 11 | Failed |
| 104 | Unauthorized |
| 401 | Merchant verify failed |
| 422 | Validation error |
| 1201 | vcn_id does not exist |
| 1203 | Failed to update the VCN card |
| 1500 | Request {request_id} already exists |