Skip to main content
A card number is stored only by Agent Vault’s card vault provider, and it is revealed only to the proxy, only for one authorized fill.

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.
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

The brand, last four and expiry are not secret, and the agent needs them to complete a form and choose between cards. 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

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

Status: not active. No card carries a network token.
The card record has an optional networkToken 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.

CVV policy

Why the security code is never stored.

Attested detokenization

Revealing a card inside an attested enclave. Off by default.