Skip to content

Trendtech VOP API Reference (1.0.0)

Technical specification for the Verification of Payee VOP API based on EPC103-24 VOP Inter-PSP API Specifications.

This API enables Payment Service Providers (PSPs) to verify payee information before executing SEPA payments, reducing fraud and payment errors through real-time verification.

Benefits

  • Reduces fraud and misdirected payments
  • Supports real-time name or identifier verification
  • Complies with SEPA and EPC requirements

Standards

  • VOP Scheme Rulebook (EPC218-23)
  • Inter-PSP API Specification (EPC103-24)
  • EPC API Security Framework (EPC164-22)
Overview
URL
TrendTech VOP API Support
Languages
Servers
Base URL will be provided by TrendTech (sandbox or production)
https://{environment}.trendtech.uk

VOP Request

Core endpoint used for initiating and receiving payee verification requests

Operations

Request

Submit a payee verification request as a Requesting PSP. This endpoint is used by the Requesting PSP or its RVM to initiate a verification check before a SEPA payment.

Verification Types Supported

  • Name + IBAN: For natural persons or organizations
  • Organization ID + IBAN: LEI, BIC, or 14 other organization ID types
  • Name/ID + IBAN + With remittance info: For e-money institutions (INACNO support)

Business Rule: Mutual Exclusivity

The request must contain EITHER:

  • party.name for name verification
  • party.identification for organization ID verification

These fields are mutually exclusive - including both will result in a 400 error.

Authentication

  • Method: JWT Bearer Token
  • Header: Authorization: Bearer <token>
Security
bearerAuth
Headers
Content-Typestringrequired

Media type of the request body

Value"application/json"
X-Request-IDstring(uuid)required

The Requesting PSP's reference number of the VOP Request

Example: 123e4567-e89b-12d3-a456-426614174000
X-Request-Timestampstring(date-time)

Optional Timestamp of the VOP Request in ISO 8601 format with milliseconds. This is optional, Trendtech will generate the timestamp when forwarding to the Responding RVM. Format: UTC (YYYY-MM-DDThh:mm:ss.sssZ) or local time with UTC offset (YYYY-MM-DDThh:mm:ss.sss+/-hh:mm)

Example: 2024-08-12T15:19:21.123Z
Authorizationstring^Bearer .+$required

JWT bearer token for authentication

Example: Bearer 5cCI6IkpXVCIs...
Bodyapplication/jsonrequired

VOP Request payload

partyName (object) or Identification (object)(PartyType)= 1 propertyrequired

Party identification information. Must contain EITHER name OR identification, but NOT both.

Business Rules:

  • For natural persons: Only name is allowed
  • For organizations: Either name OR identification can be used
  • The fields name and identification are mutually exclusive
One of:

Party identification information. Must contain EITHER name OR identification, but NOT both.

Business Rules:

  • For natural persons: Only name is allowed
  • For organizations: Either name OR identification can be used
  • The fields name and identification are mutually exclusive
= 1 property
party.​namestring[ 0 .. 140 ] charactersrequired
Example: "John Doe"
partyAccountobject(AccountType)required
partyAccount.​ibanstring^[A-Z]{2}[0-9]{2}[A-Z0-9]{1,30}$required

International Bank Account Number (ISO 13616)

Example: "BE12345678901234"
partyAgentobject(AgentType)required
partyAgent.​financialInstitutionIdobject(FinancialInstitutionId)required
partyAgent.​financialInstitutionId.​bicfistring^[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?$required

Bank Identifier Code (8 or 11 characters)

Example: "ABCDBEBBXXX"
unstructuredRemittanceInformationArray of strings<= 1 items

Represents subaccount hold by the payment counterparty. Meaningful with IBAN. Responding PSP must support this data. Usage Rule: only one entry may be used.

requestingAgentobject(AgentType)required
requestingAgent.​financialInstitutionIdobject(FinancialInstitutionId)required
requestingAgent.​financialInstitutionId.​bicfistring^[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?$required

Bank Identifier Code (8 or 11 characters)

Example: "ABCDBEBBXXX"
curl -i -X POST \
  'https://{environment}.trendtech.uk/vop/v1/request' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'X-Request-ID: 123e4567-e89b-12d3-a456-426614174000' \
  -H 'X-Request-Timestamp: 2024-08-12T15:19:21.123Z' \
  -d '{
    "party": {
      "name": "Dupont Jean"
    },
    "partyAccount": {
      "iban": "BE12345678901234"
    },
    "partyAgent": {
      "financialInstitutionId": {
        "bicfi": "GEBABEBBXXX"
      }
    },
    "requestingAgent": {
      "financialInstitutionId": {
        "bicfi": "ABCDBEB0XXX"
      }
    }
  }'

Responses

Successful verification response

Headers
X-Request-IDstring(uuid)

Echo of the original request ID

X-Response-Timestampstring(date-time)

Timestamp when response was generated

Bodyapplication/json
partyNameMatchstring(NameMatchType)

Party name verification result:

  • MTCH: Match
  • CMTC: Close Match (matchedName will be provided)
  • NMTC: No Match
  • NOAP: No Account Party (Verification Check Not Possible)
Enum"MTCH""CMTC""NMTC""NOAP"
Example: "MTCH"
partyIdMatchstring(PartyIdMatchType)

Party identification verification result:

  • MTCH: Match
  • NMTC: No Match
  • NOAP: No Account Party (Verification Check Not Possible)
Enum"MTCH""NMTC""NOAP"
Example: "NMTC"
matchedNamestring[ 0 .. 140 ] characters
Example: "matchedName"
Response
application/json
{ "partyNameMatch": "MTCH" }