---
title: "Free structured payment reference check"
method: GET
path: "/v1/reference/validate"
tags: ["Free"]
---

# Free structured payment reference check

`GET /v1/reference/validate`

FREE checksum validation for structured payment references: RF Creditor Reference (ISO 11649, "SCOR" in Swiss Payment Standards, mod 97-10), Swiss QR reference ("QRR", 27 digits, modulo 10 recursive), Belgian OGM/VCS (12 digits, modulo 97 with a remainder of 0 written 97) and Finnish viitenumero (4-20 digits, weights 7-3-1 from the right). Norwegian KID and Swedish OCR are RECOGNISED but answer `valid: null` with `status: unverifiable_without_creditor_config` — their modulus type and length are configured per creditor account by the beneficiary bank, so no generic checker can judge them and answering `false` would reject valid references. Every answer that names a scheme carries the document publishing the rule and its date. For the PAIRING verdict — whether a reference may legally travel with a given IBAN — use POST /v1/iban/validate with a `reference` field.

## Query parameters

- `reference` string, required
- `reference_type` 'rf' | 'scor' | 'qrr' | 'ogm' | 'vcs' | 'viitenumero' | 'kid' | 'ocr'

## Response `200`

Reference verdict. `valid` is true, false, or null when the scheme cannot be checked without the creditor bank configuration.

- PaymentReferenceResult
  - `reference` string, required — Normalized: uppercase, separators removed
  - `scheme` 'rf' | 'qrr' | 'ogm' | 'viitenumero' | 'kid' | 'ocr', nullable, required — Null when no supported scheme matches the string
  - `valid` boolean, nullable, required — null is a REAL answer, not a missing one: the scheme was recognised and cannot be checked without the creditor bank configuration (KID, OCR). Never present null to a user as invalid.
  - `status` 'checked' | 'unverifiable_without_creditor_config' | 'unrecognised', required
  - `check_digit_expected` string — A STRING, so a two-digit value beginning with zero survives — an OGM remainder of 3 is "03", and a remainder of 0 is written "97".
  - `also_valid_as` object — The second reading of an ambiguous string, with its own verdict. A bare 12-digit reference is both a Belgian OGM and a legal Finnish length.
    - `scheme` string
    - `valid` boolean
    - `check_digit_expected` string
  - `source` string, nullable, required — The document that publishes the rule. Null only when no scheme matched, so no rule was applied. Relay it: it is what makes the verdict auditable.
  - `as_of` string — YYYY-MM of that document — the date it carries, never a future validity date
  - `note` string, required — What was checked, and what was not
  - `pairing_verdict` string — Pointer to POST /v1/iban/validate for the QRR/SCOR pairing verdict

## Other responses

- `400` — Missing ?reference= query parameter, or shorter than 4 / longer than 64 characters

---

[API](https://skmtc.dev/ibanforge/apis/ibanforge-api.md) · [All operations](https://skmtc.dev/ibanforge/apis/ibanforge-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/ibanforge/ibanforge-api/revisions/9499dba434ea/schema)
