> This page is for Enterprise.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://citi-demo.ferndocs.com/enterprise/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://citi-demo.ferndocs.com/enterprise/_mcp/server.

# Create Virtual Card Accounts

POST https://tts.apib2b.citi.com/tts/cards/vca/v2/create
Content-Type: application/json

Create a virtual card and set its associated spending controls, custom reference data and payment beneficiaries. It allows you to place a a virtual card account creation request for secure purchasing, with increased transaction-Level controls, limit card number use by MCC, amounts, dates and even specific suppliers.Note: In a Create VCA Request call for a Mastercard program, you must specify at least one instance of whichever velocity control the purchase template that is setup in the VCA application contains. Other controls are optional in the API request to Citi, even if they are included in the purchase template that is setup in the VCA application. If you indicate that you would like to use an optional control by sending the enable flag as TRUE, you have to specify all parameters listed in the control section unless otherwise specified, else, the API request will be rejected.

Reference: https://citi-demo.ferndocs.com/enterprise/enterprises/api-reference/commercial-cards/virtual-cards-life-cycle-management/virtual-card-management/create

## Authentication

- `Authorization` header (bearer token, required) — Bearer authentication of the form `Bearer <token>`, where token is your auth token.

## Servers

- `https://tts.apib2b.citi.com/tts/cards/vca/v2` (production gateway URL, default)
- `https://tts.sandbox.apib2b.citi.com/tts/cards/vca/v2` (sandbox URL)

## Request

### Headers

- `Authorization` (string, required) — Oauth token
- `country` (string, required) — country of the Client
- `region` (string, required) — region of the client(Apac/EMEA/NAM)
- `req-sys-id` (string, required) — Client Unique id to identify the particular request. `Format`: UUID `Example`: 123d837e-958a-4e9f-bc97-4843ec948123

### Body (application/json)

This endpoint expects a Vca-Create-Request.

- `fundingSourceId` (string, required) — Unique identifier of the funding source to which the virtual card rolls up
- `programId` (string, required) — Unique ID of the company record defined in the virtual cards system
- `messageId` (string, required) — Unique ID of the API message sent. The messageId will be provided back in the corresponding response. The ID can be used for investigation and troubleshooting. The ID must be unique per integration
- `timeZone` (string, required) — Defines the time zone applicable for any date or time parameters within controls set for a VCA.If any of the following controls are used, timeZone is required:Validity Period Control,Aging Velocity Control (Mastercard only), Curfew Control and Time of Day Control.It sets the specific timeframe when the account and its controls will become active.
- `customReference` (list of Custom-Reference, required)
- `fundingSourceName` (string, optional) — Descriptive name of the real card to which the virtual card rolls up
- `mccGrouping` (list of string, optional) — Limits authorizations to defined Merchant Category Codes.
- `mccRange` (list of string, optional) — Limits authorizations to a defined range of Merchant Category Codes.(eg: [0000-9999, 2000-2999])
- `mccgAllowed` (boolean, optional) — Required if the mccGrouping field is populated with either a range of MCCs, or a MCCG (ex: AUTO, AIR).Specify whether the mccGrouping are allowed or disallowed.If true is passed, the mccGrouping are allowed.If false is passed, then the mccGrouping field are disallowed
- `getCardImage` (boolean, optional) — * Specifies whether cardImage field needs to be included in the response or not. * True = cardImage field will be sent in the response * False = cardImage field will not be sent in the response. * `Optional field` if not included, cardImage will be sent in the response.
- `currencyCode` (string, optional) — Currency Code in which VCA amounts are expressed. Mastercard currencyCode is not required if currencyType = B" Visa Specifies whether Merchant transactions are limited to the VCA currency provided in the currencyCode field. The only possibe value is "M". Value "M" stands for Merchant Currency which indicates that merchant transactions are limited to the VCA currency specified in the currencyCpde field. If a currencyType is not provided, then the VCA can be used for any merchant transaction currency.
- `currencyType` (string, optional) — Mastercard Defines the type of the VCA currency. - Value "B" stands for Billing Currency which indicates that the VCA currency is equal to the billing currency of the underlying funding source. - Value "M" stands for Merchant Currency which indicates that Merchant transactions are limited to the VCA currency provided in the currencyCode field. Visa Specifies whether Merchant transactions are limited to the VCA currency provided in the currencyCode field. The only possibe value is "M". - Value "M" stands for Merchant Currency which indicates that merchant transactions are limited to the VCA currency specified in the currencyCpde field. If a currencyType is not provided, then the VCA can be used for any merchant transaction currency.
- `paymentBeneficiaryId` (double, optional) — Uniquely identifies the payment beneficiary for which the virtual card is created
- `paymentBeneficiaryEmails` (list of string, optional) — Lists the email addresses to which the virtual card details should be sent to.In order for emails to get delivered, the following two settings must be enabled in the VCA system:1. Allow VCN details to be emailed to this supplier2. Allow VCN requestor to manually enter a new email address when requesting a VCN
- `templateId` (double, optional) — Identifies the template that was setup in the VCA system and that should be used for this virtual card.The template setup in the VCA system defines which controls, custom data fields and MCC groupings can be used.
- `expiryDate` (string, optional) — Expiry Date of the virtual card account.
- `cumulativeSpendLimit` (double, optional) — Limits the overall amount spend on the virtual card account.
- `enableSpendVelocityControl` (boolean, optional) — Limits the frequency and total cumulative amount of authorizations performed on the VCA within a specified period. Mastercard: The control is mandatory unless Aging Velcotiy Control is used. This control cannot be used in combination with the Aging Velocity Control.Visa: Spend Velocity Control is mandatory.
- `spendVelocity` (list of Spend-Velocity-Request, optional)
- `enableValidityPeriodControl` (boolean, optional) — Limits authorization activity to a specific time period.
- `validityStartDate` (string, optional) — Identifies the date from which the virtual card account can be used for transactions.
- `validityEndDate` (string, optional) — Identifies the date until which the virtual card account can be used for transactions.
- `enableAmountRangeControl` (boolean, optional) — Approves a transaction only if the requested amount for authorization is equal to or greater than the Minimum Amount and less than or equal to the Maximum Amount.
- `maxAmount` (double, optional) — Identifies the maximum allowed transaction amount.
- `minAmount` (double, optional) — Identifies the minimum allowed transaction amount.
- `enableTransactionLimitControl` (boolean, optional) — Limits individual transactions to a maximum amount.
- `amountLimit` (double, optional) — Identifies the maximum allowed transaction amount.
- `enableCurfewControl` (boolean, optional) — Limits authorization activity to a single time period for each day selected.
- `curfewTime` (Curfew-Time, optional)
- `enableTimeOfDayControl` (boolean, optional) — Limits authorization request to defined time periods each day
- `timeOfDay` (list of Time-Of-Day, optional)
- `enableAgingVelocityControl` (boolean, optional) — Sets a cumulative amount and keeps track of the current remaining balance. Allows the requester to 'age off' approved authorization requests that have not been cleared by the merchant after a defined number of days.
- `authorizationHoldDays` (double, optional) — Identifies the number of days after which an authorization gets aged off if no matching clearing record was received.
- `enableGeographyControl` (boolean, optional) — Limits authorization requests to a defined geographic location. This is an optional control. If this control is not used, pass False or leave this section out from the request. If value passed is True, all fields in this section are required.
- `countryCodes` (list of string, optional) — Defines the merchant country in which the VCA can or cannot be used.
- `allowed` (boolean, optional) — Indicate whether the values in countryCode are allowed or disallowed. True = values provided in countryCode are allowed False = values provided in countryCode are not allowed
- `enableMerchantIdControl` (boolean, optional) — Limits authorizations to a particular merchant using the Merchant ID and Acquirer ID (Mastercard) or Card Acceptor ID (Visa).
- `merchantId` (Merchant-Id-Request, optional)

## Response

### 200

Create Virtual Card response

- `vcaId` (string, optional) — A reference number that uniquely identifies the virtual card account.
- `cardImage` (string, optional) — A visual representation of the virtual card account front and back.
- `currencyCode` (string, optional) — Currency Code in which VCA amounts are expressed. Mastercard currencyCode is not required if currencyType = B" Visa Specifies whether Merchant transactions are limited to the VCA currency provided in the currencyCode field. The only possibe value is "M". Value "M" stands for Merchant Currency which indicates that merchant transactions are limited to the VCA currency specified in the currencyCpde field. If a currencyType is not provided, then the VCA can be used for any merchant transaction currency.
- `timeZone` (string, optional) — Defines the time zone applicable for any date or time parameters within controls set for a VCA.
- `virtualCardAccountNumber` (string, optional) — The virtual card account number to use for transactions.
- `expiryDate` (string, optional) — Expiry Date of the virtual card account.
- `securityCode` (string, optional) — The security code (i.e. cvv) corresponding to the virtual card accunt.
- `programId` (string, optional) — Unique ID of the company record defined in the virtual cards system.
- `messageId` (string, optional) — Unique ID of the API message sent. The messageId will be provided back in the corresponding response. The ID can be used for investigation and troubleshooting. The ID must be unique per integration.
- `mccGrouping` (list of string, optional) — Limits authorizations to defined Merchant Category Codes.
- `mccRange` (list of string, optional) — Limits authorizations to a defined range of Merchant Category Codes.(eg: [0000-9999, 2000-2999])
- `mccgAllowed` (boolean, optional) — Required if the mccGrouping field is populated with either a range of MCCs, or a MCCG (ex: AUTO, AIR).Specify whether the mccGrouping are allowed or disallowed.If true is passed, the mccGrouping are allowed.If false is passed, then the mccGrouping field are disallowed
- `currencyType` (string, optional) — Mastercard Defines the type of the VCA currency. - Value "B" stands for Billing Currency which indicates that the VCA currency is equal to the billing currency of the underlying funding source. - Value "M" stands for Merchant Currency which indicates that Merchant transactions are limited to the VCA currency provided in the currencyCode field. Visa Specifies whether Merchant transactions are limited to the VCA currency provided in the currencyCode field. The only possibe value is "M". - Value "M" stands for Merchant Currency which indicates that merchant transactions are limited to the VCA currency specified in the currencyCpde field. If a currencyType is not provided, then the VCA can be used for any merchant transaction currency.
- `paymentBeneficiaryId` (double, optional) — Uniquely identifies the payment beneficiary for which the virtual card is created.
- `paymentBeneficiaryEmails` (list of string, optional) — Specifies up to five email addresses to which the virtual card account details should be delivered. Email addresses specified in the request will not override any default email addresses specified in the virtual card application.
- `customReference` (list of Custom-Reference, optional)
- `templateId` (double, optional) — Identifies the template that was setup in the VCA system and that should be used for this virtual card.The template setup in the VCA system defines which controls, custom data fields and MCC groupings can be used.
- `cumulativeSpendLimit` (double, optional) — Limits the overall amount spend on the virtual card account.
- `standInVca` (boolean, optional) — Indicates whether the VCA details returned are generated from the VCA platform, or a pre-generated VCA from Citi. If “true” is returned then the VCA returned is a pre-generated VCA from Citi. If the “false” is returned or if the field is not returned then the VCA returned is from the backend VCA platform.
- `warning` (list of string, optional) — Warning information regarding a non-fatal response condition that may be taken into account, but can be ignored
- `enableSpendVelocityControl` (boolean, optional) — Limits the frequency and total cumulative amount of authorizations performed on the VCA within a specified period.
- `spendVelocity` (list of Spend-Velocity-Response, optional)
- `enableValidityPeriodControl` (boolean, optional) — Limits authorization activity to a specific time period.
- `validityStartDate` (string, optional) — Identifies the date from which the virtual card account can be used for transactions.
- `validityEndDate` (string, optional) — Identifies the date until which the virtual card account can be used for transactions.
- `enableAmountRangeControl` (boolean, optional) — Approves a transaction only if the requested amount for authorization is equal to or greater than the Minimum Amount and less than or equal to the Maximum Amount.
- `maxAmount` (double, optional) — Identifies the maximum allowed transaction amount.
- `minAmount` (double, optional) — Identifies the minimum allowed transaction amount.
- `enableTransactionLimitControl` (boolean, optional) — Limits individual transactions to a maximum amount.
- `amountLimit` (double, optional) — Identifies the maximum allowed transaction amount.
- `enableCurfewControl` (boolean, optional) — Limits authorization activity to a single time period for each day selected.
- `curfewTime` (Curfew-Time, optional)
- `enableTimeOfDayControl` (boolean, optional) — Limits authorization request to defined time periods each day.
- `timeOfDay` (list of Time-Of-Day, optional)
- `enableAgingVelocityControl` (boolean, optional) — Sets a cumulative amount and keeps track of the current remaining balance. Allows the requester to age off approved authorization requests that have not been cleared by the merchant after a defined number of days.
- `authorizationHoldDays` (double, optional) — Identifies the number of days after which an authorization gets aged off if no matching clearing record was received.
- `enableGeographyControl` (boolean, optional) — Limits authorization requests to a defined geographic location. This is an optional control. If this control is not used, pass False or leave this section out from the request. If value passed is True, all fields in this section are required.
- `countryCodes` (list of string, optional) — Defines the merchant country in which the VCA can or cannot be used.
- `allowed` (boolean, optional) — Indicate whether the values in countryCode are allowed or disallowed. True = values provided in countryCode are allowed False = values provided in countryCode are not allowed
- `enableMerchantIdControl` (boolean, optional) — Limits authorizations to a particular merchant using the Merchant ID and Acquirer ID (Mastercard) or Card Acceptor ID (Visa).
- `merchantInfo` (list of Merchant-Id-Response, optional)

## Errors

### 400 Bad Request Error

Invalid Create Virtual Card request

- `vcaId` (string, optional) — A reference number that uniquely identifies the virtual card account.
- `cardImage` (string, optional) — A visual representation of the virtual card account front and back.
- `currencyCode` (string, optional) — Currency Code in which VCA amounts are expressed. Mastercard currencyCode is not required if currencyType = B" Visa Specifies whether Merchant transactions are limited to the VCA currency provided in the currencyCode field. The only possibe value is "M". Value "M" stands for Merchant Currency which indicates that merchant transactions are limited to the VCA currency specified in the currencyCpde field. If a currencyType is not provided, then the VCA can be used for any merchant transaction currency.
- `timeZone` (string, optional) — Defines the time zone applicable for any date or time parameters within controls set for a VCA.
- `virtualCardAccountNumber` (string, optional) — The virtual card account number to use for transactions.
- `expiryDate` (string, optional) — Expiry Date of the virtual card account.
- `securityCode` (string, optional) — The security code (i.e. cvv) corresponding to the virtual card accunt.
- `errors` (list of Error-Message, optional)
- `programId` (string, optional) — Unique ID of the company record defined in the virtual cards system.
- `messageId` (string, optional) — Unique ID of the API message sent. The messageId will be provided back in the corresponding response. The ID can be used for investigation and troubleshooting. The ID must be unique per integration.
- `mccGrouping` (list of string, optional) — Limits authorizations to defined Merchant Category Codes.
- `mccRange` (list of string, optional) — Limits authorizations to a defined range of Merchant Category Codes.(eg: [0000-9999, 2000-2999])
- `mccgAllowed` (boolean, optional) — Required if the mccGrouping field is populated with either a range of MCCs, or a MCCG (ex: AUTO, AIR).Specify whether the mccGrouping are allowed or disallowed.If true is passed, the mccGrouping are allowed.If false is passed, then the mccGrouping field are disallowed
- `currencyType` (string, optional) — Mastercard Defines the type of the VCA currency. - Value "B" stands for Billing Currency which indicates that the VCA currency is equal to the billing currency of the underlying funding source. - Value "M" stands for Merchant Currency which indicates that Merchant transactions are limited to the VCA currency provided in the currencyCode field. Visa Specifies whether Merchant transactions are limited to the VCA currency provided in the currencyCode field. The only possibe value is "M". - Value "M" stands for Merchant Currency which indicates that merchant transactions are limited to the VCA currency specified in the currencyCpde field. If a currencyType is not provided, then the VCA can be used for any merchant transaction currency.
- `paymentBeneficiaryId` (double, optional) — Uniquely identifies the payment beneficiary for which the virtual card is created.
- `paymentBeneficiaryEmails` (list of string, optional) — Specifies up to five email addresses to which the virtual card account details should be delivered. Email addresses specified in the request will not override any default email addresses specified in the virtual card application.
- `customReference` (list of Custom-Reference, optional)
- `templateId` (double, optional) — Identifies the template that was setup in the VCA system and that should be used for this virtual card.The template setup in the VCA system defines which controls, custom data fields and MCC groupings can be used.
- `cumulativeSpendLimit` (double, optional) — Limits the overall amount spend on the virtual card account.
- `enableSpendVelocityControl` (boolean, optional) — Limits the frequency and total cumulative amount of authorizations performed on the VCA within a specified period.
- `spendVelocity` (list of Spend-Velocity-Response, optional)
- `enableValidityPeriodControl` (boolean, optional) — Limits authorization activity to a specific time period.
- `validityStartDate` (string, optional) — Identifies the date from which the virtual card account can be used for transactions.
- `validityEndDate` (string, optional) — Identifies the date until which the virtual card account can be used for transactions.
- `enableAmountRangeControl` (boolean, optional) — Approves a transaction only if the requested amount for authorization is equal to or greater than the Minimum Amount and less than or equal to the Maximum Amount.
- `maxAmount` (double, optional) — Identifies the maximum allowed transaction amount.
- `minAmount` (double, optional) — Identifies the minimum allowed transaction amount.
- `enableTransactionLimitControl` (boolean, optional) — Limits individual transactions to a maximum amount.
- `amountLimit` (double, optional) — Identifies the maximum allowed transaction amount.
- `enableCurfewControl` (boolean, optional) — Limits authorization activity to a single time period for each day selected.
- `curfewTime` (Curfew-Time, optional)
- `enableTimeOfDayControl` (boolean, optional) — Limits authorization request to defined time periods each day.
- `timeOfDay` (list of Time-Of-Day, optional)
- `enableAgingVelocityControl` (boolean, optional) — Sets a cumulative amount and keeps track of the current remaining balance. Allows the requester to age off approved authorization requests that have not been cleared by the merchant after a defined number of days.
- `authorizationHoldDays` (double, optional) — Identifies the number of days after which an authorization gets aged off if no matching clearing record was received.
- `enableGeographyControl` (boolean, optional) — Limits authorization requests to a defined geographic location. This is an optional control. If this control is not used, pass False or leave this section out from the request. If value passed is True, all fields in this section are required.
- `countryCodes` (list of string, optional) — Defines the merchant country in which the VCA can or cannot be used.
- `allowed` (boolean, optional) — Indicate whether the values in countryCode are allowed or disallowed. True= values provided in countryCode are allowed False = values provided in countryCode are not allowed
- `enableMerchantIdControl` (boolean, optional) — Limits authorizations to a particular merchant using the Merchant ID and Acquirer ID (Mastercard) or Card Acceptor ID (Visa).
- `merchantInfo` (list of Merchant-Id-Response, optional)

### 401 Unauthorized Error

Unauthorized Create Virtual Card request

- `vcaId` (string, optional) — A reference number that uniquely identifies the virtual card account.
- `cardImage` (string, optional) — A visual representation of the virtual card account front and back.
- `currencyCode` (string, optional) — Currency Code in which VCA amounts are expressed. Mastercard currencyCode is not required if currencyType = B" Visa Specifies whether Merchant transactions are limited to the VCA currency provided in the currencyCode field. The only possibe value is "M". Value "M" stands for Merchant Currency which indicates that merchant transactions are limited to the VCA currency specified in the currencyCpde field. If a currencyType is not provided, then the VCA can be used for any merchant transaction currency.
- `timeZone` (string, optional) — Defines the time zone applicable for any date or time parameters within controls set for a VCA.
- `virtualCardAccountNumber` (string, optional) — The virtual card account number to use for transactions.
- `expiryDate` (string, optional) — Expiry Date of the virtual card account.
- `securityCode` (string, optional) — The security code (i.e. cvv) corresponding to the virtual card accunt.
- `errors` (list of Error-Message, optional)
- `programId` (string, optional) — Unique ID of the company record defined in the virtual cards system.
- `messageId` (string, optional) — Unique ID of the API message sent. The messageId will be provided back in the corresponding response. The ID can be used for investigation and troubleshooting. The ID must be unique per integration.
- `mccGrouping` (list of string, optional) — Limits authorizations to defined Merchant Category Codes.
- `mccRange` (list of string, optional) — Limits authorizations to a defined range of Merchant Category Codes.(eg: [0000-9999, 2000-2999])
- `mccgAllowed` (boolean, optional) — Required if the mccGrouping field is populated with either a range of MCCs, or a MCCG (ex: AUTO, AIR).Specify whether the mccGrouping are allowed or disallowed.If true is passed, the mccGrouping are allowed.If false is passed, then the mccGrouping field are disallowed
- `currencyType` (string, optional) — Mastercard Defines the type of the VCA currency. - Value "B" stands for Billing Currency which indicates that the VCA currency is equal to the billing currency of the underlying funding source. - Value "M" stands for Merchant Currency which indicates that Merchant transactions are limited to the VCA currency provided in the currencyCode field. Visa Specifies whether Merchant transactions are limited to the VCA currency provided in the currencyCode field. The only possibe value is "M". - Value "M" stands for Merchant Currency which indicates that merchant transactions are limited to the VCA currency specified in the currencyCpde field. If a currencyType is not provided, then the VCA can be used for any merchant transaction currency.
- `paymentBeneficiaryId` (double, optional) — Uniquely identifies the payment beneficiary for which the virtual card is created.
- `paymentBeneficiaryEmails` (list of string, optional) — Specifies up to five email addresses to which the virtual card account details should be delivered. Email addresses specified in the request will not override any default email addresses specified in the virtual card application.
- `customReference` (list of Custom-Reference, optional)
- `templateId` (double, optional) — Identifies the template that was setup in the VCA system and that should be used for this virtual card.The template setup in the VCA system defines which controls, custom data fields and MCC groupings can be used.
- `cumulativeSpendLimit` (double, optional) — Limits the overall amount spend on the virtual card account.
- `enableSpendVelocityControl` (boolean, optional) — Limits the frequency and total cumulative amount of authorizations performed on the VCA within a specified period.
- `spendVelocity` (list of Spend-Velocity-Response, optional)
- `enableValidityPeriodControl` (boolean, optional) — Limits authorization activity to a specific time period.
- `validityStartDate` (string, optional) — Identifies the date from which the virtual card account can be used for transactions.
- `validityEndDate` (string, optional) — Identifies the date until which the virtual card account can be used for transactions.
- `enableAmountRangeControl` (boolean, optional) — Approves a transaction only if the requested amount for authorization is equal to or greater than the Minimum Amount and less than or equal to the Maximum Amount.
- `maxAmount` (double, optional) — Identifies the maximum allowed transaction amount.
- `minAmount` (double, optional) — Identifies the minimum allowed transaction amount.
- `enableTransactionLimitControl` (boolean, optional) — Limits individual transactions to a maximum amount.
- `amountLimit` (double, optional) — Identifies the maximum allowed transaction amount.
- `enableCurfewControl` (boolean, optional) — Limits authorization activity to a single time period for each day selected.
- `curfewTime` (Curfew-Time, optional)
- `enableTimeOfDayControl` (boolean, optional) — Limits authorization request to defined time periods each day.
- `timeOfDay` (list of Time-Of-Day, optional)
- `enableAgingVelocityControl` (boolean, optional) — Sets a cumulative amount and keeps track of the current remaining balance. Allows the requester to age off approved authorization requests that have not been cleared by the merchant after a defined number of days.
- `authorizationHoldDays` (double, optional) — Identifies the number of days after which an authorization gets aged off if no matching clearing record was received.
- `enableGeographyControl` (boolean, optional) — Limits authorization requests to a defined geographic location. This is an optional control. If this control is not used, pass False or leave this section out from the request. If value passed is True, all fields in this section are required.
- `countryCodes` (list of string, optional) — Defines the merchant country in which the VCA can or cannot be used.
- `allowed` (boolean, optional) — Indicate whether the values in countryCode are allowed or disallowed. True= values provided in countryCode are allowed False = values provided in countryCode are not allowed
- `enableMerchantIdControl` (boolean, optional) — Limits authorizations to a particular merchant using the Merchant ID and Acquirer ID (Mastercard) or Card Acceptor ID (Visa).
- `merchantInfo` (list of Merchant-Id-Response, optional)

### 405 Method Not Allowed Error

Method Not Allowed

- `vcaId` (string, optional) — A reference number that uniquely identifies the virtual card account.
- `cardImage` (string, optional) — A visual representation of the virtual card account front and back.
- `currencyCode` (string, optional) — Currency Code in which VCA amounts are expressed. Mastercard currencyCode is not required if currencyType = B" Visa Specifies whether Merchant transactions are limited to the VCA currency provided in the currencyCode field. The only possibe value is "M". Value "M" stands for Merchant Currency which indicates that merchant transactions are limited to the VCA currency specified in the currencyCpde field. If a currencyType is not provided, then the VCA can be used for any merchant transaction currency.
- `timeZone` (string, optional) — Defines the time zone applicable for any date or time parameters within controls set for a VCA.
- `virtualCardAccountNumber` (string, optional) — The virtual card account number to use for transactions.
- `expiryDate` (string, optional) — Expiry Date of the virtual card account.
- `securityCode` (string, optional) — The security code (i.e. cvv) corresponding to the virtual card accunt.
- `errors` (list of Error-Message, optional)
- `programId` (string, optional) — Unique ID of the company record defined in the virtual cards system.
- `messageId` (string, optional) — Unique ID of the API message sent. The messageId will be provided back in the corresponding response. The ID can be used for investigation and troubleshooting. The ID must be unique per integration.
- `mccGrouping` (list of string, optional) — Limits authorizations to defined Merchant Category Codes.
- `mccRange` (list of string, optional) — Limits authorizations to a defined range of Merchant Category Codes.(eg: [0000-9999, 2000-2999])
- `mccgAllowed` (boolean, optional) — Required if the mccGrouping field is populated with either a range of MCCs, or a MCCG (ex: AUTO, AIR).Specify whether the mccGrouping are allowed or disallowed.If true is passed, the mccGrouping are allowed.If false is passed, then the mccGrouping field are disallowed
- `currencyType` (string, optional) — Mastercard Defines the type of the VCA currency. - Value "B" stands for Billing Currency which indicates that the VCA currency is equal to the billing currency of the underlying funding source. - Value "M" stands for Merchant Currency which indicates that Merchant transactions are limited to the VCA currency provided in the currencyCode field. Visa Specifies whether Merchant transactions are limited to the VCA currency provided in the currencyCode field. The only possibe value is "M". - Value "M" stands for Merchant Currency which indicates that merchant transactions are limited to the VCA currency specified in the currencyCpde field. If a currencyType is not provided, then the VCA can be used for any merchant transaction currency.
- `paymentBeneficiaryId` (double, optional) — Uniquely identifies the payment beneficiary for which the virtual card is created.
- `paymentBeneficiaryEmails` (list of string, optional) — Specifies up to five email addresses to which the virtual card account details should be delivered. Email addresses specified in the request will not override any default email addresses specified in the virtual card application.
- `customReference` (list of Custom-Reference, optional)
- `templateId` (double, optional) — Identifies the template that was setup in the VCA system and that should be used for this virtual card.The template setup in the VCA system defines which controls, custom data fields and MCC groupings can be used.
- `cumulativeSpendLimit` (double, optional) — Limits the overall amount spend on the virtual card account.
- `enableSpendVelocityControl` (boolean, optional) — Limits the frequency and total cumulative amount of authorizations performed on the VCA within a specified period.
- `spendVelocity` (list of Spend-Velocity-Response, optional)
- `enableValidityPeriodControl` (boolean, optional) — Limits authorization activity to a specific time period.
- `validityStartDate` (string, optional) — Identifies the date from which the virtual card account can be used for transactions.
- `validityEndDate` (string, optional) — Identifies the date until which the virtual card account can be used for transactions.
- `enableAmountRangeControl` (boolean, optional) — Approves a transaction only if the requested amount for authorization is equal to or greater than the Minimum Amount and less than or equal to the Maximum Amount.
- `maxAmount` (double, optional) — Identifies the maximum allowed transaction amount.
- `minAmount` (double, optional) — Identifies the minimum allowed transaction amount.
- `enableTransactionLimitControl` (boolean, optional) — Limits individual transactions to a maximum amount.
- `amountLimit` (double, optional) — Identifies the maximum allowed transaction amount.
- `enableCurfewControl` (boolean, optional) — Limits authorization activity to a single time period for each day selected.
- `curfewTime` (Curfew-Time, optional)
- `enableTimeOfDayControl` (boolean, optional) — Limits authorization request to defined time periods each day.
- `timeOfDay` (list of Time-Of-Day, optional)
- `enableAgingVelocityControl` (boolean, optional) — Sets a cumulative amount and keeps track of the current remaining balance. Allows the requester to age off approved authorization requests that have not been cleared by the merchant after a defined number of days.
- `authorizationHoldDays` (double, optional) — Identifies the number of days after which an authorization gets aged off if no matching clearing record was received.
- `enableGeographyControl` (boolean, optional) — Limits authorization requests to a defined geographic location. This is an optional control. If this control is not used, pass False or leave this section out from the request. If value passed is True, all fields in this section are required.
- `countryCodes` (list of string, optional) — Defines the merchant country in which the VCA can or cannot be used.
- `allowed` (boolean, optional) — Indicate whether the values in countryCode are allowed or disallowed. True= values provided in countryCode are allowed False = values provided in countryCode are not allowed
- `enableMerchantIdControl` (boolean, optional) — Limits authorizations to a particular merchant using the Merchant ID and Acquirer ID (Mastercard) or Card Acceptor ID (Visa).
- `merchantInfo` (list of Merchant-Id-Response, optional)

### 500 Internal Server Error

Internal Server Error

- `vcaId` (string, optional) — A reference number that uniquely identifies the virtual card account.
- `cardImage` (string, optional) — A visual representation of the virtual card account front and back.
- `currencyCode` (string, optional) — Currency Code in which VCA amounts are expressed. Mastercard currencyCode is not required if currencyType = B" Visa Specifies whether Merchant transactions are limited to the VCA currency provided in the currencyCode field. The only possibe value is "M". Value "M" stands for Merchant Currency which indicates that merchant transactions are limited to the VCA currency specified in the currencyCpde field. If a currencyType is not provided, then the VCA can be used for any merchant transaction currency.
- `timeZone` (string, optional) — Defines the time zone applicable for any date or time parameters within controls set for a VCA.
- `virtualCardAccountNumber` (string, optional) — The virtual card account number to use for transactions.
- `expiryDate` (string, optional) — Expiry Date of the virtual card account.
- `securityCode` (string, optional) — The security code (i.e. cvv) corresponding to the virtual card accunt.
- `errors` (list of Error-Message, optional)
- `programId` (string, optional) — Unique ID of the company record defined in the virtual cards system.
- `messageId` (string, optional) — Unique ID of the API message sent. The messageId will be provided back in the corresponding response. The ID can be used for investigation and troubleshooting. The ID must be unique per integration.
- `mccGrouping` (list of string, optional) — Limits authorizations to defined Merchant Category Codes.
- `mccRange` (list of string, optional) — Limits authorizations to a defined range of Merchant Category Codes.(eg: [0000-9999, 2000-2999])
- `mccgAllowed` (boolean, optional) — Required if the mccGrouping field is populated with either a range of MCCs, or a MCCG (ex: AUTO, AIR).Specify whether the mccGrouping are allowed or disallowed.If true is passed, the mccGrouping are allowed.If false is passed, then the mccGrouping field are disallowed
- `currencyType` (string, optional) — Mastercard Defines the type of the VCA currency. - Value "B" stands for Billing Currency which indicates that the VCA currency is equal to the billing currency of the underlying funding source. - Value "M" stands for Merchant Currency which indicates that Merchant transactions are limited to the VCA currency provided in the currencyCode field. Visa Specifies whether Merchant transactions are limited to the VCA currency provided in the currencyCode field. The only possibe value is "M". - Value "M" stands for Merchant Currency which indicates that merchant transactions are limited to the VCA currency specified in the currencyCpde field. If a currencyType is not provided, then the VCA can be used for any merchant transaction currency.
- `paymentBeneficiaryId` (double, optional) — Uniquely identifies the payment beneficiary for which the virtual card is created.
- `paymentBeneficiaryEmails` (list of string, optional) — Specifies up to five email addresses to which the virtual card account details should be delivered. Email addresses specified in the request will not override any default email addresses specified in the virtual card application.
- `customReference` (list of Custom-Reference, optional)
- `templateId` (double, optional) — Identifies the template that was setup in the VCA system and that should be used for this virtual card.The template setup in the VCA system defines which controls, custom data fields and MCC groupings can be used.
- `cumulativeSpendLimit` (double, optional) — Limits the overall amount spend on the virtual card account.
- `enableSpendVelocityControl` (boolean, optional) — Limits the frequency and total cumulative amount of authorizations performed on the VCA within a specified period.
- `spendVelocity` (list of Spend-Velocity-Response, optional)
- `enableValidityPeriodControl` (boolean, optional) — Limits authorization activity to a specific time period.
- `validityStartDate` (string, optional) — Identifies the date from which the virtual card account can be used for transactions.
- `validityEndDate` (string, optional) — Identifies the date until which the virtual card account can be used for transactions.
- `enableAmountRangeControl` (boolean, optional) — Approves a transaction only if the requested amount for authorization is equal to or greater than the Minimum Amount and less than or equal to the Maximum Amount.
- `maxAmount` (double, optional) — Identifies the maximum allowed transaction amount.
- `minAmount` (double, optional) — Identifies the minimum allowed transaction amount.
- `enableTransactionLimitControl` (boolean, optional) — Limits individual transactions to a maximum amount.
- `amountLimit` (double, optional) — Identifies the maximum allowed transaction amount.
- `enableCurfewControl` (boolean, optional) — Limits authorization activity to a single time period for each day selected.
- `curfewTime` (Curfew-Time, optional)
- `enableTimeOfDayControl` (boolean, optional) — Limits authorization request to defined time periods each day.
- `timeOfDay` (list of Time-Of-Day, optional)
- `enableAgingVelocityControl` (boolean, optional) — Sets a cumulative amount and keeps track of the current remaining balance. Allows the requester to age off approved authorization requests that have not been cleared by the merchant after a defined number of days.
- `authorizationHoldDays` (double, optional) — Identifies the number of days after which an authorization gets aged off if no matching clearing record was received.
- `enableGeographyControl` (boolean, optional) — Limits authorization requests to a defined geographic location. This is an optional control. If this control is not used, pass False or leave this section out from the request. If value passed is True, all fields in this section are required.
- `countryCodes` (list of string, optional) — Defines the merchant country in which the VCA can or cannot be used.
- `allowed` (boolean, optional) — Indicate whether the values in countryCode are allowed or disallowed. True= values provided in countryCode are allowed False = values provided in countryCode are not allowed
- `enableMerchantIdControl` (boolean, optional) — Limits authorizations to a particular merchant using the Merchant ID and Acquirer ID (Mastercard) or Card Acceptor ID (Visa).
- `merchantInfo` (list of Merchant-Id-Response, optional)

## Types

### Custom-Reference

- `customReferenceValue` (string, optional) — Specifies the label of a custom reference field.Mastercard: All field labels included in the template used for this virtual card account request should be included.
- `customReferenceLabel` (string, optional) — Specifies the value of a custom reference field. Mastercard: If the template used for this VCA request identifies a given custom reference field as required, then the value provided in this field cannot be blank.

### Spend-Velocity-Request

- `maxAuth` (double, optional) — Limits the number of authorizations that can be made with a VCA. Should be set to 1, if a single-use VCA is created.Specify any value larger than one for a multi-use VCA. Mastercard: Set to 0, if unlimited authorizations should be allowed. (0 is not applicable for Visa)
- `cumulativeSpendLimit` (double, optional) — Limits the overall amount spend on the virtual card account.
- `periodType` (string, optional) — Period for which the control values are valid before they reset

### Curfew-Time

- `startTime` (string, optional) — Specifies the end time until which the virtual card account can be used on the particular day specified in weekDaysEffective.
- `endTime` (string, optional) — Specifies the end time until which the virtual card account can be used on the particular day specified in weekDaysEffective.
- `weekdaysEffective` (list of string, optional) — Specifies the day applicable to the start and end times defined.

### Time-Of-Day

- `startTime` (string, optional) — Specifies the start time from which the virtual card account can be used on the particular day specified in weekDaysEffective.
- `endTime` (string, optional) — Specifies the end time until which the virtual card account can be used on the particular day specified in weekDaysEffective.
- `weekdayEffective` (string, optional) — Specifies the day applicable to the start and end times defined.

### Merchant-Id-Request

- `allowed` (boolean, optional) — Indicate whether the values in merchantId and acquirerId are allowed or disallowed. True = values provided in merchantId and acquirerId are allowed, False = values provided in merchantId and acquirerId are not allowed.
- `merchantIds` (list of Merchant-Id, optional) — Specifies the Merchant ID that should be allowed / disallowed when transacting with the virtual card.

### Spend-Velocity-Response

- `maxAuth` (double, optional) — Limits the number of authorizations that can be made with a VCA. Should be set to 1, if a single-use VCA is created.Specify any value larger than one for a multi-use VCA. Mastercard: Set to 0, if unlimited authorizations should be allowed. (0 is not applicable for Visa)
- `cumulativeSpendLimit` (double, optional) — Limits the overall amount spend on the virtual card account.
- `periodType` (string, optional) — Period for which the control values are valid before they reset
- `availableBalance` (double, optional) — The remaining balance available to spend on the virtual card.
- `periodEndDate` (string, optional) — End date of the current period based on the periodType selected.

### Merchant-Id-Response

- `allowed` (boolean, optional) — Indicate whether the values in merchantId and acquirerId are allowed or disallowed. True = values provided in merchantId and acquirerId are allowed, False = values provided in merchantId and acquirerId are not allowed
- `merchantIds` (list of Merchant-Id, optional)

### Error-Message

- `errorCode` (enum, optional)
  - Allowed values: `EVB0014`, `EVB0010`, `EVB0017`, `EVB0018`, `EVB0020`, `EVB0030`, `EVB0033`, `EVB0042`, `EVB0044`, `EVB0037`, `EVB0032`, `EVB0040`, `EVB0045`, `EVB0046`, `EVB0050`, `EVB0053`, `EVB0060`, `EVB0061`, `EVB0062`, `EVB0063`, `EVB0065`, `EVB0066`, `EVB0070`, `EVB0071`, `EVB0099`, `EVB0104`, `EVB0106`, `EVB0107`, `EVB0110`, `EVB0113`, `EVB0114`, `EVB0112`, `EVB0120`, `EVB0121`, `EVB0124`, `EVB0125`, `EVB0126`, `EVB0133`, `EVB0136`, `EVB0137`, `EVB0138`, `EVB0140`, `EVB0141`, `EVB0143`, `EVB0151`, `EVB0163`, `EVB0170`, `EVB0201`, `EVB0202`, `EVB0213`, `EVB0214`, `EVB0215`, `EVB0216`, `EVB0222`, `EVB0224`, `EVB0241`, `EVB0243`, `EVB0245`, `EVB0251`, `EVB0252`, `EVB0244`, `EVB0246`, `EVB0247`, `EVB0248`, `EVB0250`, `EVB0253`, `EVB0254`, `EVB0255`, `EVB0256`, `EVB0257`, `EVB0258`, `EVB0025`, `EVB0261`, `EVB0262`, `EVB0264`, `EVB0265`, `EVB0267`, `EVB0270`, `EVB0271`, `EVB0272`, `EVB0273`, `EVB0290`, `EVB0350`, `EVB0351`, `EVB0352`, `EVB0353`, `EVB0354`, `EVB0355`, `EVB0356`, `EVB0357`, `EVB0358`, `EVB0359`, `EVB0360`, `EVB0361`, `EVB0362`, `EVB0363`, `EVB0364`, `EVB0365`, `EVB0366`, `EVB0367`, `EVB0368`, `EVB0369`, `EVB0370`, `EVB0371`, `EVB0372`, `EVB0373`, `EVB0374`, `EVB0375`, `EVB0378`, `EVB0381`, `EVB0401`, `EVB0404`, `EVB0430`, `EVB0431`, `EVB0432`, `EVB0435`, `EVB0436`, `EVB0437`, `EVB0438`, `EVB0406`, `EVB0440`, `EVB0441`, `EVB0530`, `EVB0607`, `EVB0211`, `EVB0212`, `EVB0219`, `EVB0230`, `EVB0231`, `EVB0281`, `EVB1185`, `EVB1300`, `EVB1301`, `EVB1302`, `EVB1303`, `EVB1304`, `EVB1305`, `EVB1306`, `EVB1307`, `EVB1308`, `EVB1309`, `EVB1310`, `EVB1311`, `EVB1312`, `EVB0260`, `EVB1314`, `EVB1315`, `EVB0162`, `EVB0236`, `EVB0903`, `EVB0902`, `EVB0611`, `EVB0612`, `EVB0618`, `EVB0619`, `EVB0616`, `EVB0237`, `EVB0217`, `EVB0238`, `EVB0218`, `EVB0600`, `EVB0232`, `EVB0235`, `EVB0233`, `EVB0011`, `ERS0087`, `GRC0001`, `GRC0002`, `GRC0003`, `GRC0004`, `GRC0005`, `GRC0006`, `GRC0007`, `GRC0009`, `GRC0011`, `GRC0012`, `GRC0014`
- `errorDescription` (string, optional) — The error description that corresponds to error code when there is any error occurred while retrieving the trsansaction. * `EVB0010` - vcaId size must be between 1 and 19 digits * `EVB0014` - vcaId value must be a numeric * `EVB0017` - vcaID is empty or null * `EVB0018` - No previously approved vcaID is present * `EVB0020` - vcaID and programId combination is not present * `EVB0030` - FundingSourceId cannot be modified * `EVB0033` - FundingSourceId cannot be null * `EVB0042` - FundingSourceName cannot be null * `EVB0044` - Funding source Id|Funding source Name|Template Id is not required for cancel request * `EVB0037` - fundingSourceId is mandatory * `EVB0032` - fundingSourceId value must be a numeric * `EVB0040` - fundingSourceName is mandatory * `EVB0045` - Funding source Id|Funding source Name|Template Id|PaymentBeneficiaryId cannot be modified * `EVB0046` - FundingSourceName cannot be modified * `EVB0050` - paymentBeneficiaryId cannot be modified * `EVB0053` - paymentBeneficiaryEmails must be alphanumeric and have value with proper email format: "." and "@" * `EVB0060` - expiryDate is mandatory * `EVB0061` - expiryDate length exceeds max length allowed of: 6 characters * `EVB0062` - TimeZone is mandatory if any of the following controls are set to true: Validity Period, Aging Velocity (MasterCard only), Curfew Control, Time of Day Control * `EVB0063` - timeZone field has an invalid UTC offset time zone format * `EVB0065` - currencyCode cannot be null * `EVB0066` - ClientId and programId combination is not valid * `EVB0070` - templateId cannot be modified * `EVB0071` - templateId cannot be null * `EVB0099` - currencyCode length allowed is: 3 digits * `EVB0104` - currencyType must have value which matches regex: M|B|m|b * `EVB0106` - minAmount is mandatory if enableAmountRangeControl is true * `EVB0107` - maxAmount is mandatory if enableAmountRangeControl is true * `EVB0110` - startTime value must have valid format: HH:MM - H (0,1,2) | H (0-9) : M (0-9) | M (0-9) * `EVB0113` - startTime is mandatory if CurfewControl is true * `EVB0114` - endTime is mandatory if CurfewControl is true * `EVB0112` - endTime value must have valid format: HH:MM - H (0,1,2) | H (0-9) : M (0-9) | M (0-9) * `EVB0120` - validityEndDate value must have valid format: YYYY-MM-DD * `EVB0121` - validityStartDate value must have valid format: YYYY-MM-DD * `EVB0124` - timeZone is mandatory if Validity Period control is set to true * `EVB0125` - validityStartDate is mandatory if ValidityPeriodControl is true * `EVB0126` - validityEndDate is mandatory if ValidityPeriodControl is true * `EVB0133` - VelocityControlType-periodType is mandatory. * `EVB0136` - currencyType is mandatory * `EVB0137` - spendVelocityControl-cumulativeSpendLimit is mandatory * `EVB0138` - spendVelocityControl-maxAuth is mandatory * `EVB0140` - periodType length exceeds max length allowed of: 1 character * `EVB0141` - periodType is mandatory if enablespendvelocity is true * `EVB0143` - periodType is mandatory * `EVB0151` - Cannot add any new controls to a previosuly created VCA * `EVB0163` - authorizationHoldDays is mandatory if agingVelocityControl is true * `EVB0170` - amountLimit is mandatory if TransactionLimitControl is true * `EVB0201` - We were unable to process your request. Please try again, or contact Citi support if you have any further questions or comments. * `EVB0202` - We were unable to process your request. Please try again, or contact Citi support if you have any further questions or comments * `EVB0213` - virtualCardAccountNumber is Invalid * `EVB0214` - Validity Period Control must be set to true and validityStartDate and validityEndDate are mandatory if periodType = 3 * `EVB0215` - Validity Period Control must be set to true and validityStartDate and validityEndDate are mandatory if periodType = C * `EVB0216` - VcaId Should be a Valid Long Value * `EVB0222` - messageId cannot be null * `EVB0224` - messageId size must be between 28 and 36 characters * `EVB0241` - Transaction Not Found for the respective client id and message id on grace. * `EVB0243` - Program Id is not present * `EVB0245` - currencyCode value must be numeric \[0-9] * `EVB0251` - ExpiryDate is not required * `EVB0252` - messageId should be alphanumeric without special characters * `EVB0254` - FundingSourceName size must be between 1 and 100 characters * `EVB0244` - TemplateId Should be a Valid Long Value * `EVB0246` - paymentBeneficiaryId cannot be null * `EVB0247` - paymentBeneficiaryId size must be between 1 and 19 digits * `EVB0248` - paymentBeneficiaryId Should be a Valid Long Value * `EVB0250` - FundingSourceName is not required * `EVB0253` - mccGrouping should not contain multiple values * `EVB0255` - customReference size should be between 1 and 29 * `EVB0256` - customReferenceValue should be between 1 and 100 characters * `EVB0257` - vcaId should not be null or empty * `EVB0258` - customReferenceLabel should be between 1 and 50 characters * `EVB00259`- expiryDate must have format: MMYYYY * `EVB0261` - cardAcceptorId length exceeds max length allowed of 15 character * `EVB0262` - weekdaysEffective is mandatory if enableCurfewControl is true * `EVB0264` - spendVelocityControl is Mandatory * `EVB0265` - mccGrouping cannot be null or empty * `EVB0267` - ProgramId should be alphanumeric without special characters * `EVB0270` - Not allowed to modify when control indicator is disabled * `EVB0271` - ExpiryDate field cannot be NULL * `EVB0272` - Both Aging and Spend Velocity Control cannot be enabled * `EVB0273` - Either Aging or Spend Velocity Control should be enabled * `EVB0290` - Bulk Cancellation is not Allowed for visa * `EVB0350` - virtualCardAccountNumber length should be 16 characters * `EVB0351` - virtualCardAccountNumber is Mandatory * `EVB0352` - FundingSourceId is Invalid. FundingSourceId value should be a valid long value and size must be between 1 and 19 digits * `EVB0352` - FundingSourceId is Invalid. FundingSourceId value should be alphanumeric and size must be between 1 and 19 digits * `EVB0353` - customReferenceValue should be between 1 and 80 characters * `EVB0354` - AmountRangeControl-minAmount length exceed max length allowed is: 14 characters * `EVB0355` - AmountRangeControl-maxAmount length exceed max length allowed is: 14 characters * `EVB0356` - minAmount & maxAmount values must be a numeric positive value with a maximum of 2 decimals digits * `EVB0357` - ProgramId must be numeric * `EVB0358` - programId value must be between 1 and 19 digits * `EVB0359` - programId value must be between 1 and 25 digits * `EVB0360` - Invalid JSON input * `EVB0361` - Invalid JSON input * `EVB0362` - Invalid maxAuth format. maxAuth value cannot exceed 8 digits * `EVB0363` - cumulativeSpendLimit max field length is 12 digits with 10 digits to the left of the decimal and 2 digits to the right of the decimal * `EVB0364` - transactionLimitControl-amount value must be a numeric positive value with a maximum of 2 decimals digits * `EVB0365` - periodType is mandatory if enableSpendVelocity is true * `EVB0366` - resetDay value must an integer between 1-28 * `EVB0367` - startTime is mandatory if Time Of Day Control is true * `EVB0368` - "weekdayEffective must have value which matches regex: SUN|MON|TUE|WED|THU|FRI|SAT" * `EVB0369` - cumulativeSpendLimit is mandatory if Aging Velocity Control is set to true * `EVB0370` - countryCodes is required if Geography Control is set to true * `EVB0371` - allowed field is required if Geography Control is set to true * `EVB0372` - merchantId is mandatory if Merchant ID Control is true * `EVB0373` - merchantId length exceeds max length allowed of 15 characters * `EVB0374` - acquirerId is mandatory if Merchant ID Control is true * `EVB0375` - acquirerId length exceeds max length allowed of 15 characters * `EVB0378` - allowed field is required if Merchant ID Control is set to true * `EVB0381` - AmountRangeControl-minAmount is greater than maxAmount * `EVB0401` - The value is not present in the predefined list for custom field named field name * `EVB0404` - The value has non numeric characters for custom field named: \[field] * `EVB0430` - The Amount must be greater than or equal to the Cumulative Limit * `EVB0431` - The Amount must be less than the max amount range * `EVB0432` - The Amount Range Control was missing from the request * `EVB0435` - There was a problem retrieving the RCN Data with rcnId : \[rcnID] * `EVB0436` - There was a problem assigning rules to your VCN Request * `EVB0437` - Invalid date \{date given}.\[valid date format YYYY-MM-DD] * `EVB0438` - From date should be before to date. * `EVB0406` - The Validity Control was missing from the request * `EVB0440` - There was a problem retrieving the RCN Data with rcnId: * `EVB0441` - An invalid velocity control field exists in the request. field name: * `EVB0442` - There was a problem getting the Card Image Data * `EVB0443` - There was a problem retrieving the RCN Data with rcnId : * `EVB0427` - There was a problem getting the DataSources for the given issuer * `EVB0445` - There was a problem getting the issuer id for the company id provided. * `EVB0446` - There was a problem getting RCN details. * `EVB0447` - There was a problem getting the custom data fields for the given request id * `EVB0448` - There was a problem getting the supplier email address by a supplier id * `EVB0448` - There was a problem getting the supplier email address by a supplier id * `EVB0449` - There was a problem getting the suppliers for the company ID provided * `EVB0450` - The Merchant Amount Control was missing from the request * `EVB0439` - An invalid geography control field exists in the request. field name: * `EVB0452` - Negate is the only supported attribute; Merchant and Acquirer details should be specified in Supplier Setup * `EVB0453` - The purchase request rules must have unique rule names * `EVB0454` - Invalid or inactive supplier. * `EVB0455` - An invalid travel control field exists in the request. field name: * `EVB0456` - An invalid time of day control field exists in the request. field name: * `EVB0457` - An invalid transaction limit control field exists in the request. field name: * `EVB0426` - An invalid validity control field exists in the request. field name: * `EVB0441` - An invalid velocity control field exists in the request. field name: * `EVB0458` - Only one Merchant Id control is allowed * `EVB0459` - The specified supplier has not been configured to use the Merchant ID control * `EVB0460` - Cannot have multiple velocity controls in the request with the same period. * `EVB0461` - A request submitter is not valid user * `EVB0462` - There was not a Purchase Template with the given Id, Id: * `EVB0444` - The request's Purchase Template is not associated with the active auto approve purchase group * `EVB0464` - There was a problem saving the custom data fields for the allocate vcn request * `EVB0465` - There was a problem getting the Travel Agency Detail for the request * `EVB0466` - There was a problem getting the Tolerances for the given corpId * `EVB0470` - There was a problem getting the Template CDF to get the order * `EVB0468` - There was a problem getting the Air Detail for the request * `EVB0469` - There was a problem getting the Vehicle Rental Detail for the request * `EVB0472` - There was a problem getting the companies for the given issuer id and corp number * `EVB0471` - There was a problem getting the supplier by a supplier name * `EVB0477` - There was a problem getting the Lodging Summary for the request * `EVB0473` - There was a problem getting the VCN Request * `EVB0474` - There was a problem getting the Rail Detail for the request * `EVB0475` - There was a problem getting the CDF to get the order * `EVB0476` - There was a problem getting the real cards for the company entered * `EVB0524` - Date range should be same month. * `EVB0478` - There was a problem in deleting a vcn. * `EVB0479` - The maximum number of records has been exceeded. * `EVB0480` - There was a problem TRYING TO Sync Card Currency * `EVB0481` - There was a problem saving the custom data fields for the update request * `EVB0482` - There was a problem saving the vcn request * `EVB0483` - There was a problem updating the vcn request * `EVB0484` - Invalid Expiry Date Requested * `EVB0485` - Unable to correctly analyze a purchase request which did not have required controls present: * `EVB0528` - There was a problem allocating the vcn * `EVB0486` - Purchase Request(s) could not be approved * `EVB0487` - Purchase Request(s) could not be canceled * `EVB0513` - Message ID is not unique. * `EVB0516` - Request could not be processed successfully. * `EVB0515` - Invalid Buyer * `EVB0516` - Request could not be processed successfully. * `EVB0517` - Invalid Web Service Method * `EVB0518` - Proxy number provided in the request is not active. * `EVB0519` - Invalid visa account number * `EVB0520` - Proxy number length should be between 1 and 19 * `EVB0521` - Proxy number contains invalid characters * `EVB0522` - Start Date should not be more than 10 characters * `EVB0523` - Start Date is invalid. Valid date format is YYYY-MM-DD * `EVB0525` - End Date is mandatory * `EVB0526` - End Date should not be more than 10 characters * `EVB0527` - End Date is invalid. Valid date format is YYYY-MM-DD * `EVB0528` - End Date cannot be a past date * `EVB0529` - Rule Code is not valid * `EVB516` - cumulativeSpendLimit value must be numeric * `EVB517` - cumulativeSpendLimit value must be numeric * `EVB0530` - Sequence number should contain only numbers. * `EVB0531` - OverrideCode contains invalid characters * `EVB0532` - OverrideCode should not be more than 33 characters. * `EVB0531` - OverrideValue contains invalid characters * `EVB0533` - OverrideValue should not be more than 10 characters * `EVB0559` - End Date should not be less than Start Date * `EVB0535` - Sequence number should be within 0 to 999 range. * `EVB0536` - Rule Code is mandatory. Please provide valid rule code * `EVB0537` - Rule Code cannot contain special characters. Please provide valid rule code * `EVB0538` - Override code is mandatory * `EVB0539` - Override Value is mandatory * `EVB0540` - Action is mandatory. Action code should be A/U/D. * `EVB0560` - Invalid Action. Action code should be A/U/D. * `EVB0542` - Request could not be processed successfully. Failed to generate Token. * `EVB0543` - Add payment control could not be processed successfully. * `EVB0544` - Account number should be blank. * `EVB0545` - Atlease one requisition rule is mandaotry. * `EVB0546` - Atlease one override rule is mandatory. * `EVB0547` - No Requisition card details found. * `EVB0548` - equence number is mandatory * `EVB0549` - Account Number is Mandatory * `EVB0550` - Number of cards count should be 1. * `EVB0551` - Start Date is Mandatory. * `EVB0552` - The number of accounts you have requested exceeds the maximum allowed limit * `EVB0553` - Overrides rule size exceeds maximum Limit * `EVB0554` - The pseudo account type set for the SUA proxy is not matching the pseudo account type set up for the buyer. * `EVB0555` - Currency code passed in the request is not configured as one of the allowed currency for the buyer. * `EVB0556` - The startRange and endRange overrides are mandatory for the Other MCG rule. * `EVB0557` - Rules can have a maximum of 25 override values * `EVB0558` - Atleast one RequisitionDetail is mandatory * `EVB0607` - At least one spend control is mandatory * `EVB0211` - validityStartDate invalid format. MM value must be less than or equal to 12 and DD value must be less than or equal to 31 * `EVB0212` - validityEndDate invalid format. MM value must be less than or equal to 12 and DD value must be less than or equal to 31 * `EVB0219` - expiryDate month and year cannot be a past or current date * `EVB0230` - Invalid countryCode format. countryCode value cannot exceed 3 characters * `EVB0231` - maxAuth is mandatory if enableSpendVelocityControl is set to True * `EVB0281` - maxAuth must be a valid long value with a maximum of 10 digits * `EVB1185` - max size supported for purchaseRequestIds is : 50 * `ERS0087` - Duplicate message id provided for VCA creation. Please call getVCADetails with original create message id to get vca details. * `GRC0001` - We have encountered an error and couldn't receive your request. Please try again, or contact Citi support if you have any further questions or comments * `GRC0002` - Client ID is missing in the request header * `GRC0003` - Contry code is not available in the request * `GRC0004` - Region ID is not available in the request * `GRC0005` - We have encountered an error and couldn't receive your request. Please try again, or contact Citi support if you have any further questions or comments * `GRC0006` - We have encountered an error and couldn't receive your request. Please try again, or contact Citi support if you have any further questions or comments * `GRC0007` - Client requested MediaType is not supported. * `GRC0009` - We have encountered an error and couldn't receive your request. Please try again, or contact Citi support if you have any further questions or comments * `GRC0011` - Client ID and/or Country and/or region id is missing in Client Onboard Configuration setup. Contact Citi support. * `GRC0012` - Necessary header value is missing * `GRC0003` - Invalid JSON Input * `GRC0014` - We have encountered an error and couldn't receive your request. Please try again, or contact Citi support if you have any further questions or comments * `EVB1300` - Amount range control is included in the request, but this control is not configured within the Virtual Card Purchase Template that is included in the request. Please configure this control in the Purchase Template * `EVB1301` - Curfew control is included in the request, but this control is not configured within the Virtual Card Purchase Template that is included in the request. Please configure this control in the Purchase Template * `EVB1302` - Geography control is included in the request, but this control is not configured within the Virtual Card Purchase Template that is included in the request. Please configure this control in the Purchase Template * `EVB1303` - Merchant amount control is included in the request, but this control is not configured within the Virtual Card Purchase Template that is included in the request. Please configure this control in the Purchase Template * `EVB1304` - Merchant ID control is included in the request, but this control is not configured within the Virtual Card Purchase Template that is included in the request. Please configure this control in the Purchase Template * `EVB1305` - Time of day control is included in the request, but this control is not configured within the Virtual Card Purchase Template that is included in the request. Please configure this control in the Purchase Template * `EVB1306` - Transaction limit control is included in the request, but this control is not configured within the Virtual Card Purchase Template that is included in the request. Please configure this control in the Purchase Template * `EVB1307` - Validity period control is included in the request, but this control is not configured within the Virtual Card Purchase Template that is included in the request. Please configure this control in the Purchase Template * `EVB1308` - Aging velocity control is included in the request, but this control is not configured within the Virtual Card Purchase Template that is included in the request. Please configure this control in the Purchase Template * `EVB1309` - Velocity control is included in the request, but this control is not configured within the Virtual Card Purchase Template that is included in the request. Please configure this control in the Purchase Template * `EVB1310` - Invalid mccRange range format. In mccRange the min value must be less than the max value.(eg: 1111-9999). * `EVB1311` - mccgAllowed is required if the mccGrouping or mccRange field is populated * `EVB1312` - Invalid acquirerId format. acquirerId must be an numeric value * `EVB0260` - cardAccepterId is required if merchantIdControl is enabled * `EVB1314` - Invalid cardAccepterId format. cardAccepterId must be an alphanumeric value * `EVB1315` - Invalid mccRange range format. mccRange should consist of a min and max four-digit MCC value with the format: XXXX-XXXX * `EVB0162` - currencyType must have value which matches regex: M|B|m|b * `EVB0236` - Invalid contryCode, countryCode doesn’t exist * `EVB0605` - fundingSourceId length should be between 1 and 19 * `EVB0903` - Atleast one Spend velocity control is required, When enableSpendVelocity is true * `EVB0902` - For VISA, Only one Spend velocity control should be present * `EVB0611` - Invalid periodType value. periodType can contain a value of either 1, 2, or 3 * `EVB0612` - resetDay is mandatory if periodType = 1 * `EVB0618` - Amount Range Control minAmount field length is 12 digits with 10 digits to the left of the decimal and 2 digits to the right of the decimal * `EVB0619` - Amount Range Control maxAmount field length is 12 digits with 10 digits to the left of the decimal and 2 digits to the right of the decimal * `EVB0616` - validityPeriodControl is Mandatory * `EVB0237` - The date specified in validityStartDate does not exist * `EVB0217` - validityStartDate cannot be a past date * `EVB0238` - The date specified in validityEndDate does not exist * `EVB0218` - validityEndDate cannot be a past date * `EVB0600` - validityStartDate should be before validityEndDate * `EVB0232` - weekdayEffective is mandatory if TimeOfDayControl is true * `EVB0235` - startTime value cannot exceed there questedend Timevalue * `EVB0233` - endTime is mandatory if TimeOfDayControl is true * `EVB0011` - vcaId have value which matches regex:\[0-9]

### Merchant-Id

- `cardAcceptorId` (string, optional) — Specifies the Card Acceptor ID that should be allowed / disallowed when transacting with the virtual card.
- `acquirerId` (string, optional) — Specifies the Acquirer ID that should be allowed disallowed when transacting with the virtual card.

## Examples

**Request**

```json
{
  "fundingSourceId": "string",
  "programId": "string",
  "messageId": "string",
  "timeZone": "string",
  "customReference": [
    {}
  ]
}
```

**Response**

```json
{
  "vcaId": "string",
  "cardImage": "string",
  "currencyCode": "string",
  "timeZone": "string",
  "virtualCardAccountNumber": "string",
  "expiryDate": "string",
  "securityCode": "string",
  "programId": "string",
  "messageId": "string",
  "mccGrouping": [
    "string"
  ],
  "mccRange": [
    "string"
  ],
  "mccgAllowed": true,
  "currencyType": "string",
  "paymentBeneficiaryId": 1.1,
  "paymentBeneficiaryEmails": [
    "string"
  ],
  "customReference": [
    {
      "customReferenceValue": "string",
      "customReferenceLabel": "string"
    }
  ],
  "templateId": 1.1,
  "cumulativeSpendLimit": 1.1,
  "standInVca": true,
  "warning": [
    "The VCA Details returned are for a pre-generated VCA from Citi, as the backend VCA platform is currently unavailable"
  ],
  "enableSpendVelocityControl": true,
  "spendVelocity": [
    {
      "maxAuth": 1.1,
      "cumulativeSpendLimit": 1.1,
      "periodType": "string",
      "availableBalance": 1.1,
      "periodEndDate": "string"
    }
  ],
  "enableValidityPeriodControl": true,
  "validityStartDate": "string",
  "validityEndDate": "string",
  "enableAmountRangeControl": true,
  "maxAmount": 1.1,
  "minAmount": 1.1,
  "enableTransactionLimitControl": true,
  "amountLimit": 1.1,
  "enableCurfewControl": true,
  "curfewTime": {
    "startTime": "string",
    "endTime": "string",
    "weekdaysEffective": [
      "string"
    ]
  },
  "enableTimeOfDayControl": true,
  "timeOfDay": [
    {
      "startTime": "string",
      "endTime": "string",
      "weekdayEffective": "string"
    }
  ],
  "enableAgingVelocityControl": true,
  "authorizationHoldDays": 1.1,
  "enableGeographyControl": true,
  "countryCodes": [
    "string"
  ],
  "allowed": true,
  "enableMerchantIdControl": true,
  "merchantInfo": [
    {
      "allowed": true,
      "merchantIds": [
        {
          "cardAcceptorId": "123456",
          "acquirerId": "123456"
        }
      ]
    }
  ]
}
```

**SDK Code**

```python
import requests

url = "https://tts.apib2b.citi.com/tts/cards/vca/v2/create"

payload = {
    "fundingSourceId": "string",
    "programId": "string",
    "messageId": "string",
    "timeZone": "string",
    "customReference": [{}]
}
headers = {
    "Authorization": "Bearer <token>",
    "country": "country",
    "region": "region",
    "req-sys-id": "req-sys-id",
    "Content-Type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)

print(response.json())
```

```javascript
const url = 'https://tts.apib2b.citi.com/tts/cards/vca/v2/create';
const options = {
  method: 'POST',
  headers: {
    Authorization: 'Bearer <token>',
    country: 'country',
    region: 'region',
    'req-sys-id': 'req-sys-id',
    'Content-Type': 'application/json'
  },
  body: '{"fundingSourceId":"string","programId":"string","messageId":"string","timeZone":"string","customReference":[{}]}'
};

try {
  const response = await fetch(url, options);
  const data = await response.json();
  console.log(data);
} catch (error) {
  console.error(error);
}
```

```go
package main

import (
	"fmt"
	"strings"
	"net/http"
	"io"
)

func main() {

	url := "https://tts.apib2b.citi.com/tts/cards/vca/v2/create"

	payload := strings.NewReader("{\n  \"fundingSourceId\": \"string\",\n  \"programId\": \"string\",\n  \"messageId\": \"string\",\n  \"timeZone\": \"string\",\n  \"customReference\": [\n    {}\n  ]\n}")

	req, _ := http.NewRequest("POST", url, payload)

	req.Header.Add("Authorization", "Bearer <token>")
	req.Header.Add("country", "country")
	req.Header.Add("region", "region")
	req.Header.Add("req-sys-id", "req-sys-id")
	req.Header.Add("Content-Type", "application/json")

	res, _ := http.DefaultClient.Do(req)

	defer res.Body.Close()
	body, _ := io.ReadAll(res.Body)

	fmt.Println(res)
	fmt.Println(string(body))

}
```

```ruby
require 'uri'
require 'net/http'

url = URI("https://tts.apib2b.citi.com/tts/cards/vca/v2/create")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["country"] = 'country'
request["region"] = 'region'
request["req-sys-id"] = 'req-sys-id'
request["Content-Type"] = 'application/json'
request.body = "{\n  \"fundingSourceId\": \"string\",\n  \"programId\": \"string\",\n  \"messageId\": \"string\",\n  \"timeZone\": \"string\",\n  \"customReference\": [\n    {}\n  ]\n}"

response = http.request(request)
puts response.read_body
```

```java
import com.mashape.unirest.http.HttpResponse;
import com.mashape.unirest.http.Unirest;

HttpResponse<String> response = Unirest.post("https://tts.apib2b.citi.com/tts/cards/vca/v2/create")
  .header("Authorization", "Bearer <token>")
  .header("country", "country")
  .header("region", "region")
  .header("req-sys-id", "req-sys-id")
  .header("Content-Type", "application/json")
  .body("{\n  \"fundingSourceId\": \"string\",\n  \"programId\": \"string\",\n  \"messageId\": \"string\",\n  \"timeZone\": \"string\",\n  \"customReference\": [\n    {}\n  ]\n}")
  .asString();
```

```php
<?php
require_once('vendor/autoload.php');

$client = new \GuzzleHttp\Client();

$response = $client->request('POST', 'https://tts.apib2b.citi.com/tts/cards/vca/v2/create', [
  'body' => '{
  "fundingSourceId": "string",
  "programId": "string",
  "messageId": "string",
  "timeZone": "string",
  "customReference": [
    {}
  ]
}',
  'headers' => [
    'Authorization' => 'Bearer <token>',
    'Content-Type' => 'application/json',
    'country' => 'country',
    'region' => 'region',
    'req-sys-id' => 'req-sys-id',
  ],
]);

echo $response->getBody();
```

```csharp
using RestSharp;

var client = new RestClient("https://tts.apib2b.citi.com/tts/cards/vca/v2/create");
var request = new RestRequest(Method.POST);
request.AddHeader("Authorization", "Bearer <token>");
request.AddHeader("country", "country");
request.AddHeader("region", "region");
request.AddHeader("req-sys-id", "req-sys-id");
request.AddHeader("Content-Type", "application/json");
request.AddParameter("application/json", "{\n  \"fundingSourceId\": \"string\",\n  \"programId\": \"string\",\n  \"messageId\": \"string\",\n  \"timeZone\": \"string\",\n  \"customReference\": [\n    {}\n  ]\n}", ParameterType.RequestBody);
IRestResponse response = client.Execute(request);
```

```swift
import Foundation

let headers = [
  "Authorization": "Bearer <token>",
  "country": "country",
  "region": "region",
  "req-sys-id": "req-sys-id",
  "Content-Type": "application/json"
]
let parameters = [
  "fundingSourceId": "string",
  "programId": "string",
  "messageId": "string",
  "timeZone": "string",
  "customReference": [[]]
] as [String : Any]

let postData = JSONSerialization.data(withJSONObject: parameters, options: [])

let request = NSMutableURLRequest(url: NSURL(string: "https://tts.apib2b.citi.com/tts/cards/vca/v2/create")! as URL,
                                        cachePolicy: .useProtocolCachePolicy,
                                    timeoutInterval: 10.0)
request.httpMethod = "POST"
request.allHTTPHeaderFields = headers
request.httpBody = postData as Data

let session = URLSession.shared
let dataTask = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) -> Void in
  if (error != nil) {
    print(error as Any)
  } else {
    let httpResponse = response as? HTTPURLResponse
    print(httpResponse)
  }
})

dataTask.resume()
```