openapi: 3.2.0
info:
description: Virtual Card Create Notification request.
version: 1.0.0
title: VCA Life Cycle Webhook Client Notification Vca Create…
servers:
- url: /
description: Default server
security:
- OAuth2:
- read
- write
tags:
- name: vca-create-notification-service
paths:
/webhooks/v2/vca/create:
post:
tags:
- vca-create-notification-service
summary: Create VCA Notification
description: Create a virtual card and set its associated spending controls, custom reference data and payment beneficiaries. It allows you to place a VCA creation request for secure purchasing, with increased Transaction-Level Controls, limit card number use by MCC, amounts, dates and even specific suppliers.
operationId: create
security:
- OAuth2:
- write
- ApiKeyAuth: []
- BasicAuth: []
parameters:
- name: messageId
in: header
description: Tracking id which was sent by client on VCA create request.
required: true
schema:
type: string
- name: client-id
in: header
description: Unique identifier of the client application making the request.
required: true
schema:
type: string
- name: api-gateway-id
in: header
description: Unique identifier assigned by the API transaction for the incoming request. This is the x-global-transaction-id value returned in the VCA Create for PI API instant acknowledgementresponse header.
required: true
schema:
type: string
- name: correlation_id
in: header
description: Unique identifier used to correlate and trace the request end-to-end across services.
required: true
schema:
type: string
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/WebhookRequest'
examples:
Mastercard:
summary: VCA Create Notification - Mastercard Sample Request
value:
eventType: VCA CREATE
eventStatus: CREATED
alertMessage: VCA Issuance for ABC Corporation is completed successfully.
payload:
vcaId: '7890123456789'
cardImage: base64encodedImageString==
currencyCode: 008
timeZone: UTC+10:00
virtualCardAccountNumber: '5412345678901234'
expiryDate: '112026'
securityCode: '123'
programId: '431341'
messageId: 908c090d1995490eb3b431a1f37356df
mccGrouping:
- All MCCs
currencyType: B
paymentBeneficiaryId: 19180
paymentBeneficiaryEmails:
- abcd.emp@citi.com
customReference:
- customReferenceLabel: Invoice No.
customReferenceValue: '1234'
- customReferenceLabel: Cost Center
customReferenceValue: NAM Hub
- customReferenceLabel: Department
customReferenceValue: Marketing
templateId: 23358
cumulativeSpendLimit: 2000
enableSpendVelocityControl: false
spendVelocity:
- maxAuth: 5
cumulativeSpendLimit: 2000
periodType: D
availableBalance: 2000
periodEndDate: '2026-06-30'
enableValidityPeriodControl: true
validityStartDate: '2022-06-16'
validityEndDate: '2022-06-17'
enableAmountRangeControl: true
maxAmount: 2000.01
minAmount: 1000.01
enableTransactionLimitControl: false
enableCurfewControl: true
curfewTime:
startTime: '12:30'
endTime: '13:30'
weekdaysEffective:
- MON
enableTimeOfDayControl: false
enableAgingVelocityControl: true
authorizationHoldDays: 5
enableGeographyControl: false
enableMerchantIdControl: false
standInVca: false
Visa:
summary: VCA Create Notification - Visa Sample Request
value:
eventType: VCA CREATE
eventStatus: CREATED
alertMessage: VCA Issuance for XYZ Corporation is completed successfully.
payload:
vcaId: '5678901234567'
currencyCode: '752'
timeZone: UTC+05:30
virtualCardAccountNumber: '4012345678901234'
expiryDate: '122025'
securityCode: '456'
programId: '918'
messageId: KS08736V2Create20260226131411
mccRange:
- 4812-4814
- 4816-4817
- 5044-5045
mccgAllowed: true
currencyType: M
customReference:
- customReferenceLabel: Invoice No.
customReferenceValue: '1234'
- customReferenceLabel: Cost Center
customReferenceValue: NAM Hub
- customReferenceLabel: Department
customReferenceValue: Marketing
enableSpendVelocityControl: true
spendVelocity:
- maxAuth: 1
cumulativeSpendLimit: 300000
periodType: '3'
resetDay: 15
availableBalance: 300000
periodEndDate: '2026-12-25'
enableValidityPeriodControl: true
validityStartDate: '2026-12-10'
validityEndDate: '2026-12-25'
enableAmountRangeControl: true
maxAmount: 10000.1
minAmount: 1000.1
enableTransactionLimitControl: false
enableCurfewControl: false
enableTimeOfDayControl: true
timeOfDay:
- startTime: '10:00'
endTime: '11:00'
weekdayEffective: MON
enableGeographyControl: true
countryCodes:
- USA
- ZMB
- ZWE
- SWZ
allowed: false
enableMerchantIdControl: true
merchantInfo:
- allowed: true
merchantIds:
- cardAcceptorId: '1234560'
acquirerId: '132412'
- cardAcceptorId: '1234561'
acquirerId: '1324121'
standInVca: false
responses:
'201':
description: Create Virtual Card Notification response
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationResponseMessage'
example:
httpResponse: 201
responseMessage: Notification received successfully.
'500':
description: Internal Server Error
content:
application/json:
schema:
$ref: '#/components/schemas/NotificationResponseMessage'
example:
httpResponse: 500
responseMessage: Internal Server Error. Please try again or contact Citi support.
components:
schemas:
NotificationResponseMessage:
type: object
properties:
httpResponse:
type: integer
format: int64
description: Notification response status code.
responseMessage:
type: string
description: Notification response message.
VcaCreateResponse:
type: object
properties:
vcaId:
type: string
description: A reference number that uniquely identifies the virtual card account.
cardImage:
type: string
description: A visual representation of the virtual card account front and back.
currencyCode:
type: string
description: 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.
timeZone:
type: string
description: Defines the time zone applicable for any date or time parameters within controls set for a VCA.
virtualCardAccountNumber:
type: string
description: The virtual card account number to use for transactions.
expiryDate:
type: string
description: Expiry Date of the virtual card account. Represented in UTC time zone. Format - MMYYYY
securityCode:
type: string
description: The security code (i.e. cvv) corresponding to the virtual card account.
programId:
type: string
description: Unique ID of the company record defined in the virtual cards system.
messageId:
type: string
description: 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:
type: array
description: Limits authorizations to defined Merchant Category Codes.
items:
type: string
currencyType:
type: string
description: 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 - The only valid value is "M".
paymentBeneficiaryId:
type: number
description: Uniquely identifies the payment beneficiary for which the virtual card is created.
paymentBeneficiaryEmails:
type: array
description: Lists of up to 5 email addresses separated by semicolon 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 supplier
2. Allow VCN requestor to manually enter a new email address when requesting a VCN
items:
type: string
customReference:
type: array
items:
$ref: '#/components/schemas/CustomReference'
templateId:
type: number
description: 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:
type: number
description: Limits the overall amount that can be spent on the virtual card account.
Mastercard - Allows a maximum of 14 digits (12 digits to the left of the decimal and 2 digits to the right of the decimal)
Visa - Allows a maximum of 12 digits (10 digits to the left of the decimal and 2 digits to the right of the decimal)
enableSpendVelocityControl:
type: boolean
description: 'Limits the frequency and total cumulative amount of authorizations performed on the VCA within a specified period.
Mastercard: The control is mandatory unless Aging Velocity Control is used. This control cannot be used in combination with the Aging Velocity Control.
Visa: Spend Velocity Control is mandatory.'
spendVelocity:
type: array
items:
$ref: '#/components/schemas/SpendVelocityResponse'
enableValidityPeriodControl:
type: boolean
description: Limits authorization activity to a specific time period.
Mastercard - Optional
Visa - Required
validityStartDate:
type: string
description: Identifies the date from which the virtual card account can be used for transactions. Format - YYYY-MM-DD
Mastercard - Optional
Visa - Optional. If not provided, then will be defaulted to today's date
validityEndDate:
type: string
description: Identifies the date until which the virtual card account can be used for transactions. Format - YYYY-MM-DD
Mastercard - Optional
Visa - Required
enableAmountRangeControl:
type: boolean
description: 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. This control cannot be used in combination with Transaction Limit Control.
Mastercard - Optional
Visa - Optional
maxAmount:
type: number
description: Identifies the maximum allowed transaction amount.
Mastercard - Optional. Max character length - 14 digits (12 digits to the left of the decimal and 2 digits to the right of the decimal)
Visa - Optional. Max character length - 12 digits (10 digits to the left of the decimal and 2 digits to the right of the decimal)
minAmount:
type: number
description: Identifies the minimum allowed transaction amount.
Mastercard - Max character length - 14 digits (12 digits to the left of the decimal and 2 digits to the right of the decimal)
Visa - Optional. Max character length - 12 digits (10 digits to the left of the decimal and 2 digits to the right of the decimal)
enableTransactionLimitControl:
type: boolean
description: Limits individual transactions to a maximum amount. This control cannot be used in combination with Amount Range Control.
Mastercard - Optional
Visa - Optional
amountLimit:
type: number
description: Identifies the maximum allowed transaction amount.
Mastercard - Optional. Max character length - 17
Visa - Optional. Only integer value allowed. Max character length - 7
enableCurfewControl:
type: boolean
description: Limits authorization activity to a single time period for each day selected. This control cannot be used in combination with Time Of Day Control.
Mastercard - Optional
Visa - Not applicable
curfewTime:
$ref: '#/components/schemas/CurfewTime'
enableTimeOfDayControl:
type: boolean
description: Limits authorization request to defined time periods each day.
Mastercard - Optional
Visa - Optional
timeOfDay:
type: array
items:
$ref: '#/components/schemas/TimeOfDay'
enableAgingVelocityControl:
type: boolean
description: 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.
Mastercard - Optional
Visa - Not applicable
authorizationHoldDays:
type: number
description: Identifies the number of days after which an authorization gets aged off if no matching clearing record was received.
Mastercard - Optional
Visa - Not applicable
enableGeographyControl:
type: boolean
description: 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.
Mastercard - Optional
Visa - Optional
countryCodes:
type: array
description: Comma delimited list defining the merchant country in which the VCA can or cannot be used.
Mastercard - Optional
Visa - Optional
items:
type: string
allowed:
type: boolean
description: 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
Mastercard - Optional
Visa - Optional
enableMerchantIdControl:
type: boolean
description: Limits authorizations to a particular merchant using the Merchant ID and Acquirer ID (Mastercard) or Card Acceptor ID (Visa).
Mastercard - Optional
Visa - Optional
merchantInfo:
type: array
items:
$ref: '#/components/schemas/MerchantIdResponse'
warning:
type: array
description: Warning information regarding a non-fatal response condition that may be taken into account, but can be ignored.
example:
- The VCA Details returned are for a pre-generated VCA from Citi, as the backend VCA platform is currently unavailable
items:
type: string
standInVca:
type: boolean
description: 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 "false" is returned or if the field is not returned then the VCA returned is from the backend VCA platform.
CurfewTime:
type: object
properties:
startTime:
type: string
description: Specifies the start time until which the virtual card account can be used on the particular day specified in weekDaysEffective. Format - 24-hour format
Mastercard - Optional
Visa - Not applicable
endTime:
type: string
description: Specifies the end time until which the virtual card account can be used on the particular day specified in weekDaysEffective. Format - 24-hour format
Mastercard - Optional
Visa - Not applicable
weekdaysEffective:
type: array
description: 'Specifies the day applied to start and end times.
Mastercard - Optional
Visa - Not applicable
Possible Values:
MON
TUE
WED
THU
FRI
SAT
SUN
'
items:
type: string
SpendVelocityResponse:
type: object
properties:
maxAuth:
type: number
description: '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:
type: number
description: Limits the overall amount that can be spent on the virtual card account.
Mastercard - Allows a maximum of 14 digits (12 digits to the left of the decimal and 2 digits to the right of the decimal)
Visa - Allows a maximum of 12 digits (10 digits to the left of the decimal and 2 digits to the right of the decimal)
periodType:
type: string
description: "Period for which the control values are valid before they reset.
Mastercard:
\n * `D` - Daily. The balances of control parameters enabled for a VCA are reset with their original values every day at 00:00:00.\n * `M` - Monthly. The balances of control parameters enabled for a VCA are reset with their original values at the start of every month.\n * `W` - Weekly. The balances of control parameters enabled for a VCA are reset with their original values every Monday at 00:00:00.\n * `Q` - Quarterly. The balances of control parameters enabled for a VCA are reset with their original values on the first day of every quarter at 00:00:00.\n * `Y` - Annually. The balances of control parameters enabled for a VCA are reset with their original values every year on January 1st at 00:00:00.\n * `C` - Continuous. The balances of control parameters enabled for a VCA are retained continuously for the validity period defined.
Visa:
\n * `1` - Recurring. Balances reset on a specified recurring day each month. If you select this periodType, you must also populate the resetDay field.\n * `2` - Monthly. Balances reset with their original values on a specified recurring day every month.\n * `3` - Date Range. Balances are retained continuously for the validity period defined. If you select this periodType, then validityStartDate and validityEndDate fields are required.\n"
availableBalance:
type: number
description: The remaining balance available to spend on the virtual card.
periodEndDate:
type: string
description: End date of the current period based on the periodType selected.
resetDay:
type: number
description: Select a number between 1-28 to identify the day each month when the control parameter balances should reset to their original value. This field is only applicable if periodType was defined as "1".
CustomReference:
type: object
properties:
customReferenceValue:
type: string
description: '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:
type: string
description: '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.'
WebhookRequest:
type: object
properties:
eventType:
type: string
enum:
- VCA CREATE
description: Client Requested API Name.
eventStatus:
type: string
enum:
- CREATED
- PENDING
- FAILED
description: CREATED - Virtual card is created and the details are available. PENDING - Required Additional document to create the virtual card. FAILED - Unable to process your request. Please try again, or contact Citi support if you have any further questions or comments.
alertMessage:
type: string
description: CREATED - VCA Issuance for {Third Party Entity/Individual name} is completed successfully. FAILED - We are unable to issue a VCA for {Third Party Entity/Individual name} at this time. Please try your request again. If this issue persists, please contact Citi support for assistance. PENDING - VCA Issuance for {Third Party Entity/Individual name} is pending review. Citi Cards Clients Services will get in touch with you to process further.
payload:
$ref: '#/components/schemas/VcaCreateResponse'
MerchantIdResponse:
type: object
properties:
allowed:
type: boolean
description: 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
Mastercard - Conditionally required if merchant ID control is enabled
Visa - Conditionally required if merchant ID control is enabled
cardAcceptorId:
type: string
maxLength: 15
description: Specifies the Card Acceptor ID that should be allowed / disallowed when transacting with the virtual card.
Mastercard - Not applicable
Visa - Conditionally required if merchant ID control is enabled
merchantIds:
type: array
items:
$ref: '#/components/schemas/MerchantId'
MerchantId:
type: object
properties:
merchantId:
type: string
description: Specifies the Merchant ID that should be allowed / disallowed when transacting with the virtual card. Must always be provided in combination with a Acquirer ID.
acquirerId:
type: string
maxLength: 15
description: Specifies the Acquirer ID that should be allowed / disallowed when transacting with the virtual card.
Mastercard - Not applicable
Visa - Optional
TimeOfDay:
type: object
properties:
startTime:
type: string
description: Specifies the start time from which the virtual card account can be used on the particular day specified in weekDaysEffective. Format - 24-hour format.
Mastercard - Optional
Visa - Optional. The minutes digit must be populated with zero only.
endTime:
type: string
description: Specifies the end time until which the virtual card account can be used on the particular day specified in weekDaysEffective. Format - 24-hour format.
Mastercard - Optional
Visa - Optional. The minutes digit must be populated with zero only.
weekdayEffective:
type: string
description: 'Specifies the day applicable to the start and end times defined.
Mastercard - Optional
Visa - Optional
Possible Values:
MON
TUE
WED
THU
FRI
SAT
SUN
'
securitySchemes:
BasicAuth:
type: http
scheme: basic
ApiKeyAuth:
type: apiKey
in: header
name: X-API-Key
OAuth2:
type: oauth2
flows:
authorizationCode:
authorizationUrl: https://tts.apib2b.citi.com/tts/api/v1/oauth2/authorize
tokenUrl: https://tts.apib2b.citi.com/tts/api/v1/oauth2/token
scopes:
read: Grants read access
write: Grants write access
admin: Grants read and write access to administrative information