The guarantee
The card number is tokenized in the account holder’s browser by the vault provider’s own iframe, never reaches the Agent Vault backend or its data store, and is revealed only inside the proxy for a single fill that has already passed every authorization check. The proxy is run by Agent Vault. At fill time it fetches the number from the vault and holds it in memory while it types it into the merchant’s field. After that one fill, it keeps the number’s spellings in memory until the session closes, used only to scrub them from later output to the agent. See Screenshot redaction. See What this does not protect against.How it works
Adding a card
The property is structural rather than procedural. The dashboard page cannot read the card field because the browser’s same-origin policy forbids it. There is no code path in which the number arrives at the Agent Vault backend and is then discarded. Our card vault provider holds a current PCI DSS Level 1 attestation as a service provider. Agent Vault does not name the provider on this site, and makes no other compliance claim. See Compliance scope.What Agent Vault stores
The database also adds its own record id and creation time to every row. The
record has three more optional columns from earlier designs that nothing writes
any more; see Legacy fields. Neither a card number nor a CVV is
written to a card record.
Why the expiry is stored and the CVV is not
Why the expiry is stored and the CVV is not
PCI DSS requirement 3.3.1 forbids storing sensitive authentication data after
authorization, and the CVV is sensitive authentication data. The expiry is not:
it is card metadata in the same class as the brand and the last four digits.
Storing it lets the dashboard display a card without a call to the vault, and lets
the agent fill the expiry directly from the catalog. See
CVV policy.The stored copy is the expiry a normal checkout uses. The token catalog gives the
agent
expiryMonth and expiryYear from the card record, and the agent types
those values into the form. The proxy substitutes only the card number and the
security code, never the expiry. If the stored expiry is out of date, the merchant
receives the out of date expiry, even when the card vault holds a newer one.You cannot edit a saved card’s expiry in the dashboard. When a card is reissued
with a new expiry, delete the card on Cards and add it again. Agent cards on
the deleted card show No funding card until you pick the new card as their
Underlying card, and a limited API key needs the new card added to its access
again. See Delete a card.Revealing a card at fill time
Two details of this ordering matter:- The transaction is recorded before the reveal. This is what makes spending limits reliable, because an amount is reserved before any card number exists outside the vault. It also means a fill that fails after recording can leave a recorded spend; the error codes say which failures do.
- The binding checks run after the reveal and before typing. If the vault
token’s owner does not match the card’s account, or the revealed last four do
not match the card’s, nothing is typed and the fill fails with
card_blocked.
What the agent receives
nickname is the name you gave the
card, if any, so the agent can match “my Revolut card” or ask which card you mean. The number and CVV are
mock tokens.
Duplicate cards
The vault deduplicates tokenization, so the same card number can produce the same token id on more than one record: the same card added twice, or added by two accounts. Deleting one record never revokes a token that another record still uses, and a token tokenized for another account is never revoked on this account’s behalf.Deleting a card or an account
Deleting a card removes Agent Vault’s record of it at once, and from that moment no Agent Vault path can resolve its token. Revocation of the token in the vault is scheduled immediately afterwards and retried if the vault is temporarily unavailable. Account deletion does the same for every card. See Data and deletion.What this does not protect against
- Exposure in the proxy. The card number is in the proxy’s memory while it is typed, and its spellings stay there, for scrubbing only, until the session closes. The proxy is Agent Vault infrastructure. Attested detokenization is designed to narrow this and is off by default.
- The merchant page. Once typed, the number belongs to the merchant’s form, including any script the merchant runs on that page.
- A compromised dashboard account. Someone signed in as the holder can add cards and change the rules that govern them.
How to verify
1
Watch the add-card request
Open your browser’s developer tools on the Network tab, then add a test
card on the Cards page.
2
Find where the number went
The card number is sent only to the vault provider’s domain, from inside its
iframe. The request to Agent Vault carries the token id, last four, brand,
expiry, cardholder name, card name if you gave one, and billing address
reference, and no card number.
3
Check what the agent can read
Call
get_token_catalog. The card appears with its metadata and two tokens,
as in the example above.Legacy fields
Fields in the data model that are no longer written
Fields in the data model that are no longer written
Three optional columns remain in the card record from earlier storage designs.
No code path writes them, a cleanup migration removes any remaining values, and
they are dropped from the data model once empty.
Cards are now stored only in the vault, so authorization returns a vault token id
rather than a decrypted number.
Network tokenization
The card record has an optionalnetworkToken object for a card-scheme network
token. The data model and code support it, and it stays empty until scheme
onboarding is in place.
When it is populated, it will hold non-sensitive references only: an opaque,
scoped, revocable token reference, the token requestor id, the scheme, a
scheme-side reference and a provisioning status. Never a card number, never a
CVV, and never a cryptogram, which is single-use per transaction and is never
stored.
Related
CVV policy
Why the security code is never stored.
Attested detokenization
Revealing a card inside an attested enclave. Off by default.