UK Open Banking · Schema
OBL VRP Profile
VRP OpenAPI Specification. **Please Note**: There are no optional fields, if a field is not marked as “Required” it is a Conditional field.
Open BankingFinancial ServicesPaymentsAccount InformationPSD2UKBankingFintechRegulated
JSON Schema
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://raw.githubusercontent.com/api-evangelist/open-banking-uk/refs/heads/main/json-schema/vrp.json",
"title": "OBL VRP Profile",
"description": "VRP OpenAPI Specification.\n\n**Please Note**: There are no optional fields, if a field is not marked as \u201cRequired\u201d it is a Conditional field.\n",
"version": "4.0.1",
"$defs": {
"OBDomesticRefundAccount1": {
"description": "Unambiguous identification of the refund account to which a refund will be made as a result of the transaction.",
"type": "object",
"additionalProperties": false,
"required": [
"Account"
],
"properties": {
"Account": {
"type": "object",
"additionalProperties": false,
"required": [
"SchemeName",
"Identification",
"Name"
],
"description": "Provides the details to identify an account.",
"properties": {
"SchemeName": {
"$ref": "#/components/schemas/OBInternalAccountIdentification4Code"
},
"Identification": {
"$ref": "#/components/schemas/Identification_0"
},
"Name": {
"description": "Name of the account, as assigned by the account servicing institution.\nUsage: The account name is the name or names of the account owner(s) represented at an account level. The account name is not the product name or the nickname of the account.\nOB: ASPSPs may carry out name validation for Confirmation of Payee, but it is not mandatory.",
"type": "string",
"minLength": 1,
"maxLength": 350
},
"SecondaryIdentification": {
"$ref": "#/components/schemas/SecondaryIdentification"
}
}
}
}
},
"SecondaryIdentification": {
"description": "This is secondary identification of the account, as assigned by the account servicing institution. \nThis can be used by building societies to additionally identify accounts with a roll number (in addition to a sort code and account number combination).",
"type": "string",
"minLength": 1,
"maxLength": 34
},
"OBUltimateCreditor1": {
"description": "Ultimate party to which an amount of money is due.",
"type": "object",
"properties": {
"Name": {
"description": "Name by which a party is known and which is usually used to identify that party.",
"type": "string",
"minLength": 1,
"maxLength": 140
},
"Identification": {
"description": "Identification assigned by an institution.",
"type": "string",
"minLength": 1,
"maxLength": 256
},
"LEI": {
"$ref": "#/components/schemas/LEI"
},
"SchemeName": {
"$ref": "#/components/schemas/OBInternalAccountIdentification4Code"
},
"PostalAddress": {
"$ref": "#/components/schemas/OBPostalAddress7"
}
}
},
"OBUltimateDebtor1": {
"description": "Ultimate party that owes an amount of money to the (ultimate) creditor.",
"type": "object",
"properties": {
"Name": {
"description": "Name by which a party is known and which is usually used to identify that party.",
"type": "string",
"minLength": 1,
"maxLength": 140
},
"Identification": {
"description": "Identification assigned by an institution.",
"type": "string",
"minLength": 1,
"maxLength": 256
},
"LEI": {
"$ref": "#/components/schemas/LEI"
},
"SchemeName": {
"$ref": "#/components/schemas/OBInternalAccountIdentification4Code"
},
"PostalAddress": {
"$ref": "#/components/schemas/OBPostalAddress7"
}
}
},
"OBBranchAndFinancialInstitutionIdentification6_0": {
"type": "object",
"description": "Party that manages the account on behalf of the account owner, that is manages the registration and booking of entries on the account, calculates balances on the account and provides information about the account. This is the servicer of the beneficiary account.",
"properties": {
"SchemeName": {
"$ref": "#/components/schemas/OBInternalFinancialInstitutionIdentification4Code"
},
"Identification": {
"$ref": "#/components/schemas/Identification_1"
},
"Name": {
"$ref": "#/components/schemas/Name_1"
},
"PostalAddress": {
"$ref": "#/components/schemas/OBPostalAddress7"
},
"LEI": {
"$ref": "#/components/schemas/LEI"
}
}
},
"LEI": {
"description": "Legal entity identification as an alternate identification for a party. Legal Entity Identifier is a code allocated to a party as described in ISO 17442 \"Financial Services - Legal Entity Identifier (LEI)\".",
"type": "string",
"example": "IZ9Q00LZEVUKWCQY6X15",
"minLength": 1,
"maxLength": 20,
"pattern": "^[A-Z0-9]{18,18}[0-9]{2,2}$"
},
"Name_1": {
"description": "Name by which an agent is known and which is usually used to identify that agent.",
"type": "string",
"minLength": 1,
"maxLength": 140
},
"Identification_0": {
"description": "Identification assigned by an institution to identify an account. This identification is known by the account owner.",
"type": "string",
"minLength": 1,
"maxLength": 256
},
"Identification_1": {
"description": "Unique and unambiguous identification of the servicing institution.",
"type": "string",
"minLength": 1,
"maxLength": 35
},
"OBProxy1": {
"description": "Specifies an alternate assumed name for the identification of the account.",
"type": "object",
"required": [
"Identification",
"Code"
],
"properties": {
"Identification": {
"description": "Identification used to indicate the account identification under another specified name.",
"type": "string",
"minLength": 1,
"maxLength": 2048
},
"Code": {
"$ref": "#/components/schemas/ExternalProxyAccountType1Code"
},
"Type": {
"type": "string",
"description": "Type of the proxy identification.",
"minLength": 1,
"maxLength": 35
}
}
},
"ExternalProxyAccountType1Code": {
"description": "Specifies the external proxy account type code, as published in the proxy account type external code set.<br /> For a full list of values see `ExternalProxyAccountType1Code` in *ISO_External_CodeSet* [here](https://github.com/OpenBankingUK/External_Internal_CodeSets)",
"type": "string",
"enum": [
"TELE",
"EMAL",
"DNAM",
"CINC",
"COTX",
"COID",
"CUST",
"DRLC",
"EIDN",
"EWAL",
"PVTX",
"LEIC",
"MBNO",
"NIDN",
"CCPT",
"SHID",
"SOSE",
"TOKN",
"UBIL",
"VIPN",
"BIID"
]
},
"OBError1": {
"type": "object",
"properties": {
"ErrorCode": {
"$ref": "#/components/schemas/OBExternalStatusReason1Code"
},
"Message": {
"description": "A description of the error that occurred. e.g., 'A mandatory field isn't supplied' or 'RequestedExecutionDateTime must be in future'\nOBL doesn't standardise this field",
"type": "string",
"minLength": 1,
"maxLength": 500
},
"Path": {
"description": "Recommended but optional reference to the JSON Path of the field with error, e.g., Data.Initiation.InstructedAmount.Currency",
"type": "string",
"minLength": 1,
"maxLength": 500
},
"Url": {
"description": "URL to help remediate the problem, or provide more information, or to API Reference, or help etc",
"type": "string"
}
},
"required": [
"ErrorCode"
],
"additionalProperties": false,
"minProperties": 1
},
"OBErrorResponse1": {
"description": "An array of detail error codes, and messages, and URLs to documentation to help remediation.",
"type": "object",
"additionalProperties": false,
"properties": {
"Id": {
"description": "A unique reference for the error instance, for audit purposes, in case of unknown/unclassified errors.",
"type": "string",
"minLength": 1,
"maxLength": 40
},
"Code": {
"description": "Deprecated <br>High level textual error code, to help categorise the errors.",
"type": "string",
"minLength": 1,
"example": "400 BadRequest",
"maxLength": 40
},
"Message": {
"description": "Deprecated <br>Brief Error message",
"type": "string",
"minLength": 1,
"example": "There is something wrong with the request parameters provided",
"maxLength": 500
},
"Errors": {
"items": {
"$ref": "#/components/schemas/OBError1"
},
"type": "array",
"minItems": 1
}
},
"required": [
"Errors"
]
},
"OBExternalStatusReason1Code": {
"description": "Low level textual error code, for all enum values see `OBExternalStatusReason1Code` in *OB_Internal_CodeSet* [here](https://github.com/OpenBankingUK/External_Internal_CodeSets)",
"type": "string",
"minLength": 4,
"maxLength": 4,
"example": "U001"
},
"OBDomesticVRPConsentResponse": {
"type": "object",
"required": [
"Data",
"Risk"
],
"properties": {
"Data": {
"type": "object",
"required": [
"ConsentId",
"CreationDateTime",
"Status",
"StatusUpdateDateTime",
"ControlParameters",
"Initiation"
],
"properties": {
"ReadRefundAccount": {
"type": "string",
"enum": [
"Yes",
"No"
],
"description": "Indicates whether information about RefundAccount should be included in the payment response.\n"
},
"ConsentId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Unique identification as assigned by the ASPSP to uniquely identify the consent resource.\n"
},
"CreationDateTime": {
"type": "string",
"format": "date-time",
"description": "Date and time at which the resource was created.\n"
},
"Status": {
"$ref": "#/components/schemas/OBInternalConsentStatus1Code"
},
"StatusReason": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OBStatusReason"
}
},
"StatusUpdateDateTime": {
"type": "string",
"format": "date-time",
"description": "Date and time at which the resource status was updated.\n"
},
"ControlParameters": {
"$ref": "#/components/schemas/OBDomesticVRPControlParameters"
},
"Initiation": {
"$ref": "#/components/schemas/OBDomesticVRPInitiation"
},
"DebtorAccount": {
"allOf": [
{
"$ref": "#/components/schemas/OBCashAccountDebtorWithName"
},
{
"description": "The DebtorAccount details as specified by the PSU when account selection happens at the ASPSP. *Note:* The details must be provided in the consent response (OBDomesticVRPConsentResponse) by the ASPSP to enable the PISP to associate it with future VRP payments that are made using the VRP Consent."
}
]
}
}
},
"Risk": {
"$ref": "#/components/schemas/OBRisk1"
},
"Links": {
"$ref": "#/components/schemas/Links"
},
"Meta": {
"$ref": "#/components/schemas/Meta"
}
}
},
"OBInternalConsentStatus1Code": {
"description": "Specifies the status of consent resource in code form. Only AWAU and RJCT can be returned on initial submission. For a full list of values see `OBInternalConsentStatus1Code` in *OB_Internal_CodeSet* [here](https://github.com/OpenBankingUK/External_Internal_CodeSets)",
"type": "string",
"enum": [
"AWAU",
"RJCT",
"AUTH",
"CANC",
"EXPD"
]
},
"OBDomesticVRPConsentRequest": {
"type": "object",
"required": [
"Data",
"Risk"
],
"properties": {
"Data": {
"type": "object",
"required": [
"ControlParameters",
"Initiation"
],
"properties": {
"ReadRefundAccount": {
"type": "string",
"enum": [
"Yes",
"No"
],
"description": "Indicates whether the `RefundAccount` object should be included in the response\n"
},
"ControlParameters": {
"$ref": "#/components/schemas/OBDomesticVRPControlParameters"
},
"Initiation": {
"$ref": "#/components/schemas/OBDomesticVRPInitiation"
}
}
},
"Risk": {
"$ref": "#/components/schemas/OBRisk1"
}
}
},
"OBDomesticVRPControlParameters": {
"type": "object",
"required": [
"VRPType",
"PSUAuthenticationMethods",
"MaximumIndividualAmount",
"PeriodicLimits"
],
"properties": {
"ValidFromDateTime": {
"type": "string",
"format": "date-time",
"description": "^ Start date time for which the consent remains valid."
},
"ValidToDateTime": {
"type": "string",
"format": "date-time",
"description": "^ End date time for which the consent remains valid."
},
"MaximumIndividualAmount": {
"$ref": "#/components/schemas/OBActiveOrHistoricCurrencyAndAmount"
},
"PeriodicLimits": {
"type": "array",
"minItems": 1,
"items": {
"type": "object",
"required": [
"PeriodType",
"PeriodAlignment",
"Amount",
"Currency"
],
"properties": {
"PeriodType": {
"type": "string",
"enum": [
"Day",
"Week",
"Fortnight",
"Month",
"Half-year",
"Year"
],
"description": "^ Period type for this period limit"
},
"PeriodAlignment": {
"type": "string",
"enum": [
"Consent",
"Calendar"
],
"description": "Specifies whether the period starts on the date of consent creation or lines up with a calendar. As the ISO calendar does not support or provide any guidance on when a fortnight should start, when specifying a `PeriodType` of `Fortnight` the `PeriodAlignment` must be `Consent`."
},
"Amount": {
"$ref": "#/components/schemas/OBActiveCurrencyAndAmount_SimpleType"
},
"Currency": {
"$ref": "#/components/schemas/ActiveOrHistoricCurrencyCode"
}
}
}
},
"VRPType": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OBVRPConsentType"
},
"minItems": 1,
"description": "^ The types of payments that can be made under this VRP consent. This can be used to indicate whether this includes sweeping payments or other ecommerce payments."
},
"PSUAuthenticationMethods": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OBVRPAuthenticationMethods"
},
"minItems": 1,
"description": "^ Indicates that the PSU authentication methods supported."
},
"PSUInteractionTypes": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OBVRPInteractionTypes"
},
"description": "Indicates interaction type, currently if customer is present or not present. If not provided the default is `OffSession` (the customer is not present) when the individual VRP payment is made."
},
"SupplementaryData": {
"type": "object",
"description": "^ Additional information that cannot be captured in the structured fields and/or any other specific block"
}
}
},
"OBDomesticVRPInitiation": {
"type": "object",
"properties": {
"DebtorAccount": {
"$ref": "#/components/schemas/OBCashAccountDebtorWithName"
},
"CreditorAccount": {
"$ref": "#/components/schemas/OBCashAccountCreditor3"
},
"CreditorPostalAddress": {
"$ref": "#/components/schemas/OBPostalAddress7"
},
"UltimateCreditor": {
"$ref": "#/components/schemas/OBUltimateCreditor1"
},
"UltimateDebtor": {
"$ref": "#/components/schemas/OBUltimateDebtor1"
},
"RemittanceInformation": {
"$ref": "#/components/schemas/OBRemittanceInformation2"
},
"RegulatoryReporting": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OBRegulatoryReporting1"
},
"maxItems": 10
}
}
},
"OBCashAccountDebtorWithName": {
"type": "object",
"required": [
"SchemeName",
"Identification"
],
"properties": {
"SchemeName": {
"$ref": "#/components/schemas/OBInternalAccountIdentification4Code"
},
"Identification": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "^ Identification assigned by an institution to identify an account. This identification is known by the account owner."
},
"Name": {
"type": "string",
"minLength": 1,
"maxLength": 350,
"description": "^ Name of the account, as assigned by the account servicing institution. Usage The account name is the name or names of the account owner(s) represented at an account level. The account name is not the product name or the nickname of the account."
},
"SecondaryIdentification": {
"type": "string",
"minLength": 1,
"maxLength": 34,
"description": "^ This is secondary identification of the account, as assigned by the account servicing institution. This can be used by building societies to additionally identify accounts with a roll number (in addition to a sort code and account number combination)"
},
"Proxy": {
"$ref": "#/components/schemas/OBProxy1"
}
}
},
"OBCashAccountCreditor3": {
"type": "object",
"required": [
"SchemeName",
"Identification",
"Name"
],
"properties": {
"SchemeName": {
"$ref": "#/components/schemas/OBInternalAccountIdentification4Code"
},
"Identification": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Identification assigned by an institution to identify an account. This identification is known by the account owner."
},
"Name": {
"type": "string",
"minLength": 1,
"maxLength": 70,
"description": "Name of the account, as assigned by the account servicing institution.\nUsage: the account name is the name or names of the account owner(s) represented at an account level.\nThe account name is not the product name or the nickname of the account."
},
"SecondaryIdentification": {
"type": "string",
"minLength": 1,
"maxLength": 34,
"description": "This is secondary identification of the account, as assigned by the account servicing institution.\nThis can be used by building societies to additionally identify accounts with a roll number (in addition to a sort code and account number combination)"
},
"Proxy": {
"$ref": "#/components/schemas/OBProxy1"
}
}
},
"OBBranchAndFinancialInstitutionIdentification6": {
"type": "object",
"properties": {
"SchemeName": {
"$ref": "#/components/schemas/OBInternalFinancialInstitutionIdentification4Code"
},
"Identification": {
"type": "string",
"minLength": 1,
"maxLength": 35,
"description": "^ Unique and unambiguous identification of a financial institution or a branch of a financial institution."
},
"Name": {
"type": "string",
"minLength": 1,
"maxLength": 140,
"description": "^ Name by which an agent is known and which is usually used to identify that agent."
},
"LEI": {
"$ref": "#/components/schemas/LEI"
},
"PostalAddress": {
"$ref": "#/components/schemas/OBPostalAddress7"
}
}
},
"OBDomesticVRPRequest": {
"type": "object",
"required": [
"Data",
"Risk"
],
"properties": {
"Data": {
"type": "object",
"required": [
"ConsentId",
"PSUAuthenticationMethod",
"VRPType",
"Initiation",
"Instruction"
],
"properties": {
"ConsentId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Identifier for the Domestic VRP Consent that this payment is made under."
},
"PSUAuthenticationMethod": {
"allOf": [
{
"$ref": "#/components/schemas/OBVRPAuthenticationMethods"
},
{
"description": "The authentication method that was used to authenticate the PSU."
}
]
},
"PSUInteractionType": {
"allOf": [
{
"$ref": "#/components/schemas/OBVRPInteractionTypes"
},
{
"description": "Indicates interaction type, currently if customer is present or not present. If not provided the default is `OffSession` (customer is not present) when the individual VRP payment is made."
}
]
},
"VRPType": {
"$ref": "#/components/schemas/OBVRPConsentType"
},
"Initiation": {
"$ref": "#/components/schemas/OBDomesticVRPInitiation"
},
"Instruction": {
"$ref": "#/components/schemas/OBDomesticVRPInstruction"
}
}
},
"Risk": {
"$ref": "#/components/schemas/OBRisk1"
}
}
},
"OBDomesticVRPResponse": {
"type": "object",
"required": [
"Data",
"Risk"
],
"properties": {
"Data": {
"type": "object",
"required": [
"DomesticVRPId",
"ConsentId",
"CreationDateTime",
"Status",
"StatusUpdateDateTime",
"Initiation",
"Instruction"
],
"description": "`Data.Refund` only included in the response if `Data.ReadRefundAccount` is set to `Yes` in the consent.\n",
"properties": {
"DomesticVRPId": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "Unique identification as assigned by the ASPSP to uniquely identify the domestic payment resource.\n"
},
"ConsentId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Identifier for the Domestic VRP Consent that this payment is made under.\n"
},
"CreationDateTime": {
"type": "string",
"format": "date-time",
"description": "Date and time at which the resource was created.\n"
},
"Status": {
"$ref": "#/components/schemas/ExternalPaymentTransactionStatus5Code"
},
"StatusReason": {
"type": "array",
"items": {
"$ref": "#/components/schemas/OBStatusReason"
}
},
"StatusUpdateDateTime": {
"type": "string",
"format": "date-time",
"description": "Date and time at which the resource status was updated.\n"
},
"ExpectedExecutionDateTime": {
"type": "string",
"format": "date-time",
"description": "Expected execution date and time for the payment resource.\n"
},
"ExpectedSettlementDateTime": {
"type": "string",
"format": "date-time",
"description": "Expected settlement date and time for the payment resource.\n"
},
"Refund": {
"$ref": "#/components/schemas/OBDomesticRefundAccount1"
},
"Charges": {
"type": "array",
"items": {
"required": [
"Amount",
"ChargeBearer",
"Type"
],
"type": "object",
"properties": {
"ChargeBearer": {
"$ref": "#/components/schemas/OBInternalChargeBearerType1Code"
},
"Type": {
"$ref": "#/components/schemas/OBInternalPaymentChargeType1Code"
},
"Amount": {
"$ref": "#/components/schemas/OBActiveOrHistoricCurrencyAndAmount"
}
},
"description": "Set of elements used to provide details of a charge for the payment initiation."
}
},
"Initiation": {
"$ref": "#/components/schemas/OBDomesticVRPInitiation"
},
"Instruction": {
"$ref": "#/components/schemas/OBDomesticVRPInstruction"
},
"DebtorAccount": {
"$ref": "#/components/schemas/OBCashAccountDebtorWithName"
}
}
},
"Risk": {
"$ref": "#/components/schemas/OBRisk1"
},
"Links": {
"$ref": "#/components/schemas/Links"
},
"Meta": {
"$ref": "#/components/schemas/Meta"
}
}
},
"OBDomesticVRPDetails": {
"type": "object",
"required": [
"Data"
],
"properties": {
"Data": {
"type": "object",
"properties": {
"PaymentStatus": {
"type": "array",
"items": {
"required": [
"PaymentTransactionId",
"Status",
"StatusUpdateDateTime"
],
"type": "object",
"properties": {
"PaymentTransactionId": {
"type": "string",
"minLength": 1,
"maxLength": 210,
"description": "Unique identifier for the transaction within a servicing institution. This identifier is both unique and immutable."
},
"Status": {
"$ref": "#/components/schemas/ExternalPaymentTransactionStatus1Code"
},
"StatusUpdateDateTime": {
"type": "string",
"format": "date-time",
"description": "Date and time at which the status was assigned to the transfer.\n"
},
"StatusDetail": {
"type": "object",
"required": [
"Status"
],
"properties": {
"LocalInstrument": {
"$ref": "#/components/schemas/OBInternalLocalInstrument1Code"
},
"Status": {
"$ref": "#/components/schemas/ExternalPaymentTransactionStatus1Code"
},
"StatusReason": {
"type": "string",
"description": "Reason Code provided for the status of a transfer."
},
"StatusReasonDescription": {
"type": "string",
"minLength": 1,
"maxLength": 256,
"description": "Reason provided for the status of a transfer."
}
}
}
}
}
}
}
}
}
},
"OBVRPFundsConfirmationRequest": {
"type": "object",
"required": [
"Data"
],
"description": "The OBVRPFundsConfirmationRequest object must be used to request funds availability for a specific amount in the Debtor Account included in the VRP consents.",
"properties": {
"Data": {
"type": "object",
"required": [
"ConsentId",
"InstructedAmount"
],
"properties": {
"ConsentId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Unique identification as assigned by the ASPSP to uniquely identify the funds confirmation consent resource."
},
"Reference": {
"type": "string",
"minLength": 1,
"maxLength": 35,
"description": "Unique reference, as assigned by the PISP, to unambiguously refer to the request related to the payment transaction. This must be the same value as the `Reference` field in the consent."
},
"InstructedAmount": {
"$ref": "#/components/schemas/OBActiveOrHistoricCurrencyAndAmount"
}
}
}
}
},
"OBVRPFundsConfirmationResponse": {
"type": "object",
"required": [
"Data"
],
"description": "The confirmation of funds response contains the result of a funds availability check.",
"properties": {
"Data": {
"type": "object",
"required": [
"FundsConfirmationId",
"ConsentId",
"CreationDateTime",
"FundsAvailableResult",
"InstructedAmount"
],
"properties": {
"FundsConfirmationId": {
"type": "string",
"minLength": 1,
"maxLength": 40,
"description": "Unique identification as assigned by the ASPSP to uniquely identify the funds confirmation resource."
},
"ConsentId": {
"type": "string",
"minLength": 1,
"maxLength": 128,
"description": "Unique identification as assigned by the ASPSP to uniquely identify the funds confirmation consent resource."
},
"CreationDateTime": {
"type": "string",
"format": "date-time",
"descr
# --- truncated at 32 KB (69 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/open-banking-uk/refs/heads/main/json-schema/vrp.json