{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/wordline/main/json-schema/wordline-add-corporate-vca-service-cards-and-accounts-request-schema.json",
  "title": "AddCorporateVcaServiceCardsAndAccountsRequest",
  "x-generated": "2026-10-10",
  "x-method": "derived",
  "x-generator": "derive-json-schema.py",
  "x-source": "openapi/wordline-corporate-contract-api-openapi.yml#/components/schemas/AddCorporateVcaServiceCardsAndAccountsRequest",
  "type": "object",
  "required": [
    "addCorporateVcaServiceCardsAndAccounts"
  ],
  "properties": {
    "customers": {
      "type": "array",
      "description": "The issuer has to provide customers (here usually 1 employee only) which don't already exist in our system in a dedicated list (customers)..\nFor each new customer, the issuer :\n- can provide an unique external reference: whether this external reference is already assigned to an existing customer for this issuer in our system then the cards and accounts creation request is denied\n- must provide mandatory fields and a correlation id that can be used in the addCorporateVcaServiceCardsAndAccounts part to assign the customer, not yet created in our system, as card account owner, cardholder, etc",
      "items": {
        "$ref": "#/$defs/CreateCorporateContractRequestCustomer"
      }
    },
    "addCorporateVcaServiceCardsAndAccounts": {
      "description": "It is possible to add one or several VCA Service cards and accounts (configured in a product extension).",
      "allOf": [
        {
          "$ref": "#/$defs/CreateCorporateContractRequestAddCorporateVcaServiceCardsAndAccounts"
        }
      ]
    }
  },
  "$defs": {
    "AccountIdentifier": {
      "type": "object",
      "properties": {
        "accountReference": {
          "type": "string",
          "description": "Account reference is to identify the Account calculated by the system (algorithm is configurable per issuer). Either the account number or the issuerAccountExternalReference is provided, or, if both are provided then only the account number is used."
        },
        "issuerAccountExternalReference": {
          "type": "string",
          "description": "Issuer account external reference is to identify the Account. Either the account number or the issuerAccountExternalReference is provided, or, if both are provided then only the account number is used. Algorithm configurable by issuer, can be generated by the system if there is an externalReferenceGeneratorAlgorithm."
        }
      },
      "title": "AccountIdentifier"
    },
    "AccountModel": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "description": "Type of an account model\nPossible values:\n•\teventFeeModel\n•\ttransactionFeeModel\n•\tmarkupFeeModel\n•\trestrictionModel\n•\tdebitInterestModel\n•\tinterestModel\n•\tdirectDebitAmountModel\n•\taccountAmountDueModel \n•\tstatementModel"
        },
        "reference": {
          "type": "string",
          "description": "Reference to the particular model that has been selected in selectedModels"
        },
        "originalModelReference": {
          "type": "string",
          "description": "DEPRECATED"
        }
      },
      "title": "AccountModel"
    },
    "AdvertisementFlags": {
      "type": "object",
      "properties": {
        "general": {
          "type": "boolean",
          "description": "General advertisement flag. By default, value is false.\nIf this flag is false, other flags are ignored (email, letter, phone, statement, sms flags)."
        },
        "email": {
          "type": "boolean",
          "description": "Indicates if the email advertisement is enabled (true) or not (false). By default, value is false."
        },
        "letter": {
          "type": "boolean",
          "description": "Indicates if the letter advertisement is enabled (true) or not (false). By default, value is false."
        },
        "phone": {
          "type": "boolean",
          "description": "Indicates if the phone advertisement is enabled (true) or not (false). By default, value is false."
        },
        "statement": {
          "type": "boolean",
          "description": "Indicates if the statement advertisement is enabled (true) or not (false). By default, value is false."
        },
        "sms": {
          "type": "boolean",
          "description": "Indicates if the sms advertisement is enabled (true) or not (false). By default, value is false."
        }
      },
      "description": "Specify possible channels used to provide advertisements",
      "title": "AdvertisementFlags"
    },
    "Amount": {
      "type": "object",
      "required": [
        "value",
        "exponent",
        "isoCode"
      ],
      "properties": {
        "value": {
          "type": "integer",
          "format": "int64",
          "description": "Integer amount value. Ex. if it is two hundred euros and 17 cents, then amount value is 20017 (exponent = 2 digits for currency=EUR)"
        },
        "exponent": {
          "type": "integer",
          "format": "int32",
          "description": "Exponent of Amount. Number of decimal digits."
        },
        "isoCode": {
          "type": "string",
          "description": "Currency code of amount\nThe currency in ISO4217 alphabetic format.\nExample: EUR for Euro"
        }
      },
      "title": "Amount"
    },
    "CardContractModel": {
      "type": "object",
      "properties": {
        "reference": {
          "type": "string",
          "description": "Reference of a card contract model"
        },
        "type": {
          "type": "string",
          "description": "Type of a card contract model\nPossible values: CARD_CREATION_MODEL, CARD_AUTONUMBERING_MODEL, TECHNOLOGY_AND_APPLICATION_MODEL, EVENT_FEE_MODEL, CARD_RENEWAL_MODEL, CARD_REPLACEMENT_MODEL, PIN_PRODUCTION_MODEL, DISTRIBUTION_MODEL"
        }
      },
      "title": "CardContractModel"
    },
    "CreateAddressRequestMailAddress": {
      "type": "object",
      "required": [
        "country"
      ],
      "properties": {
        "typeCode": {
          "type": "string",
          "description": "DEPRECATED"
        },
        "courtesyTitle": {
          "type": "string",
          "description": "Courtesy title of the address. Free text"
        },
        "line1": {
          "type": "string",
          "description": "Address line 1 (conditional). Free text. A specific issuer algorithm can be activated to e.g. build the line, apply controls (e.g. length restriction)."
        },
        "line2": {
          "type": "string",
          "description": "Address line 2 (conditional). Free text. A specific issuer algorithm can be activated to e.g. build the line, apply controls (e.g. length restriction)."
        },
        "line3": {
          "type": "string",
          "description": "Address line 3 (conditional). Free text. A specific issuer algorithm can be activated to e.g. build the line, apply controls (e.g. length restriction)."
        },
        "line4": {
          "type": "string",
          "description": "Address line 4 (conditional). Free text. A specific issuer algorithm can be activated to e.g. build the line, apply controls (e.g. length restriction)."
        },
        "line5": {
          "type": "string",
          "description": "Address line 5 (conditional). Free text. A specific issuer algorithm can be activated to e.g. build the line, apply controls (e.g. length restriction)."
        },
        "buildingNumber": {
          "type": "string",
          "description": "Building number of the address (optional)"
        },
        "boxNumber": {
          "type": "string",
          "description": "Box number of the address (optional)"
        },
        "streetName": {
          "type": "string",
          "description": "Street name of the address (optional)"
        },
        "postCode": {
          "type": "string",
          "description": "zip code of the address (optional)"
        },
        "townName": {
          "type": "string",
          "description": "City corresponding to the address"
        },
        "countrySubdivision": {
          "type": "string",
          "description": "Subdivision of the country (optional)"
        },
        "country": {
          "type": "string",
          "description": "Code of the country (mandatory). Free text. The value can be subject to a validation process if a specific rule has been configured at issuer level. The value can be optional if a specific rule has been configured."
        }
      },
      "title": "CreateAddressRequest.MailAddress"
    },
    "CreateAddressRequestPhoneNumber": {
      "type": "object",
      "required": [
        "localPhoneNumber"
      ],
      "properties": {
        "countryCode": {
          "type": "string",
          "description": "Country dialing code (optional). Free text. It is recommended to provide a region dialing code (e.g. +33, +49)."
        },
        "localPhoneNumber": {
          "type": "string",
          "description": "Free text (mandatory). It’s recommended to provide an international phone number in accordance with the value provided in the country code Ex : - country code = ‘+’33’ and localPhoneNumber = ‘0622334455’ - country code = empty and localPhoneNumber = ‘+33622334455’             The value can be subject to a validation process if a specific rule has been configured at issuer level."
        }
      },
      "title": "CreateAddressRequest.PhoneNumber"
    },
    "CreateCorporateContractRequestAccount": {
      "type": "object",
      "properties": {
        "issuerAccountExternalReference": {
          "type": "string",
          "description": "The issuer can provide the external reference for the new account (maximum length of 255 characters).This external reference must be unique per issuer.\nIf not provided, the external reference is calculated by our system if a generation algorithm is configured at account hierarchy level (ExternalReferenceGeneratorAlgorithm), else the issuer account external reference will be empty."
        },
        "accountTemplateReference": {
          "type": "string",
          "description": "The issuer must provide the account template reference to identify the account to be created (optional if only one account has to be created in the product extension)."
        },
        "accountOwnerRequestCorrelationId": {
          "type": "string",
          "description": "Not to be provided if the account owner is the same as the contract owner.\nOtherwise the issuer can provide the correlation id of the new customer or company which represent the account owner (defined in the data block CreateCorporateContractRequest.Customer or in CreateCorporateContractRequest.Company)."
        },
        "accountOwnerIdentifier": {
          "description": "Not to be provided if the account owner is the same as the contract owner.\nOtherwise if the account owner already exists in our system then the issuer has to provide the customer reference or the issuer external customer reference of the existing customer or company. If the account owner does not exist in our system then accountOwnerRequestCorrelationId has to be filled.",
          "allOf": [
            {
              "$ref": "#/$defs/CustomerIdentifier"
            }
          ]
        },
        "accountGuarantorRequestCorrelationId": {
          "type": "string",
          "description": "The issuer can provide the correlation id of the new customer or company which represent the account guarantor (defined in the data block CreateCorporateContractRequest.Customer or in CreateCorporateContractRequest.Company)."
        },
        "accountGuarantorIdentifier": {
          "description": "If the account guarantor already exists in our system then the issuer can provide the customer reference or the issuer external customer reference of the existing customer or company.",
          "allOf": [
            {
              "$ref": "#/$defs/CustomerIdentifier"
            }
          ]
        },
        "selectedModels": {
          "type": "array",
          "description": "The issuer can provide specific account model reference, otherwise the default one from the account template is used.\n\nList of possible models:\n•\trestrictionModel\n•\tstatementModel\n•\tdebitInterestModel\n•\tcreditInterestModel\n•\ttransactionFeeModel\n•\tmarkupFeeModel                ",
          "items": {
            "$ref": "#/$defs/AccountModel"
          }
        },
        "closureCalendarReference": {
          "type": "string",
          "description": "The issuer can provide a specific closure calendar reference, otherwise the default one from the account template is used."
        },
        "name": {
          "type": "string",
          "description": "The issuer can provide the name of the account.\nRefer to Account.name"
        },
        "iban": {
          "type": "string",
          "description": "Refer to Account.iban\nHas to be provided if the IBAN is configured as mandatory in product configuration.\nIf the IBAN is mandatory and the IBAN is not provided, an error occurs\nIf the IBAN is mandatory and the IBAN is provided, the IBAN checksum is performed. If the check is ko (=invalid IBAN), an errors occurs.\nIf  the IBAN is not mandatory and the IBAN is provided during the account creation, the IBAN is stored as received without any check."
        },
        "ibanOwnerName": {
          "type": "string",
          "description": "Refer to Account.ibanOwnerName\nIf Issuer expects to produce direct debits and outgoing credit transfers, it is recommended the Iban owner name to be always provided, except if the payment processing channel is SEPA and SEPA mandate UMR is provided (comes from another system)."
        },
        "secondIban": {
          "type": "string",
          "description": "Refer to Account.secondIban"
        },
        "bic": {
          "type": "string",
          "description": "Refer to Account.bic"
        },
        "sepaIndicator": {
          "type": "boolean",
          "description": "The issuer can indicate if the payment processing channel is SEPA or not (also valid for outgoing credit transfer processing channel).\nIf payment processing channel is SEPA (SEPA indicator is true) and payment mode is AUTOPAYMENT (Direct debit without confirmation), then SEPA mandate data must be provided.\nSEPA indicator default value is false."
        },
        "sepaMandate": {
          "$ref": "#/$defs/CreateCorporateContractRequestSepaMandate"
        },
        "creditLimitAmount": {
          "description": "The issuer can provide a specific credit limit amount (within the minimum/maximum range defined in the restriction model for the credit limit) to replace the default permanent credit limit value.",
          "allOf": [
            {
              "$ref": "#/$defs/Amount"
            }
          ]
        },
        "accountMembershipNumber1": {
          "type": "string",
          "description": "The issuer can provide the membership number 1 of the account."
        },
        "accountMembershipNumber2": {
          "type": "string",
          "description": "The issuer can provide the membership number 2 of the account."
        },
        "specificFields": {
          "type": "object",
          "description": "The issuer can provide Specific Fields for the new account. \nIt is a list of external data {\"label\":\"value\"} separated by a \",\" related to the account (pass-thru data) that can be provided by e.g. the issuer for information or for usage by other systems.\nExample : {\"label1\":\"value1\",\"label2\":\"value2\"}\nThose provided data have no impact on our system business processes.",
          "additionalProperties": {
            "type": "string"
          }
        },
        "payingAccountType": {
          "type": "string",
          "description": "The paying account type can be provided by the issuer or if not provided it is retrieved from the account template.\nIn case it is mandatory in the issuer configuration then the provided value should be the same than the one provided for the account hierarchy.\n\nPossible values:\n- ROOT_PAYS\n- ITSELF_PAYS\n\nSee examples described for CreateCorporateContractRequest.AccountHierarchy.hierarchyPayingAccountType\n\nIn case no payingAccountType is provided on the account hierarchy, then the possible values are:\n- ROOT_PAYS\n- ITSELF_PAYS\n- ENTITY_PAYS"
        },
        "paymentMode": {
          "type": "string",
          "description": "The payment mode can be provided by the issuer or if not provided it is retrieved from the account template.\n\nPossible values:\n- CARDHOLDER_DETERMINED : customer repays its debt by itself (fund transfer to the issuer)\n- AUTOPAYMENT : customer repays its debt via Direct Debit (issued by issuer and paid automatically after X days)"
        },
        "noOtbCheck": {
          "type": "boolean",
          "description": "The issuer can indicate if the Open-to-buy (OTB) must be checked or not when an authorization (authorization system) or a transaction (clearing) is processed.\nThis can be used when there is no need to check the OTB of an account (e.g. for certain levels of a corporate organization)."
        },
        "resetCreditLimit": {
          "type": "boolean",
          "description": "The issuer can indicate if the Open-to-buy should be reset to its maximum Credit limit at Authorization system side as soon as a account cycle is closed. Of course the amount due (minimum payment amount) is considered as to be repaid by the customer by our solution.\nThe default behavior is retrieved from the contract (Corporate only)"
        },
        "liabilityType": {
          "type": "string",
          "description": "The issuer can provide the liability type of the new account (free text). This liability type can be different for each issuer and is stored in our solution for information purpose (e.g. can be used for reporting), not used by any business process."
        },
        "accountDebitOrderDueDateDelay": {
          "type": "integer",
          "description": "The issuer can provide the debit order due date delay for the new account (number of days). This delay is used to calculate the Direct Debit payment date for each cycle of repayment."
        },
        "requestCorrelationId": {
          "type": "string",
          "description": "Unique alias provided by the issuer for each new account (Conditional).\nDuring the corporate contract creation processing, this alias is used to assign the new account to address usage provided in the request (same value as the value provided in entityRequestCorrelationId defined in the data block CreateCorporateContractRequest.AddressUsage)"
        },
        "creditBureauContractFlag": {
          "type": "boolean",
          "description": "The issuer can specify if the Credit Bureau part of the contract has been signed by the credit card owner (pay later).Only for an employee account."
        },
        "corporateContractAddOnsSubscriptions": {
          "type": "array",
          "description": "The issuer can subscribe to additional services (e.g. new letter, travel insurance)",
          "items": {
            "$ref": "#/$defs/CreateCorporateContractRequestAddOnSubscription"
          }
        },
        "payingEntityAccountIdentifier": {
          "description": "The field is used to identify the corresponding entity when the payingAccountType = 'ENTITY_PAYS'. This field provides the possibility to find the exact entity account by its account identifier.",
          "allOf": [
            {
              "$ref": "#/$defs/AccountIdentifier"
            }
          ]
        },
        "payingEntityCompanyExternalReference": {
          "type": "string",
          "description": "The field is used to identify the corresponding entity when the payingAccountType = 'ENTITY_PAYS'. This field provides the possibility to find the exact entity account by the external reference of the corporate entity."
        },
        "payingAccountEntityLevel": {
          "type": "integer",
          "description": "The field is used to identify the corresponding entity when the payingAccountType = 'ENTITY_PAYS'. This field provides the possibility to find the exact entity account by its level number."
        },
        "workingCurrencyCode": {
          "type": "string",
          "description": "Working currency code of the account\nEx : EUR for Euro, USD for dollar, etc.\n\nThe working currency must be allowed by the product.\nIf not provided, the default currency of the product is set.\nAll accounts of the same account hierarchy must have the same currency. "
        }
      },
      "title": "CreateCorporateContractRequest.Account"
    },
    "CreateCorporateContractRequestAddCorporateVcaServiceCardsAndAccounts": {
      "type": "object",
      "required": [
        "issuerProductExtensionExternalReference",
        "parentCompanyEntityExternalReference"
      ],
      "properties": {
        "issuerProductExtensionExternalReference": {
          "type": "string",
          "description": "The issuer provides the reference of the product extension to be used to add corporate service virtual card and account"
        },
        "parentCompanyEntityExternalReference": {
          "type": "string",
          "description": "The issuer must provide the external reference of the parent company entity under which the VCA service virtual card needs to be created"
        },
        "corporateEmployeeAccounts": {
          "type": "array",
          "description": "Data related to each VCA service virtual card account has to be provided.",
          "items": {
            "$ref": "#/$defs/CreateCorporateContractRequestCorporateEmployeeAccount"
          }
        },
        "companyEntityExternalReference": {
          "type": "string",
          "description": "The issuer must provide the value of the external reference of the company entity."
        },
        "corporateEmployeeVcaServiceCards": {
          "type": "array",
          "description": "Data related to the corporate VCA service card accounts to be provided",
          "items": {
            "$ref": "#/$defs/CreateCorporateContractRequestCorporateVcaServiceCard"
          }
        }
      },
      "title": "CreateCorporateContractRequest.AddCorporateVcaServiceCardsAndAccounts"
    },
    "CreateCorporateContractRequestAddOnParameter": {
      "type": "object",
      "properties": {
        "reference": {
          "type": "string",
          "description": "Refer to AddOnServiceParameter.reference"
        },
        "value": {
          "type": "string",
          "description": "Refer to AddOnServiceParameter.value"
        }
      },
      "title": "CreateCorporateContractRequest.AddOnParameter"
    },
    "CreateCorporateContractRequestAddOnSubscription": {
      "type": "object",
      "properties": {
        "addonReference": {
          "type": "string",
          "description": "Refer to AddOnSubscription.addonReference"
        },
        "subscriptionDate": {
          "type": "string",
          "description": "If provided, this date will be used as the starting date of the add-on subscription.",
          "format": "date-time"
        },
        "serviceTypeReference": {
          "type": "string",
          "description": "Refer to AddOnSubscription.serviceType"
        },
        "parameters": {
          "type": "array",
          "description": "The issuer can provide a list of parameters related to the addOn.",
          "items": {
            "$ref": "#/$defs/CreateCorporateContractRequestAddOnParameter"
          }
        }
      },
      "title": "CreateCorporateContractRequest.AddOnSubscription"
    },
    "CreateCorporateContractRequestAddress": {
      "type": "object",
      "required": [
        "addressLabel",
        "addressType"
      ],
      "properties": {
        "addressLabel": {
          "type": "string",
          "description": "Refer to Address.addressLabel"
        },
        "addressType": {
          "type": "string",
          "description": "Refer to Address.addressType"
        },
        "postalAddress": {
          "description": "Refer to Address.postalAddress",
          "allOf": [
            {
              "$ref": "#/$defs/CreateAddressRequestMailAddress"
            }
          ]
        },
        "emailAddress": {
          "description": "Refer to Address.eMail",
          "allOf": [
            {
              "$ref": "#/$defs/EmailAddress"
            }
          ]
        },
        "phone": {
          "description": "Refer to Address.phone",
          "allOf": [
            {
              "$ref": "#/$defs/CreateAddressRequestPhoneNumber"
            }
          ]
        },
        "addressUsages": {
          "type": "array",
          "items": {
            "description": "Refer to Address.addressUsages",
            "allOf": [
              {
                "$ref": "#/$defs/CreateCorporateContractRequestAddressUsage"
              }
            ]
          }
        },
        "mainAddress": {
          "type": "boolean",
          "description": "Deprecated"
        },
        "issuerAddressExternalReference": {
          "type": "string",
          "description": "Refer to AddressIdentifier.issuerAddressExternalReference"
        }
      },
      "title": "CreateCorporateContractRequest.Address"
    },
    "CreateCorporateContractRequestAddressUsage": {
      "type": "object",
      "required": [
        "addressUsageName",
        "serviceCode"
      ],
      "properties": {
        "addressUsageName": {
          "type": "string",
          "description": "The business process for which the address usage is defined such as CARD_DELIVERY, PIN_MAILER_DELIVERY, STATEMENT_DELIVERY."
        },
        "entityReference": {
          "type": "string",
          "description": "This field is filled by the User while adding the usage to a particular Address of the Customer. It can be eg a card contract reference, card account reference. It is an optional field."
        },
        "serviceCode": {
          "type": "string",
          "description": "The Service for which the address usage is defined : CARD_SERVICE, ACCOUNT_SERVICE, …"
        },
        "entityRequestCorrelationId": {
          "type": "string",
          "description": "The issuer can provide the correlation id of the new entity (card contract or account) which linked to the address usage (account defined in the data block CreateCorporateContractRequest.Account and card contract defined in the data block CreateCorporateContractRequest.CardContract -  field : requestCorrelationId)."
        },
        "entityType": {
          "type": "string",
          "description": "If a correlation id is filled for an entity reference, the entity type must be provided to indicate if the entity is related to a card contract or to an account.\nPossible values:\n- CARD_CONTRACT\n- ACCOUNT",
          "enum": [
            "ACCOUNT",
            "CARD_CONTRACT"
          ]
        }
      },
      "title": "CreateCorporateContractRequest.AddressUsage"
    },
    "CreateCorporateContractRequestCorporateContractFee": {
      "type": "object",
      "properties": {
        "accountSetupFeeModelReference": {
          "type": "string",
          "description": "Account setup fee model to be used for the account"
        },
        "membershipFeeModelReference": {
          "type": "string",
          "description": "Membership fee model to be used for the account"
        },
        "postingAccountForMembershipFee": {
          "type": "string",
          "description": "The issuer can indicate if the membership fees are paid by the employee (posted to its card account), intermediate entity (posted to the entity account) or by the company (can be posted to the root currently) if the value is different from the default one defined at corporate contract level. \nPossible values:\n- ROOT_ACCOUNT \n- CARD_ACCOUNT\n- ENTITY_ACCOUNT"
        },
        "postingAccountForAccountSetupFee": {
          "type": "string",
          "description": "The issuer can indicate if the account setup fees are paid by the employee (posted to its card account), intermediate entity (posted to the entity account) or by the company (can be posted to the root currently) if the value is different from the default one defined at corporate contract level.\nPossible values:\n- ROOT_ACCOUNT \n- CARD_ACCOUNT\n- ENTITY_ACCOUNT"
        },
        "entityIdentifierMembershipFeePosting": {
          "description": "It is mandatory to provide one of the attributes of this data type in case postingAccountForMembershipFee = ENTITY_ACCOUNT. The issuer will provide the exact entity on which Membership Fee will be posted",
          "allOf": [
            {
              "$ref": "#/$defs/FeePostingEntityIdentifier"
            }
          ]
        },
        "membershipFeePromotionalPeriod": {
          "type": "integer",
          "description": "Membership fee promotional period\nIndicates the period (number of years/months (depending on the frequency defined in the membership fee model)) during which the promotional membership fee amount (if any) is applied from the card creation.\nIf the issuer configuration allows it, it is possible to extend the default promotional period defined in the membership fee model. The value must be greater than the default value and greater than the already passed promotional period."
        },
        "entityIdentifierAccountSetupFeePosting": {
          "description": "It is mandatory to provide one of the attributes of this data type in case postingAccountForAccountSetupFee = ENTITY_ACCOUNT. The issuer will provide the exact entity on which Account Setup Fee will be posted",
          "allOf": [
            {
              "$ref": "#/$defs/FeePostingEntityIdentifier"
            }
          ]
        }
      },
      "title": "CreateCorporateContractRequest.CorporateContractFee"
    },
    "CreateCorporateContractRequestCorporateEmployeeAccount": {
      "type": "object",
      "properties": {
        "deliveryChannel": {
          "description": "The issuer can specify the channel for letter delivery used for this account.\nCurrently, only the values WEB, LETTER or LETTER_AND_WEB can be used.",
          "allOf": [
            {
              "$ref": "#/$defs/DeliveryChannel"
            }
          ]
        },
        "advertisementFlags": {
          "description": "The issuer can specify which advertisement flags are enabled (Email, Letter, Phone, etc.).",
          "allOf": [
            {
              "$ref": "#/$defs/AdvertisementFlags"
            }
          ]
        },
        "waiveFee": {
          "type": "boolean",
          "description": "The issuer can indicate if contract related fees, membership fee and account setup fee, are waived (true) or not (false, by default) for this employee account."
        },
        "postingAccountForMembershipFee": {
          "type": "string",
          "description": "DEPRECATED"
        },
        "postingAccountForAccountSetupFee": {
          "type": "string",
          "description": "DEPRECATED"
        },
        "contractFee": {
          "description": "The issuer can replace both default membership fee and account set up fee models for each account (usually card account). ",
          "allOf": [
            {
              "$ref": "#/$defs/CreateCorporateContractRequestCorporateContractFee"
            }
          ]
        },
        "account": {
          "description": "The issuer must provide data related to the employee account.",
          "allOf": [
            {
              "$ref": "#/$defs/CreateCorporateContractRequestAccount"
            }
          ]
        },
        "entityIdentifierMembershipFeePosting": {
          "description": "DEPRECATED",
          "allOf": [
            {
              "$ref": "#/$defs/FeePostingEntityIdentifier"
            }
          ]
        },
        "entityIdentifierAccountSetupFeePosting": {
          "description": "DEPRECATED",
          "allOf": [
            {
              "$ref": "#/$defs/FeePostingEntityIdentifier"
            }
          ]
        }
      },
      "title": "CreateCorporateContractRequest.CorporateEmployeeAccount"
    },
    "CreateCorporateContractRequestCorporateVcaServiceCard": {
      "type": "object",
      "properties": {
        "vcaServiceCardContract": {
          "$ref": "#/$defs/CreateCorporateContractRequestVcaServiceCardContract"
        }
      },
      "title": "CreateCorporateContractRequest.CorporateVcaServiceCard"
    },
    "CreateCorporateContractRequestCustomer": {
      "type": "object",
      "required": [
        "lastName",
        "firstName",
        "addresses"
      ],
      "properties": {
        "requestCorrelationId": {
          "type": "string",
          "description": "Unique alias provided by the issuer for each new customer.\nDuring the corporate contract creation processing, this alias is used to assign a new customer to certain customer roles (cardholder, contract owner, account owner, guarantor)."
        },
        "issuerCustomerExternalReference": {
          "type": "string",
          "description": "Refer to CustomerIdentifier.issuerCustomerExternalReference"
        },
        "active": {
          "type": "boolean",
          "description": "DEPRECATED"
        },
        "courtesyTitle": {
          "type": "string",
          "description": "Refer to Customer.courtesyTitle"
        },
        "lastName": {
          "type": "string",
          "description": "Refer to Customer.lastName"
        },
        "firstName": {
          "type": "string",
          "description": "Refer to Customer.firstName"
        },
        "onlineRiskCategory": {
          "type": "string",
          "description": "Categorizes the person for online  risk management.\n List of possible values is defined per Issuer (eg.Business, Student, Teenager, Standard).\n Mandatory if no default value is defined"
        },
        "offlineRiskCategory": {
          "type": "string",
          "description": "Categorizes the person for offline risk management.\n List of possible values is defined per Issuer (eg.Business, Student, Teenager, Standard).\n Mandatory if no default value is defined"
        },
        "commercialStatus": {
          "type": "string",
          "description": "Refer to Customer.commercialStatus"
        },
        "customerReference": {
          "type": "string",
          "description": "DEPRECATED"
        },
        "secondFirstName": {
          "type": "string",
          "description": "Refer to Customer.secondFirstName"
        },
        "maidenName": {
          "type": "string",
          "description": "Refer to Customer.maidenName"
        },
        "sex": {
          "type": "string",
          "description": "Refer to Customer.sex"
        },
        "birthDate": {
          "type": "string",
          "description": "Refer to Customer.birthDate",
          "format": "date-time"
        },
        "birthPlace": {
          "type": "string",
          "description": "Refer to Customer.birthPlace"
        },
        "nationality": {
          "type": "string",
          "description": "Refer to Customer.nationality"
        },
        "profession": {
          "type": "string",
          "description": "Refer to Customer.profession"
        },
        "employerName": {
          "type": "string",
          "description": "Refer to Customer.employerName"
        },
        "employerAddress": {
          "type": "string",
          "description": "Refer to Customer.employerAddress"
        },
        "monthlySalary": {
          "type": "string",
          "description": "Refer to Customer.monthlySalary"
        },
        "maritalStatus": {
          "type": "string",
          "description": "Refer to Customer.maritalStatus"
        },
        "preferredCorrespondenceLanguage": {
          "type": "string",
          "description": "Refer to Customer.preferredCorrespondenceLanguage"
        },
        "picture": {
          "type": "string",
          "description": "Refer to Customer.picture"
        },
        "url1": {
          "type": "string",
          "description": "Refer to Customer.url1"
        },
        "url2": {
          "type": "string",
          "description": "Refer to Customer.url2"
        },
        "secretQuestion": {
          "type": "string",
          "description": "Refer to Customer.secretQuestion"
        },
        "secretAnswer": {
          "type": "string",
          "description": "Refer to Customer.secretAnswer"
        },
        "vatNumber": {
          "type": "string",
          "description": "Refer to Customer.vatNumber"
        },
        "vatCountry": {
          "type": "string",
          "description": "Refer to Customer.vatCountry"
        },
        "customerClass": {
          "type": "string",
          "description": "Refer to Customer.customerClass"
        },
        "employee": {
          "type": "boolean",
          "description": "Refer to Customer.employee"
        },
        "partnerExternalReference": {
          "type": "string",
          "description": "Refer to Customer.partnerExternalReference"
        },
        "doNotContact": {
          "type": "boolean",
          "description": "Refer to Customer.doNotContact"
        },
        "specificFields": {
          "type": "object",
          "description": "The issuer can provide Specific Fields for the new customer.\nIt is a list of external data {\"label\":\"value\"} separated by a \",\" related to the customer (pass-thru data) that can be provided by e.g. the issuer for information or for usage by other systems.\nExample : {\"label1\":\"value1\",\"label2\":\"value2\"}\nThose provided data have no impact on our system business processes.",
          "additionalProperties": {
            "type": "string"
          }
        },
        "addresses": {
          "type": "array",
          "description": "The Main postal address (addressLabel as MAIN_POSTAL_ADDRESS)  has to be provided because used as default address by all business processes if no address usage is defined.\n E.g. if no address usage as CARD_DELIVERY is attached to a customer's address then the Main postal address is used as card order delivery address.",
          "items": {
            "$ref": "#/$defs/CreateCorporateContractRequestAddress"
          }
        }
      },
      "title": "CreateCorporateContractRequest.Customer"
    },
    "CreateCorporateContractRequestSepaMandate": {
      "type": "object",
      "description": "The issuer must provide SEPA mandate if payment processing channel is SEPA (SEPA indicator is true) and payment mode is AUTOPAYMENT",
      "required": [
        "mandateContractId"
      ],
      "properties": {
        "mandateContractId": {
          "type": "string",
          "description": "Mandate underlying contract identifier (external reference) used by the issuer. E.g., if the mandate is set up along with the contract creation, it may contain the application number, etc. "
        },
        "debtorId": {
          "type": "string",
          "description": "Deprecated field - not to be used"
        },
        "debtorName": {
          "type": "string",
          "description": "Deprecated field - not to be used"
        },
        "debtorAddressType": {
          "type": "string",
          "description": "Deprecated field - not to be used"
        },
        "debtorPostalAddress": {
          "allOf": [
            {
              "$ref": "#/$defs/SepaMandateMailAddress"
            }
          ],
          "description": "Address lines 1 and 2, street name, building number, post code, town name, country and country subdivision can be provided in certain cases - refer to SEPA rules when debtor's address is required."
        },
        "debtorPhoneNumber": {
          "type": "string",
          "description": "SEPA debtor phone number"
        },
        "debtorEmail": {
          "type": "string",
          "description": "SEPA debtor e-mail"
        },
        "mandateNatureType": {
          "type": "string",
          "description": "SEPA mandate nature type. PAPER_MANDATE is taken as a default.\nList of mandate possible nature types (for future usage only, not to be used):\nCOMPUTING_MIGRATION_NO_SIGNATURE, COMPUTING_MIGRATION_WITH_SIGNATURE, FR_MIGRATION_DOMESTIC_FILES,\nMANDATE_FROMDIGITALIZATION, e_MANDATE, SIGNATURE_MANDATE, MYBANK_e_MANDATE, IDEAL_e_MANDATE"
        },
        "mandateSignDate": {
          "type": "string",
          "description": "The mandate signature date has to be provided except if the SEPA mandate UMR is provided (comes from another system).",
          "format": "date-time"
        },
        "mandateSignCity": {
          "type": "string",
          "description": "SEPA mandate city of signature "
        },
        "sepaMandateUmr": {
          "type": "string",
          "description": "Unique reference to identify the SEPA mandate. Can be provided to our system if mandate is created explicitly by another system."
        },
        "validateMandate": {
          "type": "boolean",
          "description": "Deprecated field - not to be used\nNot to be overridden, as there is a risk for an internal business process."
        },
        "futureMandateExternalReference": {
          "type": "string",
          "description": "Deprecated field - not to be used"
        }
      },
      "title": "CreateCorporateContractRequest.SepaMandate"
    },
    "CreateCorporateContractRequestVcaServiceCard": {
      "type": "object",
      "description": "Card related data to be provided for the creation of the card.",
      "properties": {
        "issuerCardExternalReference": {
          "type": "string",
          "description": "The issuer can provide the external reference for the new card (maximum length is 50 characters). This external reference must be unique per issuer.\nIf not provided, the external reference is calculated by the system if a reference generation algorithm is configured for the issuer else the issuer card external reference will be empty."
        },
        "expiryDate": {
          "type": "string",
          "description": "The issuer can provide the expiry date of the card if allowed by the product configuration (note that the provided expiry date must belong to the range allowed by the product, e.g. [expiry date calculated by our system - 12 months, expiry date calculated by our system + 12 months].\nIf provided and not allowed then an error is raised.\nFormat is MMYY (month and year)."
        },
        "specificFields": {
          "type": "object",
          "description": "The issuer can provide Specific Fields for the new card. \nIt is a list of external data {\"label\":\"value\"} separated by a \",\" related to the card (pass-thru data) that can be provided by e.g. the issuer for information or for usage by other systems.\nExample : {\"label1\":\"value1\",\"label2\":\"value2\"}\nThose provided data have no impact on our system business processes.",
          "additionalProperties": {
            "type": "string"
          }
        }
      },
      "title": "CreateCorporateContractRequest.VcaServiceCard"
    },
    "CreateCorporateContractRequestVcaServiceCardContract": {
      "type": "object",
      "description": "Data related to each VCA service virtual card contract needs to be provided",
      "properties": {
        "issuerCardContractExternalReference": {
          "type": "string",
          "description": "The issuer can provide the external reference for the new card contract."
        },
        "cardHolderRequestCorrelationId": {
          "type": "string",
          "description": "Not to be provided if the cardholder is the same as the account owner of the default account of the card.\nOtherwise the issuer can provide the correlation id of the new customer which represent the cardholder (defined in the data block CreateCorporateContractRequest.Customer)."
        },
        "cardHolderIdentifier": {
          "description": "Not to be provided if the cardholder is the same as the account owner of the default account of the card.\nIf the cardholder already exists in our system then the issuer has to provide the customer reference or the issuer external customer reference of the existing customer.\nIf the cardholder does not exist in our system then cardholderRequestCorrelationId has to be filled.",
          "allOf": [
            {
              "$ref": "#/$defs/CustomerIdentifier"
            }
          ]
        },
        "issuerBranchCode": {
          "type": "string",
          "description": "The issuer can provide the issuer branch code of the card contract. If not provided, then the contract issuer branch code is used."
        },
        "selectedModels": {
          "type": "array",
          "description": "The issuer can replace one or several card contract models by providing new card contract model references, otherwise the default ones from the card contract template are used.\n List of possible models that can be replaced:\n • EVENT_FEE_MODEL \n • DISTRIBUTION_MODEL \n • CARD_CREATION_MODEL \n • TECHNOLOGY_AND_APPLICATION_MODEL ",
          "items": {
            "$ref": "#/$defs/CardContractModel"
          }
        },
        "specificFields": {
          "type": "object",
          "description": "The issuer can provide Specific Fields for the new card contract.\nIt is a list of external data {\"label\":\"value\"} separated by a \",\" related to the card contract (pass-thru data) that can be provided by e.g. the issuer for information or for usage by other systems.\nExample : {\"label1\":\"value1\",\"label2\":\"value2\"}\nThose provided data have no impact on our system business processes.",
          "additionalProperties": {
            "type": "string"
          }
        },
        "vcaServiceCard": {
          "$ref": "#/$defs/CreateCorporateContractRequestVcaServiceCard"
        },
        "forcedEmbossingName": {
          "type": "string",
          "description": "The first line of the name to be embossed on the physical card for the new card can be provided.\nThe character \"*\" is not allowed in the line 1 of the embossing name.\nDefault value is set to \"VCAForcedname\""
        },
        "cardClass": {
          "type": "string",
          "description": "Card class for the new card"
        },
        "corporateContractAddOnsSubscriptions": {
          "type": "array",
          "description": "The issuer can subscribe to additional services (e.g. new letter, travel insurance)",
          "items": {
            "$ref": "#/$defs/CreateCorporateContractRequestAddOnSubscription"
          }
        }
      },
      "title": "CreateCorporateContractRequest.VcaServiceCardContract"
    },
    "CustomerIdentifier": {
      "type": "object",
      "description": "Identification of the updated customer either by Issuer customer external reference or by customer reference",
      "properties": {
        "customerReference": {
          "type": "string",
          "description": "Reference computed internally by our system"
        },
        "issuerCustomerExternalReference": {
          "type": "string",
          "description": "Reference provided by the Issuer"
        }
      },
      "title": "CustomerIdentifier"
    },
    "DeliveryChannel": {
      "type": "object",
      "properties": {
        "contractLetterType": {
          "type": "string",
          "description": "Delivery channel used for card contract letters (optional) \nPossible values: EMAIL, WEB, LETTER, LETTER_AND_WEB, PUSH and MOBILE_APP",
          "enum": [
            "EMAIL",
            "WEB",
            "LETTER",
            "LETTER_AND_WEB",
            "PUSH",
            "MOBILE_APP"
          ]
        },
        "disputeLetterType": {
          "type": "string",
          "description": "Delivery channel used for dispute letters (optional) \nPossible values: EMAIL, WEB, LETTER, LETTER_AND_WEB, PUSH and MOBILE_APP",
          "enum": [
            "EMAIL",
            "WEB",
            "LETTER",
            "LETTER_AND_WEB",
            "PUSH",
            "MOBILE_APP"
          ]
        },
        "statementType": {
          "type": "string",
          "description": "Delivery channel used for statements (optional) \nPossible values: EMAIL, WEB, LETTER, LETTER_AND_WEB, PUSH and MOBILE_APP",
          "enum": [
            "EMAIL",
            "WEB",
            "LETTER",
            "LETTER_AND_WEB",
            "PUSH",
            "MOBILE_APP"
          ]
        }
      },
      "description": "Specify the channel for letter delivery used for this contract",
      "title": "DeliveryChannel"
    },
    "EmailAddress": {
      "type": "object",
      "required": [
        "email"
      ],
      "properties": {
        "email": {
          "type": "string",
          "description": "Email address of the Customer (mandatory). The email address should have the following format: aaa@bbb.ccc\naaa, bbb, ccc are character string."
        }
      },
      "title": "EmailAddress"
    },
    "FeePostingEntityIdentifier": {
      "type": "object",
      "properties": {
        "postingEntityAccountIdentifier": {
          "description": "The account identifier of the entity on which Membership Fee or Account setup Fee will be posted",
          "allOf": [
            {
              "$ref": "#/$defs/AccountIdentifier"
            }
          ]
        },
        "postingEntityCompanyExternalReference": {
          "type": "string",
          "description": "The external reference of the entity, provided by the Company, on which Membership Fee or Account setup Fee will be posted"
        },
        "postingEntityLevel": {
          "type": "integer",
          "description": "The corporate entitity level number on which Membership Fee or Account setup Fee will be posted"
        }
      },
      "title": "FeePostingEntityIdentifier"
    },
    "SepaMandateMailAddress": {
      "type": "object",
      "properties": {
        "typeCode": {
          "type": "string",
          "description": "DEPRECATED"
        },
        "line1": {
          "type": "string",
          "description": "Address line 1 (conditional). Free text. A specific issuer algorithm can be activated to e.g. build the line, apply controls (e.g. length restriction)."
        },
        "line2": {
          "type": "string",
          "description": "Address line 2 (conditional). Free text. A specific issuer algorithm can be activated to e.g. build the line, apply controls (e.g. length restriction)."
        },
        "line3": {
          "type": "string",
          "description": "Address line 3 (conditional). Free text. A specific issuer algorithm can be activated to e.g. build the line, apply controls (e.g. length restriction)."
        },
        "line4": {
          "type": "string",
          "description": "Address line 4 (conditional). Free text. A specific issuer algorithm can be activated to e.g. build the line, apply controls (e.g. length restriction)."
        },
        "line5": {
          "type": "string",
          "description": "Address line 5 (conditional). Free text. A specific issuer algorithm can be activated to e.g. build the line, apply controls (e.g. length restriction)."
        },
        "buildingNumber": {
          "type": "string",
          "description": "Building number of the address (optional)"
        },
        "boxNumber": {
          "type": "string",
          "description": "Box number of the address (optional)"
        },
        "streetName": {
          "type": "string",
          "description": "Street name of the address (optional)"
        },
        "postCode": {
          "type": "string",
          "description": "zip code of the address (optional)"
        },
        "townName": {
          "type": "string",
          "description": "City corresponding to the address"
        },
        "countrySubdivision": {
          "type": "string",
          "description": "Subdivision of the country (optional)"
        },
        "country": {
          "type": "string",
          "description": "Code of the country.Free text."
        }
      },
      "title": "SepaMandateMailAddress"
    }
  }
}