What is masked, and how
GET /api/investors/v1/:id (and every other investor read) returns these
fields masked:
Values of 4 characters or fewer mask to
**** entirely.
Masking is applied to: primary_holder (pan, email, mobile), every
joint_holders[] entry (pan, email, mobile), guardian.pan, every
nominees[].pan and nominees[].guardian.pan, contact (email, mobile), and
every bank_accounts[].account_no. KYC-status responses mask the PAN too.
Aadhaar is never collected by this API, so there is no Aadhaar field to mask.
Revealing a single field
Fields
Allowed field values
<n> is a zero-based index; <account_id> is a bank account’s bnk_... ID.
Any other value returns 400 VALIDATION_FAILED — “unknown or non-unmaskable
field”.
Unmasking is intended to require the
pii:read scope. Request it during
onboarding if your integration needs plaintext PII.Audit trail
Every unmask call writes an append-only record. If the audit write fails, the value is withheld and the call returns500 INTERNAL — access is never
granted without a recorded trail.
Platform-side protections
- Access logs record only
request_id, account, route, method and status — never request bodies, headers or query strings. - Exchange call logs redact PAN, bank account numbers, uploaded file contents and authorization headers before storage.
- Secrets and credentials are never returned by any endpoint, including
GET /api/auth/v1/me.