Sensitive values
GET /sensitive/applications/{applicationId}
returns the full values document validation needs: Social Security, passport and alien registration numbers
for every person on the application, and institution and account number for every bank account
GET /assets returns. GET /applications/{applicationId}/full
returns the same values (and the SSA claim numbers) inline with sensitive: read, encrypted the same way. Other
routes return the last 4 characters at most.
Encryption
Each value is a Base64 string, encrypted with the secret Fortress gives you:
- AES-256-GCM
- key: SHA-256 of the secret (32 bytes)
- a random 16-byte IV per value, so the same value never encrypts the same way twice
- Base64 of
[IV 16 bytes][AuthTag 16 bytes][ciphertext]
Decrypt in Node.js:
decipher.final() throws when the secret is wrong or the value was changed: treat that as a failure, never
as an empty value.
null
A value is null when Fortress has no usable value for it. Ask the applicant or a Fortress reviewer for it
as you would for a missing value. Minors never have a passport number.
Access
- Your API key must be enabled for sensitive values, and Fortress must have given you your secret. Until
both are done
/sensitiveanswers403. On/full, a key grantedsensitive: readthat names no partner gets200with the sensitive fields absent; a partner with no secret gets403 SENSITIVE_DATA_NOT_ENABLED. - The response is never cached (
Cache-Control: no-store). Do not store decrypted values longer than the validation needs, and never log them. - When your secret changes, Fortress tells you the cut-over time in advance. Values read after it decrypt only with the new secret; re-read any value that fails to decrypt around the cut-over.

