Using CertivantReturning Customers

Returning Customers

What Certivant does when you verify someone you already verified — it compares the new verification with the customer's file, tolerates a move, a renewed licence or a married name, and sends a real conflict to a person.

Who can do this:Org ownerOrg adminOrg member— Members see it on requests they have access to.

What it does

When you verify a person you have already verified and approved in your organization, Certivant compares the new verification with that earlier one — the customer's file — and tells the reviewer what is the same, what changed in an ordinary way, and what conflicts.

It never blocks a legitimate change. A move, a renewed licence, a married name or a new phone number are all normal. Only a real conflict adds a review reason, and a review reason sends the request to a person — it never rejects on its own.

The comparison stays inside your organization. Nothing is compared with, or shown from, another organization's verifications.

How Certivant finds the customer's file

Public forms create a new applicant record for every submission, so Certivant does not rely on the record. It looks for your organization's earlier requests of the same person using, in this order:

  1. Your own reference for the customer (the reference you send with the request or on the applicant).
  2. The same email address, then the same phone number.

A match on a key is then confirmed: the date of birth must match, and so must the name or the document number. This keeps a shared inbox or a recycled phone number from linking two different people. The one exception is your own reference: if it matches but the date of birth is different, Certivant accepts the match and flags it — see Returning customer doesn't match the file below.

The file is the person's latest approved verification (its frozen verified-ID record). Deleted or erased verifications are never used.

What is compared

The Returning customer — compared with the file card on the request detail page shows one row per field, with a status:

StatusMeaning
MatchSame as the file.
ChangedDifferent in an ordinary way. No review reason by itself.
ConflictContradicts the file. Adds a review reason.
UnknownCould not be compared (not read, not labelled on the document, or a different document). Never a conflict.
FieldRule
Date of birthMust match exactly. A different date is a conflict.
NameAccents, word order and middle names are ignored. A different surname with the same date of birth and the same document is changed (marriage, divorce). A different name without that support is a conflict.
Email and phoneA new value is changed. It is noted as confirmed by code or not confirmed.
AddressA new address is changed — moves are normal.
DocumentSee below.

The card shows statuses and rule labels only. It does not copy the customer's personal data anywhere new.

Driver's licence and ID documents

Documents are matched by their number (and the document type and the issuing province or state, when known). Only values the document labels count — an expiry date printed without a label is unknown, never a conflict.

SituationResult
Same number, later expiry and a later (or unreadable) issue dateChanged — document renewed. Legitimate even if the old card had not expired yet.
Same number, earlier expiry than on fileConflict — Licence expiry conflicts with the file.
Same number, same issue date, different expiryConflict (high). One issue date cannot carry two expiry dates.
Same number, later expiry but an earlier issue date than on fileConflict.
Different number (or another type, or another province)Unknown — a different document, verified fresh like any first document.
Same number, same expiryMatch.
Same number, same card reference number ("Reference", "DD"), but different datesConflict (high). The reference number names one physical card and changes at every renewal or replacement — the same reference with other dates means the dates were altered.
Same number, new card reference number, same expiryMatch — replacement card (lost, stolen, address change).

A month-only expiry date counts to the end of that month.

Attempt history

Each new verification also records how often you verified this customer before and for which reasons. It counts every earlier attempt, not only approved ones. A person is found as described above. A business (KYB) is found by your reference or its registration number.

The card on the request detail page shows:

  • Verification N with your organization — every attempt, this one included — and how many were for this same reason.
  • How the earlier attempts for this reason ended: approved, rejected, in review, not completed, cancelled.
  • Already verified here for — the reasons this customer was already approved for, with a count and the last date.

"The same reason" means the same classified reason code. When the reason couldn't be classified, it means the same reason text.

The API returns the same data as attemptHistory on GET /api/v1/kyc/requests/:id. It is null for a first-time customer. Use it to decide what to do with a customer who keeps retrying, for example someone rejected three times for device financing:

"attemptHistory": {
  "totalAttempts": 4,
  "samePurposeAttempts": 3,
  "samePurposeOutcomes": { "approved": 0, "rejected": 2, "inReview": 0, "inProgress": 0, "cancelled": 0 },
  "previousOutcomes": { "approved": 1, "rejected": 2, "inReview": 0, "inProgress": 0, "cancelled": 0 },
  "verifiedPurposes": [
    { "purpose": "account_opening", "count": 1, "lastVerifiedAt": "2026-06-02T14:10:00.000Z" }
  ],
  "firstAttemptAt": "2026-03-11T09:00:00.000Z"
}

Only reason codes and counts are stored. Nothing comes from another organization.

Review reasons

These three reasons add a review step. None of them rejects.

Review reasonWhen
Licence expiry conflicts with the file (licence_expiry_conflict)The licence number matches but the expiry or issue dates contradict the file, as in the table above.
Returning customer doesn't match the file (returning_customer_mismatch)The date of birth conflicts, or the name conflicts, or two or more identity fields changed at once without being confirmed — a new name, an unconfirmed new email, an unconfirmed new phone. A renewal, a move or a contact confirmed by code never counts. A match on your own reference with a different date of birth is a possible account takeover and shows a red notice on the card.
Several addresses in a year (address_change_frequent)The same person (found as above) used three or more different addresses in the last 12 months across their verifications, this one included.

Addresses are compared after being normalized (case, accents, punctuation, "Street" / "St.", apartment and unit notation, postal code), and kept only as a keyed hash.

Use it in policies and workflows

The policy designer and automation workflows can read these fields:

FieldTypeMeaning
returning.isReturningtrue/falseThe same person was verified and approved in your organization before.
returning.conflictslistFields that conflict with the file: dateOfBirth, name, document.
returning.changedFieldslistFields that changed in an ordinary way: address, email, phone, document, name.
returning.addressCount12mnumberDistinct addresses in the last 12 months.

The three review reasons can also be tested with reviewTriggers CONTAINS '…'.