Skip to main content

Overview

Warnings on the NFC report flag every condition Didit observed while reading and validating the chip. They land in the warnings[] array on each item of nfc_verifications[] (see NFC report), with feature set to "NFC". Each entry follows the shared warning object shape: feature, risk, additional_data, log_type, short_description, long_description, node_id. Every warning has three layers:
  1. The risk code — a stable identifier you can match on in your code (the codes listed below).
  2. The log_type — one of information, warning, or error. It is derived from the action your workflow configures for that risk: No actioninformation, Reviewwarning, Declineerror.
  3. The decision impact — the same configured action also drives the NFC report’s status: a Review action moves it to In Review, a Decline action to Declined.
Four NFC risks are configurable this way (SKIPPED_NFC_VALIDATION, NFC_CHIP_NOT_VERIFIED, NFC_TRUST_ANCHOR_MISSING, NFC_AND_OCR_DATA_NOT_SAME). The two certificate risks (DSC_CERTIFICATE_REVOKED, DSC_CERTIFICATE_EXPIRED) are informational only: they always carry log_type: "information" and never change the NFC status by themselves. The full set of risk codes the NFC module produces is below. No other NFC risk codes exist.

Warnings produced

SKIPPED_NFC_VALIDATION is mutually exclusive with NFC_CHIP_NOT_VERIFIED and NFC_TRUST_ANCHOR_MISSING: chip-verification warnings are only evaluated when the chip read was not skipped. The two chip-verification warnings are also mutually exclusive.

Exact description strings

The API returns these exact short_description and long_description strings for each risk:

Skip reasons

SKIPPED_NFC_VALIDATION warnings carry additional_data.skip_reason, one of six stable codes stating exactly why NFC did not run (on sessions recorded before skip reasons existed, additional_data may be null — treat the field as optional when processing historical decisions). The same taxonomy appears at the session level as nfc_skip_reason on the decision payload — including for sessions where NFC could never run at all (chipless document, web integration) and therefore no NFC report or warning exists.
An NFC report and its SKIPPED_NFC_VALIDATION warning only exist when the client reached the NFC step and explicitly skipped it (typically USER_SKIPPED, or DEVICE_WITHOUT_NFC when the reader turned out to be unavailable at scan time). When the NFC step was bypassed before it could ever be offered — chipless document, missing certificate, no NFC capability reported, unreadable MRZ key — no report or warning is created and the reason surfaces only in the session-level nfc_skip_reason field, without affecting the session status.

Configuration

Three workflow settings control how NFC warnings route. Each can be set to No action, Review, or Decline:
  1. Skip NFC action (skip_nfc_action) — applies to SKIPPED_NFC_VALIDATION. Skipping is only offered to users when allow_nfc_skip is enabled.
  2. Unverified chip action (unverified_chip_action) — applies to both NFC_CHIP_NOT_VERIFIED and NFC_TRUST_ANCHOR_MISSING, so the session status behavior remains the same while the risk code explains why verification failed.
  3. Data inconsistency action (inconsistent_data_action) — applies to NFC_AND_OCR_DATA_NOT_SAME. This is the same data-inconsistency setting used by ID verification.
The two DSC_CERTIFICATE_* risks have no action setting — they are always informational.

Examples

In Review — chip could not be verified

Here the unverified-chip action is set to Review, so NFC_CHIP_NOT_VERIFIED carries log_type: "warning" and the NFC report’s status is In Review. The expired-DSC entry is purely informational.

Declined — chip / OCR mismatch

Here the data-inconsistency action is set to Decline, so the warning carries log_type: "error" and the NFC report’s status is Declined. Note that ocr_mrz is an array of MRZ lines while nfc_mrz is the chip’s single concatenated MRZ string.

Warning types

Each risk is assigned a severity based on your application’s configuration. The three severities are: