Skip to main content

Card Status Lifecycle — Core Card Program

Overview

This document describes the complete card status lifecycle for the Core Card Program, including supported statuses, creation behavior, and valid status transitions along with the APIs that trigger them.


Supported Statuses

StatusDescriptionReversible?
ACTIVECard is active and can be used for transactions.
INACTIVECard is deactivated. Can only be reactivated via the Activate Card API.✅ Yes — via Activate Card API only
LOCKEDCard is temporarily locked (e.g. by cardholder request).✅ Yes — via Update Card Status API
LOSTCard has been reported lost.❌ No — terminal
STOLENCard has been reported stolen.❌ No — terminal
BLOCKEDCard has been blocked.❌ No — terminal

Card Creation

Card TypeInitial StatusBehavior
VirtualACTIVEAuto-activated on creation
PhysicalACTIVEAuto-activated on creation

Both virtual and physical cards under the Core program are created directly in ACTIVE status. There is no INACTIVE starting state at creation.


Status Transition Rules

  1. ACTIVEINACTIVE, LOCKED, LOST, STOLEN, BLOCKED All performed via the Update Card Status API.

  2. LOCKEDACTIVE Reactivation from LOCKED is allowed directly via the Update Card Status API — no separate activation call needed. This is the only valid transition from LOCKED.

  3. INACTIVEACTIVE Reactivation from INACTIVE requires the Activate Card API. It cannot be done via the Update Card Status API. This is the only valid transition from INACTIVE.

  4. Terminal statuses: LOST, STOLEN, BLOCKED These are reachable only from ACTIVE. Once a card reaches any of these statuses, no further transitions are allowed — the card is permanently blocked.

Note: LOCKED and INACTIVE cannot transition to each other, and neither can move directly to LOST, STOLEN, or BLOCKED. A card must return to ACTIVE first before any of those transitions are possible.


Full Transition Table

FromToMethod
(creation)ACTIVEAuto-activated (virtual & physical)
ACTIVEINACTIVEUpdate Card Status API
ACTIVELOCKED / LOST / STOLEN / BLOCKEDUpdate Card Status API
LOCKEDACTIVEUpdate Card Status API
INACTIVEACTIVEActivate Card API only
LOST / STOLEN / BLOCKEDNo further transitions (terminal)

Lifecycle Flowchart


┌───────────────────────────┐
│ Card Created │
│ (Virtual & Physical) │
└─────────────┬─────────────┘
│ auto-activated

┌────────────┐
┌─────────────►│ ACTIVE │◄─────────────┐
│ └──┬───┬───┬─┘ │
│ │ │ │ │
Update Card Status API │ │ │ Activate Card API
("LOCKED" → "ACTIVE") │ │ │ ("INACTIVE" → "ACTIVE")
│ │ │ │ │
┌────────────┐ │ │ │ ┌────────────┐
│ LOCKED │◄───────────┘ │ └────►│ INACTIVE │
└────────────┘ Update │ ▲ └────────────┘
(only "ACTIVE" Card Status │ │
reachable from here) API │ │
("LOCKED") │ Update Card Status API
│ ("INACTIVE")


┌────────────────────────────────────┐
│ Permanently Blocked States │
│ (LOST, STOLEN, BLOCKED) │
│ — reachable only from ACTIVE — │
│ — Terminal (no reactivation) — │
└────────────────────────────────────┘


Implementation / Validation Notes

  1. Auto-activate both virtual and physical cards at creation — do not route through INACTIVE.
  2. Allow LOCKEDACTIVE directly via the Update Card Status API.
  3. Block INACTIVEACTIVE on the Update Card Status API; require the Activate Card API for this specific transition.
  4. Once a card is LOST, STOLEN, or BLOCKED, reject all further status update requests.
  5. Log the actor/reason for every transition into a terminal status for audit and compliance purposes.