{
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "$id": "https://raw.githubusercontent.com/api-evangelist/wordline/main/json-schema/wordline-add-corporate-contract-entity-request-schema.json",
  "title": "AddCorporateContractEntityRequest",
  "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/AddCorporateContractEntityRequest",
  "type": "object",
  "required": [
    "addCorporateContractEntity"
  ],
  "properties": {
    "customers": {
      "description": "The issuer has to provide all new customers (as person) 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 contract creation request is denied\n- must provide mandatory fields and a correlation id that can be used in the contract part to assign the customer, not yet created in our system, as contract owner, root or card account owner, cardholder, etc",
      "type": "array",
      "items": {
        "$ref": "#/$defs/CreateCorporateContractRequestCustomer"
      }
    },
    "companies": {
      "description": "The issuer has to provide companies which don't already exist in our system in a dedicated list (companies).\nFor each new company, the issuer :\n- can provide an unique external reference: whether this external reference is already assigned to an existing company for this issuer in our system then the contract creation request is denied\n- must provide mandatory fields and a correlation id that can be used in the contract part to assign the company, not yet created in our system, as contract owner, root or card account owner etc",
      "type": "array",
      "items": {
        "$ref": "#/$defs/CreateCorporateContractRequestCompany"
      }
    },
    "addCorporateContractEntity": {
      "description": "It is possible to add an entity (e.g. country, division, department) into the company organization of an existing corporate contract (configured in a product extension).",
      "allOf": [
        {
          "$ref": "#/$defs/CreateCorporateContractRequestAddCorporateContractEntity"
        }
      ]
    }
  },
  "$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"
    },
    "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"
    },
    "CreateCorporateContractRequestAddCorporateContractEntity": {
      "type": "object",
      "required": [
        "issuerProductExtensionExternalReference",
        "level",
        "companyEntityExternalReference",
        "parentCompanyEntityExternalReference",
        "corporateContractEntityAccounts"
      ],
      "properties": {
        "issuerProductExtensionExternalReference": {
          "type": "string",
          "description": "The issuer provides the reference of the product extension to be used to add a new entity in the company organization."
        },
        "level": {
          "type": "integer",
          "description": "The issuer must provide the level number of the new entity in the company organization (e.g. 2 corresponding to country). \nThe level must be greater than 1 (the level 1 being the root entity level)."
        },
        "companyEntityExternalReference": {
          "type": "string",
          "description": "The issuer must provide the external reference of the new entity within the company organization (e.g. a code representing the country: FRAN for France). This reference is unique in the corporate contract."
        },
        "parentCompanyEntityExternalReference": {
          "type": "string",
          "description": "The issuer must provide the external reference of the parent entity to which the entity has to be attached. "
        },
        "deliveryChannel": {
          "description": "The issuer can specify the channel for letter delivery used for the entity (corresponding to an entity of the company organization except the root entity).\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.) used for the entity (corresponding to an entity of the company organization except the root entity).",
          "allOf": [
            {
              "$ref": "#/$defs/AdvertisementFlags"
            }
          ]
        },
        "corporateContractEntityAccounts": {
          "type": "array",
          "description": "The issuer must provide the list of accounts for the new entity.",
          "items": {
            "$ref": "#/$defs/CreateCorporateContractRequestCorporateContractEntityAccount"
          }
        }
      },
      "title": "CreateCorporateContractRequest.AddCorporateContractEntity"
    },
    "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"
    },
    "CreateCorporateContractRequestCompany": {
      "type": "object",
      "required": [
        "corporateName",
        "commercialStatus",
        "addresses"
      ],
      "properties": {
        "requestCorrelationId": {
          "type": "string",
          "description": "Unique alias provided by the issuer for each new company. During the contract creation processing, this alias is used to assign a new company to certain company roles (contract owner, account owner, guarantor)."
        },
        "issuerCustomerExternalReference": {
          "type": "string",
          "description": "Customer (as company) identifier provided by the Issuer"
        },
        "active": {
          "type": "boolean",
          "description": "DEPRECATED"
        },
        "corporateName": {
          "type": "string",
          "description": "Refer to Company.corporateName"
        },
        "nationalFiscalIdentifier": {
          "type": "string",
          "description": "Refer to Company.nationalFiscalIdentifier"
        },
        "vatCode": {
          "type": "string",
          "description": "Refer to Company.vatCode"
        },
        "type": {
          "type": "string",
          "description": "Refer to Company.type"
        },
        "size": {
          "type": "string",
          "description": "Refer to Company.size"
        },
        "businessArea": {
          "type": "string",
          "description": "Refer to Company.businessArea"
        },
        "activityCode": {
          "type": "string",
          "description": "Refer to Company.activityCode"
        },
        "revenue": {
          "type": "string",
          "description": "Refer to Company.revenue"
        },
        "legalForm": {
          "type": "string",
          "description": "Refer to Company.legalForm"
        },
        "commercialStatus": {
          "type": "string",
          "description": "Refer to Company.commercialStatus"
        },
        "preferredCorrespondenceLanguage": {
          "type": "string",
          "description": "Refer to Company.preferredCorrespondenceLanguage."
        },
        "specificFields": {
          "type": "object",
          "description": "The issuer can provide Specific Fields for the new company. \nIt is a list of external data {\"label\":\"value\"} separated by a \",\" related to the company (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 Head office (addressLabel as HEAD_OFFICE )  has to be provided because used as default address by all business processes if no address usage is defined.",
          "items": {
            "$ref": "#/$defs/CreateCorporateContractRequestAddress"
          }
        },
        "contacts": {
          "type": "array",
          "description": "The issuer can provide data related to the contacts of the company.",
          "items": {
            "$ref": "#/$defs/CreateCorporateContractRequestContact"
          }
        }
      },
      "title": "CreateCorporateContractRequest.Company"
    },
    "CreateCorporateContractRequestContact": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "description": "The contact name has to be provided if the department name is not provided."
        },
        "firstName": {
          "type": "string",
          "description": "Refer to Contact.firstName"
        },
        "departmentName": {
          "type": "string",
          "description": "The department name has to be provided if the contact name is not provided."
        },
        "sex": {
          "type": "string",
          "description": "Refer to Contact.sex"
        },
        "description": {
          "type": "string",
          "description": "Refer to Contact.description"
        },
        "courtesyTitle": {
          "type": "string",
          "description": "Refer to Contact.courtesyTitle"
        },
        "birthDate": {
          "type": "string",
          "format": "date-time",
          "description": "Refer to Contact.birthDate"
        },
        "postalAddress": {
          "description": "Refer to Contact.postalAddress",
          "allOf": [
            {
              "$ref": "#/$defs/CreateAddressRequestMailAddress"
            }
          ]
        }
      },
      "title": "CreateCorporateContractRequest.Contact"
    },
    "CreateCorporateContractRequestCorporateContractEntityAccount": {
      "type": "object",
      "properties": {
        "account": {
          "description": "Data related to each account have to be provided.",
          "allOf": [
            {
              "$ref": "#/$defs/CreateCorporateContractRequestAccount"
            }
          ]
        }
      },
      "title": "CreateCorporateContractRequest.CorporateContractEntityAccount"
    },
    "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"
    },
    "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"
    },
    "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"
    }
  }
}