Skip to main content
Version: v3000

Extract specific fields

Once scanning completes, BlinkCard returns a result object with the extracted card data. This guide shows how to read the most common fields on web, Android, and iOS.

The result object​

Whether you scan via camera or from a static image, you get back a BlinkCardScanningResult. Card account data (number, CVV, expiry) lives in the cardAccounts array, while the cardholder name and IBAN are top-level fields:

blinkCard.addOnResultCallback((result) => {
const account = result.cardAccounts[0];

const cardNumber = account.cardNumber;
const cvv = account.cvv;
const cardholderName = result.cardholderName;
const iban = result.iban;
const issuingNetwork = result.issuingNetwork; // e.g. "visa", "mastercard"
});

A card can expose more than one payment account, so cardAccounts is an array. For a standard single-account card, read the first entry.

Card number​

The card number is always extracted from the first side. Each account also reports whether the number passed Luhn checksum validation:

const account = result.cardAccounts[0];
console.log("Card number:", account.cardNumber);
console.log("Passes checksum:", account.cardNumberValid);

Expiry date​

The expiry date is a structured DateResult. Read the parsed month and year, or use originalString for the raw text as printed on the card:

const expiry = result.cardAccounts[0].expiryDate;
console.log("Month:", expiry.month);
console.log("Year:", expiry.year);
console.log("As printed:", expiry.originalString);

CVV​

The CVV is usually printed on the back of the card, so it is only present after the second side is scanned:

const cvv = result.cardAccounts[0].cvv;

Cardholder name and IBAN​

These are top-level fields and may be empty if the card does not contain them or extraction was disabled:

console.log("Cardholder:", result.cardholderName);
console.log("IBAN:", result.iban);

Disable fields you don't need​

By default, BlinkCard extracts all supported fields. If your integration only needs some of them, disable the rest so the SDK can finish scanning sooner (it concludes after a single side once all requested data is captured).