Inyo

Card Checks

The card step publishes its rows in the same checks array as the identity checks, with group: "payment_card". They are read exactly as every other row — see Reading checks[].


The Checks

CheckWhat it decidesStatusesPresent
payment_card_scene_clearNo phone, monitor or screen is visible on either side of the card. It reads the whole frame, so a display behind the card trips it toopassed, failedEvery card session
payment_card_readableA cardholder name was read from the card, or the card carries none. A card with no printed name passes. A printed name that could not be read fails, and so does an identity document photographed in place of a cardpassed, failed, not_evaluatedEvery card session
payment_card_authenticA forensic review of both sides finds a genuine physical card, not a screen, a printout, a photocopy or an altered image. detail names each side's verdictpassed, failed, undetermined, not_evaluatedEvery card session, unless Inyo has switched the review off for your tenant
payment_card_name_matchThe cardholder name matches the name on the identity document, scored against your account's name-match thresholdpassed, failed, undeterminedWhen a name was read from the card, or the card carries none
payment_card_token_matchThe tokenized card is the photographed one, held by the person verified — see Token matchpassed, failed, undetermined, not_evaluatedTokenize sessions that reached the token step

Every card row is high severity by default. Like any severity, it is configurable for your account.

Rows by session mode

ModeRows
Verification only (capture)payment_card_scene_clear, payment_card_readable, payment_card_authentic, payment_card_name_match
Tokenize (capture + tokenize)The same four, plus payment_card_token_match

A session that never reached the card step — the holder stopped earlier, or the session expired — carries no card rows, and an absent card row charges nothing.


Reading the Rows

{ "name": "payment_card_name_match", "status": "undetermined", "group": "payment_card", "severity": "high", "reason": "payment_card_carries_no_name", "detail": "this card carries no cardholder name to compare" }

Every row has the six fields every check has: name, status, group, severity, reason, detail. There is no score.

reasonOnMeaning
payment_card_carries_no_namepayment_card_name_match, undeterminedThe card prints no cardholder name, so there was nothing to compare. Charged as an adverse finding: a nameless card does not clear the name comparison
no_identity_namepayment_card_name_match, undeterminedNo name was read from the identity document. That cost is already carried by document_readable
review_inconclusive, review_incompletepayment_card_authentic, undeterminedA side could not be judged, or could not be reviewed
last_four_mismatchpayment_card_token_match, failedThe tokenized card's last four differ from the photographed card's
name_mismatchpayment_card_token_match, failedThe confirmed name matches neither the identity document nor the card
card_unreadablepayment_card_token_match, undeterminedThe photographed card could not be compared with the tokenized one
provider_unavailable and the other provider reasonsAny row that can be not_evaluatedThe service behind the check could not answer — see Session Results

payment_card_token_match is the one card row that carries a reason on failed: it fails two ways, and reason says which.

No card row carries the card number or the cardholder name. detail is fixed wording, and nothing in the result carries more of the number than paymentCard.lastFour.


Token Match

payment_card_token_match compares what was tokenized with what was photographed. It runs once the widget hands Inyo360 the token, and makes two comparisons:

ComparedAgainstAgrees when
The last four digits of the tokenized card, as the widget reported themThe digits left visible on the stored card photos, read again from either sideThey are the same four digits on at least one side
The cardholder name the holder confirmedThe name on the identity document, then the name read from the cardIt matches either one, at your account's name-match threshold

Either comparison disagreeing fails the row. Neither disagreeing, but one unable to run — no four digits readable on either photo, or no name to compare against — makes it undetermined with card_unreadable.


What a Failing Row Does

Two rows are checked as soon as both sides arrive, and a failure sends the holder back to retake the card:

RowThe holder is told
payment_card_scene_clear failsThe photo looks like a picture of a screen, and to photograph the physical card
payment_card_readable failsThe card could not be read, or it looks like an identity document rather than a payment card

Each retake costs one card attempt. The card has its own allowance, the same size as the document's and the selfie's — see Capture Retries. Exhausting it ends the session failed, as exhausting any allowance does.

The other rows never send the holder back. A failing payment_card_authentic, payment_card_name_match or payment_card_token_match is scored with the rest of the session: the session completes, the row is charged against trustIndex, and under managed decisioning it counts toward decision like any other row. A tokenize session keeps its paymentCard block whatever those rows say, so read them before you charge the token.


Next Steps