The API distinguishes between data that identifies an account and data that would allow using it. The former stays readable because it is needed to operate; the latter is masked as soon as it leaves the flow that needs it.

Cards and CLABEs are treated differently

datatreatmentform
Card numberMasked••••1111 — last four digits only
CLABE (18 digits)ReadableKept in full
Phone numberMasked in verification contexts+52 55 ••••1234

The difference is not arbitrary. A CLABE is bank routing information: it identifies the destination account and is needed to reconcile a transfer. A card number is equivalent to the payment credential, and exposing it has different consequences.

Card masking keeps the last four digits because that is what lets a person recognise which of their cards it is, without the value being usable.

Where it applies

Masking covers the audit log, security events and responses returning receipt data. A card number appearing in a request path is also masked when logged, so it never remains in the clear in any history.

Receipts that arrive already masked

A receipt may arrive with the account already masked at source — common in receipts issued by banking apps. The validation flags this with is_masked.

That case changes what can be asserted about the result: with a partial account, the match is established over the available digits rather than the full number. The field lets the consumer know whether the verdict rested on complete data or on a truncated value.

BIN lookup

GET /v1/public/bin-lookup/{bin} accepts between 6 and 16 digits but uses only the first 6 to 8, and the response returns only the matched prefix, never the value received.

Even so, sending a full card number puts that value in the URL, where intermediaries outside this API may log it. The recommendation is to send only the prefix.