API Specification
This chapter contains information on the header, request and response body required to make a successful request with the VOP Requester API for Banks. At the bottom of the page, information about the error scenarios are also described.
Document History
Version | Date | Description |
---|---|---|
1.0.0 | 15 Jan 2025 | Original Digital Version. Aligned with PDF V1.3 |
1.1.0 | 17 Jan 2025 | Added minor fixes. Updated 'nameMatched' to 'matchedName' |
1.2.0 | 27 Jan 2025 | Changed the format of the 'bicfi' fields |
1.3.0 | 10 Feb 2025 | Changed validation format to the request fields: 'accountId.type.iban' and 'lei' |
1.3.1 | 19 Feb 2025 | Changed 'unstructuredRemittanceInformation' type from 'String' to 'Array of Strings' |
1.4.0 | 21 Feb 2025 | Added new values and response logic to the field 'detailedMatchResult' and added examples |
2.0.0 | 20 Mar 2025 | Aligned to YAML and included formatting changes. Refer to the detailed changes here. |
2.1.0 | 16 Apr 2025 | Added the following new headers: X-End-User, X-Software-Supplier and X-Channel |
2.2.0 | 15 May 2025 | Added usage rules to unstructuredRemittanceInformation and organisation.others. Added format to unstructuredRemittanceInformation. Corrected the X-Request-Id example with valid RFC4122 value. |
2.2.1 | 20 May 2025 | Fixed malformed properties under identification.organisationId . Added missing financialInstitutionId object under the requestingAgent object. |
2.2.2 | 16 Jun 2025 | Updated description of EMPL from "employee" to "employer" under schemeNameCode. Updated description for detailedMatchResult field. |
Endpoints
Environment | Endpoint URL |
---|---|
Sandbox | Available on request |
Production | Available on request |
Request
Request Body
Two combinations are supported as VOP requests (A) Name + IBAN and (B) Identifier Code + IBAN. In case of Natural Person, only combination (A) is possible.
party
ObjectMandatorypartyAccount
ObjectMandatoryunstructuredRemittanceInformation
Array of StringsOptionalpartyAgent
ObjectConditionalrequestingAgent
ObjectMandatory
Request
{
"party": {
"name": "David Alex Miller"
},
"partyAccount": {
"iban": "NL72SRPY0000000001"
},
"unstructuredRemittanceInformation": ["1234512345"],
"partyAgent": {
"financialInstitutionId": {
"bicfi": "ABCDBEBBXXX"
}
},
"requestingAgent": {
"financialInstitutionId": {
"bicfi": "SRPYNL2U"
}
}
}
Response
The response has a different structure depending on the API call results.
- Successful response (HTTP 200 - described below)
- Error response (HTTPXXX - described in Errors)
Response Body
partyNameMatch
EnumConditionalpartyIdMatch
EnumConditionalmatchedName
StringConditionaladditionalPartyInformation
ObjectConditional
Response
{
"partyNameMatch": "MTCH"
}
Performance and Availability
The VoP Gateway API will comply with the highest availability standards, operating 24/7 and allowing consumers to submit name-matching requests without downtime. All SLAs related to availability, support, and resolution times are defined in a separate Service Level Agreement (SLA) document, agreed upon with the PSP to which the service is provided.
Encoding and Special Characters
API requests and responses must use UTF-8 character encoding, which is the default encoding for JSON (RFC 7158 - Section 8.1).
Security
The API is designed for use by a trusted backend or middleware service. Each individual connection between SurePay and the bank is secured by:
- HTTPS only
- IP whitelisting
- OAuth 2.0
Non-secure devices, like mobile apps, are not permitted to connect directly, nor can the API be directly integrated into web pages. Only server-to-server connections are permitted. If a connection is compromised, SurePay can disconnect it.
The interface is based on several key premises:
- The SurePay API client is a trusted partner.
- On the SurePay client side, security measures are implemented, such as handling DoS attacks.
- Additional data fields will not break the connection on the client side (backward compatibility support).
- SSL session reuse is supported.
Error Handling
Status and Error Codes
When an application error message occurs, an HTTP status code will be returned plus an error message. The return format of the error messages are technical errors and functional errors. The table below reflects the used HTTP status codes in case of a technical error.
HTTP Status Code | Description |
---|---|
200 - OK | The request has succeeded. |
400 - Bad request | Request has malformed, missing or non-compliant JSON body or URL parameters. |
401 - Unauthorised | Authorization header missing or invalid token. |
403 - Forbidden | Token has incorrect scope or a security policy was violated. |
405 - Method not Allowed | The Requester tried to access the resource with a method that is not supported. |
406 - Not Accepted | The request contained an accept header that requested a content-type other than application/JSON and a character set other than UTF-8. |
429 - Too Many Requests | Too many requests towards the endpoint. In this case the response contains a Retry-After header indicating how long the consumer must wait before retrying the operation. |
500 - Internal server error | Something went wrong on the API gateway or service. In this case the body might contain extra details. This error can also be returned if the upstream service returns an error. All VOP participants' error messages will be reported from the Gateway API perspective as “500 Internal server error” errors with detailed information provided within the Errors array in the error message body. |
504 - Gateway Timeout | There was no timely response from an upstream server that was needed to complete the request. This can happen if there was no response from the payee’s VOP endpoint. |
Error Response
Error Response Headers
X-Request-Id
StringMandatoryContent-Type
StringMandatory
Example of Error Response Headers
Header name | Example |
---|---|
X-Request-Id | 123e4567-e89b-12d3-a456-426614174000 |
Content-Type | application/json;charset=utf-8 |
Error Response Body
type
StringMandatorycode
StringMandatorytitle
StringOptionalstatus
StringOptionaldetail
StringOptionalinstance
String
Error response
[
{
"type": "https://surepay.com/problem-type/invalid_field",
"code": "FORMAT_ERROR",
"title": "INVALID_FIELD",
"status": 400,
"detail": "The provided value for the field ‘____’ differs from the expected format.",
"instance": "/request/body/field-name"
}
]
Functional Errors
Error Message Codes
HTTP Status Code | Description |
---|---|
FORMAT_ERROR | Incorrect data format has been provided, not compliant with the expected specifications (e.g., invalid JSON format, missing or incorrectly formatted fields). |
CLIENT_INVALID | The client is not recognised or is invalid (an attempt to access resources by an unauthorized client). |
CLIENT_INCONSISTENT | The client information provided in the certificate and/or in the request message body is not consistent with related directory information |
INTERNAL_SERVER_ERROR | An exception occurred during code execution and the request cannot be further processed. |
Error table
The following table contain a list of error code values:
Error Message Code | HTTP Code | Title | Detailer Error |
---|---|---|---|
FORMAT_ERROR | 400 | INVALID_HEADER | The provided value for the header ‘___’ differs from the expected format. Possible values : X-Request-Id, Accepted-Language, Content-Type and Authorization |
FORMAT_ERROR | 400 | MANDATORY_HEADER_NOT_PROVIDED | A mandatory header ‘___’ has not been provided, therefore the request cannot be sent. Possible values : 'X-Request-Id', 'Content-Type' and 'Authorization' |
FORMAT_ERROR | 400 | INVALID_REQUEST | The provided JSON format in the request does not comply with the expected structure. |
FORMAT_ERROR | 400 | MANDATORY_FIELD_NOT_PROVIDED | The request is missing the mandatory field ‘____’. Possible values : 'name' or 'identification', 'bicfi' (requesting, agent), 'iban' |
FORMAT_ERROR | 400 | INVALID_FIELD | The provided value for the field ‘____’ differs from the expected format. Possible values : 'name', 'identification','lei', 'schemeNameCode', 'schemeNameProprietary', 'anyBIC', 'bicfi' (requesting, agent), 'issuer' |
FORMAT_ERROR | 400 | NAME_TOO_LONG | The value provided in the field ‘name’ is longer than the maximum number of characters: 140. |
FORMAT_ERROR | 400 | MUTUALLY_EXCLUSIVE_FIELDS_USED | Two fields mutually exclusive were added in the request. Possible values : 'name' and 'identification'; 'lei', 'anyBIC' and 'others'; 'schemeNameCode' and 'schemeNameProperty' |
CLIENT_INVALID | 401 | The API Client has a valid certificate but is not contained in the addressed scheme directory | The Requesting’s PSP is not adherent to the Scheme. |
List of Enumeration Values
schemeNameCode
The following table contain a list of enumeration values:
Enumeration value | Description | Format | Example |
---|---|---|---|
BANK | Bank Party Identification request. A unique and unambiguous assignment made by a specific bank or financial institution to identify a relationship between the bank and its client. | Format: [CountryCode][BankCode][BranchCode] | Example: 'US123BANK001' |
CBID | Central Bank Identification Number request. A unique identification number assigned by a central bank to identify an organization. | Format: (CB)[0-9]{9,12} | Example: 'CB123456789' |
CHID | Clearing Identification Number request. A unique identification number assigned by a clearing house to identify an organization. | Format: [A-Z]{2,4}[0-9]{4,6} | Example: 'CHCLRG1234' |
CINC | Certificate of Incorporation Number request. A unique identification number assigned by a designated authority to a certificate of incorporation, used to identify an organization. | Format: (INC)[0-9]{7,10} | Example: 'INC1234567' |
COID | Country Identification Code request. An identification code assigned by the country authority to identify an organization (e.g., corporate registration number). | Format: [A-Z]{2}[0-9]{8,10} | Example: 'US123456789' |
CUST | Customer Number request. A number assigned by an issuer to identify a customer or by a party to identify a creditor or debtor relationship. | Format: (CUST)[0-9]{6,8} | Example: 'CUST789456' |
DUNS | Data Universal Numbering System request. A unique identification number provided by Dun & Bradstreet to identify an organization. | Format: [0-9]{9} | Example: '123456789' |
EMPL | Employer Identification Number request. Number assigned by a registration authority to an employer. | Format: (EMP)[0-9]{6,8} | Example: 'EMP123456' |
GS1G | GS1 GLN (Global Location Number) Identifier request. A non-significant reference number used to identify legal, functional, or physical entities according to GS1 numbering scheme rules. | Format: [0-9]{13,14} | Example: 'GLN1234567890123' |
SREN | The unique French business identification number assigned by INSEE, the French National Institute for Statistics and Economic Studies. | Format: [0-9]{9} | Example: '123456789' |
SRET | Number providing information about the business location in France. The registration number contains an extra 5 digits (added to the end of the SIREN number to form the full SIRET number). | Format: [0-9]{14} | Example: '12345678900001' |
TXID | Tax Identification Number request. | Format: (TX)[0-9]{8,12} | Example: 'TX123456789' |
BDID | Business Domain Identifier request. An identifier representing the business domain in which the organization operates. | Format: (BUSDOM)[0-9]{5,10} | Example: 'BUSDOM12345' |
BOID | Business Other Identification request. Other identification for the organization. | Format: Not specified | Example: Not Applicable |