VOP Plus Results Request API Specification
This chapter provides detailed information on how to retrieve the Plus results of a bulk request. This document specifically covers the Plus offering of the API.
The Plus offering builds upon the Standard (EPC-compliant) version by including additional information related to the account and name check result. This includes fields such as the account holder type (e.g., Natural Person or Organisation) and expanded details for NMTC and NOAP responses, providing greater context and transparency in match results.
The results file can only be retrieved after the status of the bulk request has been updated to 'PROCESSED'. The response to this request is returned in NDJSON format, containing the finalized data for the completed bulk operation.
Document History
Expand to view the version history.
Version | Date | Description |
---|---|---|
1.0 | 21 Jul 2025 | Standard version split from V2.3 of the original Bulk Results API Specification. The original version can be viewed here. Error Handling section added. Name too short example updated. Removed Content-Type from headers. Accept Header updated to optional, default value added. |
Request
Request Body
This endpoint does not require a request body. The taskId is passed as a path parameter.
taskId
StringMandatory
Request
GET /vopgateway/v1/bulk/12930484-129284501-ecernb
Response
The response is an NDJSON file.
- Successful response (HTTP 200 - described below)
- Error response (HTTPXXX - described in Errors)
Response Body
uetr
StringMandatorypartyNameMatch
EnumConditionalpartyIdMatch
EnumConditionalmatchedName
StringConditionaladditionalPartyInformation
ObjectConditional
Response
{"uetr": "2f01983c-a558-445c-8728-dba547d2ff8b", "partyNameMatch": "MTCH", "additionalPartyInformation": {"advancedInfo": {"accountHolderType": "NP", "accountStatus": "ACTIVE"}}}
Error Handling
Status and Error Codes
When an application error message occurs, an HTTP status code will be returned with an error message. The return format of the error messages are technical errors and functional errors. When interacting with this API, you may encounter two primary categories of errors: technical errors and record-level errors.
Technical Errors
Technical errors indicate issues with the API request itself, preventing successful processing. These errors are reflected in the HTTP status code of the response and typically fall within the 4xx or 5xx range. Examples include 401 Unauthorised
(indicating missing or invalid authentication credentials) or 500 Internal Server Error
(signifying a problem on the server's end).
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/or a character set other than UTF-8. |
415 - Unsupported Media Type | The request contained a Content-Type header other than application/x-ndjson and/or a character set other than UTF-8. |
429 - Too Many Requests | Too many requests towards the endpoint. |
500 - Internal Server Error | Something went wrong on the Bulk API or service. In this case the body might contain extra details. This error can also be returned if the upstream service returns an error. |
Record Level Errors
In contrast, record-level errors are not reflected in the HTTP status code of the initial API response. Instead, these errors are contained within the downloaded NDJSON result file. They indicate issues with the data within individual records (rows) of your file, typically related to invalid or malformed values. While these errors generally correspond to a 400 Bad Request
at a logical level, their specific details and structure, following an NDJSON format, are thoroughly explained in the Functional Errors section of this document.
Error Response
The JSON formats detailed below are returned when an API-level error (also referred to as a request or technical error) occurs, indicating an issue with the request itself.
Conversely, an NDJSON example is provided for scenarios where errors are returned within the result file per record, signifying issues with individual data entries rather than the overall request.
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
uetr
StringConditionalstatus
IntegerOptionaltype
StringMandatorycode
StringMandatorytitle
StringOptionaldetail
StringOptionalinstance
StringOptional
API Error response
[
{
"status": 400,
"type": "https://developer.surepay.nl/vop-bulk-for-banks/status-and-errorcodes",
"code": "FORMAT_ERROR",
"title": "INVALID_HEADER",
"detail": "'X-Request-Id' header has a maximum of 128 characters",
"instance": "/vopgateway/v1/bulk/ea933c4c-67f1-4883-8a93-75c3d90e0b36/status"
}
]
Record Level Error response
{"uetr":"13b8472f-d796-436a-ba76-0be4ec234206","status":400,"type":"https://surepay.com/problem-type/invalid-input","code":"FORMAT_ERROR","title":"Invalid input data","detail":"Presence of two fields that are mutually exclusive","instance":"/request/body/field-name"}
{"uetr":"13b8472f-d796-436a-ba76-0be4ec234207","status":400,"type":"https://surepay.com/problem-type/invalid-input","code":"FORMAT_ERROR","title":"Invalid input data","detail":"Presence of two fields that are mutually exclusive","instance":"/request/body/field-name"}
Functional Errors
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' |