Skip to main content

CVC Sessions

CVC sessions temporarily store CVV/CVC data separately from the card token.

Overview

CVV/CVC codes are:
  • Never stored with the card token
  • Stored temporarily in a separate session
  • Deleted after use (for security)
  • Required by most PSPs for card-not-present transactions

Session Lifecycle

Creating a CVC Session

CVC sessions are created automatically when you tokenize with a CVV:
Response:

Session Properties

Using a CVC Session

Include cvc_session_id in proxy requests:

Session Expiration

Regular Sessions (90 seconds)

Solution: Re-tokenize with CVV to get a new session.

Test Sessions (1 year)

Test token CVC sessions last much longer for development convenience.

Without CVC Session

If you don’t have a CVC session:

Option 1: Skip CVV

Some PSPs allow transactions without CVV:

Option 2: Re-tokenize

Collect CVV again and create a new session:
With deduplication enabled, you’ll get the same token with a new CVC session.

Error Responses

Session Not Found

Causes:
  • Session expired (>90 seconds)
  • Session already used
  • Invalid session ID
  • Session from different project

Missing Session ID

Using ${cvv} placeholder without a CVC session:

Best Practices

1. Use CVC Sessions Promptly

The 90-second window is intentional for security. Design your flow to:
  1. Tokenize with CVV
  2. Immediately process payment
  3. Don’t store session IDs long-term

2. Handle Expiration Gracefully

3. Use Test Tokens for Development

Test tokens have 1-year CVC sessions, making development easier:

4. Delete a session when needed

You can delete a CVC session by ID (e.g. after a successful transaction) with DELETE /proxy/delete-cvc-session/ (API key auth). See API Reference → Proxy.

5. Don’t Store CVC Session IDs

CVC session IDs are temporary. Store only:
  • ✅ Token (tok_xxx)
  • ✅ Masked card number
  • ❌ CVC session ID (temporary)
  • ❌ CVV (never store)

Flow Diagrams

Standard Payment Flow

Recurring Payment Flow

Next Steps