GET /iban/verify-name

Runs Verification of Payee (VoP, also known as Confirmation of Payee / CoP) in a single call: it checks that the name you are about to pay matches the account holder behind an IBAN, before you release a SEPA transfer. The verdict comes back as one of five match bands, and on a near-miss the corrected name is relayed so the agent can fix the transfer. Works for a person or a company.

The account holder’s name is not reproducible by an agent — it lives in the inter-PSP EPC scheme, behind bank data. This endpoint exposes it per call, with no onboarding, where SurePay/Trustpair-style providers require an enterprise RVM integration.

Regulatory timing. VoP is mandatory across the SEPA zone since 9 October 2025 (Instant Payments Regulation). Any agent that prepares or executes a SEPA transfer is expected to verify the payee first.

x402 golden rule: the agent pays for the answer to its question. “The payee bank could not answer” (unavailable) and “this country is outside the VoP scheme” (not_supported) are both successful answers → 200. The 4xx/5xx ranges are reserved for requests the service cannot answer.

Parameters

ParameterTypeRequiredDescription
ibanstringyesIBAN of the payee account; spaces and dashes tolerated, any case
namestringyesName to verify against the account holder — person or company

Example:

GET /iban/verify-name?iban=DE89370400440532013000&name=Erika%20Mustermann

200 response — UnifiedResponse

{
  "data": { ... },
  "provenance": {
    "source": "epc-vop-scheme",
    "fetched_at": "2026-06-22T09:30:00Z",
    "freshness": { "kind": "live" }
  }
}
  • provenance.freshness.kind is live or cached when the bank network was actually queried, and snapshot when the answer is local (invalid IBAN, or a country not_supported — resolved without a paid network call).

Fields of dataVerifyNameResult

FieldTypeDescription
iban_validboolStructural validity of the IBAN (country format + mod-97 checksum)
name_matchstringOne of the five match bands (see below)
bicstring | nullBIC of the payee bank, when known
suggested_namestring | nullCorrected holder name — present only on close_match, null otherwise
coverageobject{ "supported": bool, "country": string | null, "reason": string | null }

Match bands (name_match)

ValueMeaning
matchThe name matches the account holder. Safe to proceed.
close_matchA near-miss (typo, abbreviation, ordering); suggested_name carries the correction.
no_matchThe name does not match the holder. Do not release the transfer.
unavailableThe payee bank could not answer (unreachable, or account closed). Successful → 200.
not_supportedThe country/bank is outside the VoP scheme — no check possible. Successful → 200.

coverage

FieldTypeDescription
supportedboolWhether VoP is available for this IBAN’s country/bank
countrystring | nullISO 3166-1 alpha-2 country code, when extracted
reasonstring | nullWhy a check could not run (e.g. OUTSIDE_SCHEME), null if fine

Case 1 — name matches (match)

{
  "iban_valid": true,
  "name_match": "match",
  "bic": "COBADEFFXXX",
  "suggested_name": null,
  "coverage": { "supported": true, "country": "DE", "reason": null }
}

Case 2 — near-miss, corrected name relayed (close_match)

The only band that carries suggested_name, so the agent can fix the payee before releasing the transfer.

{
  "iban_valid": true,
  "name_match": "close_match",
  "bic": "COBADEFFXXX",
  "suggested_name": "Erika Mustermann",
  "coverage": { "supported": true, "country": "DE", "reason": null }
}

Case 3 — name does not match (no_match)

No full name is ever returned on a mismatch — only the verdict.

{
  "iban_valid": true,
  "name_match": "no_match",
  "bic": "COBADEFFXXX",
  "suggested_name": null,
  "coverage": { "supported": true, "country": "DE", "reason": null }
}

Case 4 — payee bank could not answer (unavailable, successful → 200)

The beneficiary bank did not respond, or the account is closed. This is a valid verdict, not an error — distinct from an outage of our provider (a 5xx, where the agent does not pay).

{
  "iban_valid": true,
  "name_match": "unavailable",
  "bic": "COBADEFFXXX",
  "suggested_name": null,
  "coverage": { "supported": true, "country": "DE", "reason": null }
}

Case 5 — country outside the VoP scheme (not_supported, successful → 200)

A free pre-filter resolved locally: no paid network call is wasted on a country the scheme does not cover.

{
  "iban_valid": true,
  "name_match": "not_supported",
  "bic": null,
  "suggested_name": null,
  "coverage": { "supported": false, "country": "US", "reason": "OUTSIDE_SCHEME" }
}

Honest limits

  • unavailable is a 200, not a 5xx. The payee bank being unreachable or the account being closed is a successful verdict. A failure of our provider is a 503 — the agent is not charged for an answer it did not get.
  • not_supported is a free pre-filter. Countries outside the VoP scheme are resolved locally (snapshot), so no paid check is wasted.
  • PII posture. A corrected holder name is relayed only on close_match (suggested_name). A no_match never returns a full name — this mirrors the EPC scheme, which discloses just enough to correct a near-miss, never to enumerate holders.

Errors

StatuscodeCase
400MISSING_PARAMETERiban or name parameter missing or empty
503PROVIDER_UNAVAILABLEVoP provider not configured or down (agent not charged)
500INTERNALInternal error (detail logged, not exposed)
{ "error": "missing or empty required parameter: name", "code": "MISSING_PARAMETER" }

See also