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
| Parameter | Type | Required | Description |
|---|---|---|---|
iban | string | yes | IBAN of the payee account; spaces and dashes tolerated, any case |
name | string | yes | Name 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.kindisliveorcachedwhen the bank network was actually queried, andsnapshotwhen the answer is local (invalid IBAN, or a countrynot_supported— resolved without a paid network call).
Fields of data — VerifyNameResult
| Field | Type | Description |
|---|---|---|
iban_valid | bool | Structural validity of the IBAN (country format + mod-97 checksum) |
name_match | string | One of the five match bands (see below) |
bic | string | null | BIC of the payee bank, when known |
suggested_name | string | null | Corrected holder name — present only on close_match, null otherwise |
coverage | object | { "supported": bool, "country": string | null, "reason": string | null } |
Match bands (name_match)
| Value | Meaning |
|---|---|
match | The name matches the account holder. Safe to proceed. |
close_match | A near-miss (typo, abbreviation, ordering); suggested_name carries the correction. |
no_match | The name does not match the holder. Do not release the transfer. |
unavailable | The payee bank could not answer (unreachable, or account closed). Successful → 200. |
not_supported | The country/bank is outside the VoP scheme — no check possible. Successful → 200. |
coverage
| Field | Type | Description |
|---|---|---|
supported | bool | Whether VoP is available for this IBAN’s country/bank |
country | string | null | ISO 3166-1 alpha-2 country code, when extracted |
reason | string | null | Why 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
unavailableis 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 a503— the agent is not charged for an answer it did not get.not_supportedis 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). Ano_matchnever returns a full name — this mirrors the EPC scheme, which discloses just enough to correct a near-miss, never to enumerate holders.
Errors
| Status | code | Case |
|---|---|---|
| 400 | MISSING_PARAMETER | iban or name parameter missing or empty |
| 503 | PROVIDER_UNAVAILABLE | VoP provider not configured or down (agent not charged) |
| 500 | INTERNAL | Internal error (detail logged, not exposed) |
{ "error": "missing or empty required parameter: name", "code": "MISSING_PARAMETER" }
See also
GET /iban/resolve— resolve an IBAN to its bank, BIC and SEPA reachability per scheme.POST /iban/verify-name/batch— verify many name/IBAN pairs in one settlement.- For agents — discovery surfaces, the live
/catalogand how settlement works.