<div class="chartlet-wrapper chartlet-responsive chartlet-bp-640"><style>.chartlet-wrapper.chartlet-responsive{display:block;width:100%;container-type:inline-size}.chartlet-variant-mobile{display:none}@container (max-width:639px){.chartlet-bp-640 .chartlet-variant-desktop{display:none}.chartlet-bp-640 .chartlet-variant-mobile{display:block}}</style><style>.chartlet-stage{position:relative;display:inline-block;max-width:100%;vertical-align:top}.chartlet-stage>svg{display:block}.chartlet-hotspot{position:absolute;border-radius:8px;cursor:pointer}.chartlet-focus{margin:0 0 12px 0;font-size:13px}.chartlet-focus summary{cursor:pointer;min-height:24px}.chartlet-focus fieldset{border:none;padding:0;margin:4px 0 0 0}.chartlet-focus label{display:inline-flex;align-items:center;min-height:44px;margin-right:14px;cursor:pointer;white-space:nowrap}.chartlet-focus input{margin-right:4px}.chartlet-focus input:focus-visible{outline:2px solid #2563eb;outline-offset:2px}.chartlet-wrapper:has(.chartlet-focus-node:checked) #chartlet-d5472d7361b74f66 .chartlet-f{opacity:.18}#chartlet-d5472d7361b74f66-hs-0{left:43.6%;top:1.337%;width:10.4%;height:4.678%}#chartlet-d5472d7361b74f66-hs-1{left:43.6%;top:13.033%;width:10.4%;height:4.01%}#chartlet-d5472d7361b74f66-hs-2{left:43.2%;top:27.068%;width:11.2%;height:3.342%}#chartlet-d5472d7361b74f66-hs-3{left:42%;top:40.769%;width:13.6%;height:3.342%}#chartlet-d5472d7361b74f66-hs-4{left:28.8%;top:58.814%;width:10.4%;height:4.678%}#chartlet-d5472d7361b74f66-hs-5{left:33.6%;top:79.532%;width:10.4%;height:4.01%}#chartlet-d5472d7361b74f66-hs-6{left:42.8%;top:88.221%;width:12%;height:3.342%}#chartlet-d5472d7361b74f66-hs-7{left:19.6%;top:68.17%;width:18.4%;height:5.347%}#chartlet-d5472d7361b74f66-hs-8{left:60%;top:40.434%;width:20%;height:4.01%}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-0:checked) #chartlet-d5472d7361b74f66 .chartlet-f-0{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-0:checked) #chartlet-d5472d7361b74f66 .chartlet-n-0 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-0:checked) #chartlet-d5472d7361b74f66 .chartlet-n-0 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-1:checked) #chartlet-d5472d7361b74f66 .chartlet-f-1{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-1:checked) #chartlet-d5472d7361b74f66 .chartlet-n-1 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-1:checked) #chartlet-d5472d7361b74f66 .chartlet-n-1 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-2:checked) #chartlet-d5472d7361b74f66 .chartlet-f-2{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-2:checked) #chartlet-d5472d7361b74f66 .chartlet-n-2 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-2:checked) #chartlet-d5472d7361b74f66 .chartlet-n-2 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-3:checked) #chartlet-d5472d7361b74f66 .chartlet-f-3{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-3:checked) #chartlet-d5472d7361b74f66 .chartlet-n-3 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-3:checked) #chartlet-d5472d7361b74f66 .chartlet-n-3 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-4:checked) #chartlet-d5472d7361b74f66 .chartlet-f-4{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-4:checked) #chartlet-d5472d7361b74f66 .chartlet-n-4 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-4:checked) #chartlet-d5472d7361b74f66 .chartlet-n-4 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-5:checked) #chartlet-d5472d7361b74f66 .chartlet-f-5{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-5:checked) #chartlet-d5472d7361b74f66 .chartlet-n-5 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-5:checked) #chartlet-d5472d7361b74f66 .chartlet-n-5 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-6:checked) #chartlet-d5472d7361b74f66 .chartlet-f-6{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-6:checked) #chartlet-d5472d7361b74f66 .chartlet-n-6 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-6:checked) #chartlet-d5472d7361b74f66 .chartlet-n-6 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-7:checked) #chartlet-d5472d7361b74f66 .chartlet-f-7{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-7:checked) #chartlet-d5472d7361b74f66 .chartlet-n-7 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-7:checked) #chartlet-d5472d7361b74f66 .chartlet-n-7 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-8:checked) #chartlet-d5472d7361b74f66 .chartlet-f-8{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-8:checked) #chartlet-d5472d7361b74f66 .chartlet-n-8 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-8:checked) #chartlet-d5472d7361b74f66 .chartlet-n-8 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(.chartlet-focus-node:checked) #chartlet-d5472d7361b74f66-m .chartlet-f{opacity:.18}#chartlet-d5472d7361b74f66-m-hs-0{left:40.909%;top:1.21%;width:18.182%;height:4.236%}#chartlet-d5472d7361b74f66-m-hs-1{left:40%;top:12.103%;width:20%;height:3.631%}#chartlet-d5472d7361b74f66-m-hs-2{left:37.273%;top:25.416%;width:25.455%;height:3.026%}#chartlet-d5472d7361b74f66-m-hs-3{left:40%;top:39.032%;width:20%;height:4.236%}#chartlet-d5472d7361b74f66-m-hs-4{left:10%;top:57.791%;width:23.636%;height:4.236%}#chartlet-d5472d7361b74f66-m-hs-5{left:27.273%;top:78.064%;width:16.364%;height:3.631%}#chartlet-d5472d7361b74f66-m-hs-6{left:36.364%;top:85.93%;width:27.273%;height:3.026%}#chartlet-d5472d7361b74f66-m-hs-7{left:8.182%;top:65.053%;width:27.273%;height:7.262%}#chartlet-d5472d7361b74f66-m-hs-8{left:66.364%;top:38.124%;width:25.455%;height:6.051%}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-0:checked) #chartlet-d5472d7361b74f66-m .chartlet-f-0{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-0:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-0 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-0:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-0 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-1:checked) #chartlet-d5472d7361b74f66-m .chartlet-f-1{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-1:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-1 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-1:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-1 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-2:checked) #chartlet-d5472d7361b74f66-m .chartlet-f-2{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-2:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-2 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-2:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-2 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-3:checked) #chartlet-d5472d7361b74f66-m .chartlet-f-3{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-3:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-3 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-3:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-3 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-4:checked) #chartlet-d5472d7361b74f66-m .chartlet-f-4{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-4:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-4 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-4:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-4 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-5:checked) #chartlet-d5472d7361b74f66-m .chartlet-f-5{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-5:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-5 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-5:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-5 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-6:checked) #chartlet-d5472d7361b74f66-m .chartlet-f-6{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-6:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-6 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-6:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-6 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-7:checked) #chartlet-d5472d7361b74f66-m .chartlet-f-7{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-7:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-7 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-7:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-7 .chartlet-seq-box{stroke-width:3}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-8:checked) #chartlet-d5472d7361b74f66-m .chartlet-f-8{opacity:1}.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-8:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-8 .chartlet-flow-node,.chartlet-wrapper:has(#chartlet-d5472d7361b74f66-focus-8:checked) #chartlet-d5472d7361b74f66-m .chartlet-n-8 .chartlet-seq-box{stroke-width:3}</style><details class="chartlet-focus"><summary>Focus</summary><fieldset><label><input type="radio" name="chartlet-d5472d7361b74f66-focus" checked> Show all</label><label><input type="radio" name="chartlet-d5472d7361b74f66-focus" class="chartlet-focus-node" id="chartlet-d5472d7361b74f66-focus-0"> Shopper</label><label><input type="radio" name="chartlet-d5472d7361b74f66-focus" class="chartlet-focus-node" id="chartlet-d5472d7361b74f66-focus-1"> Checkout</label><label><input type="radio" name="chartlet-d5472d7361b74f66-focus" class="chartlet-focus-node" id="chartlet-d5472d7361b74f66-focus-2"> API gateway</label><label><input type="radio" name="chartlet-d5472d7361b74f66-focus" class="chartlet-focus-node" id="chartlet-d5472d7361b74f66-focus-3"> Payment service</label><label><input type="radio" name="chartlet-d5472d7361b74f66-focus" class="chartlet-focus-node" id="chartlet-d5472d7361b74f66-focus-4"> Token vault</label><label><input type="radio" name="chartlet-d5472d7361b74f66-focus" class="chartlet-focus-node" id="chartlet-d5472d7361b74f66-focus-5"> Ledger</label><label><input type="radio" name="chartlet-d5472d7361b74f66-focus" class="chartlet-focus-node" id="chartlet-d5472d7361b74f66-focus-6"> Card provider</label><label><input type="radio" name="chartlet-d5472d7361b74f66-focus" class="chartlet-focus-node" id="chartlet-d5472d7361b74f66-focus-7"> Card numbers never leave the vault; everything else sees tokens.</label><label><input type="radio" name="chartlet-d5472d7361b74f66-focus" class="chartlet-focus-node" id="chartlet-d5472d7361b74f66-focus-8"> Audited once a year; changes need a second reviewer.</label></fieldset></details><figure class="chartlet-figure" data-viz="chart"><figcaption>Payments and what to know about them</figcaption><div class="chartlet-variant-desktop"><div class="chartlet-stage"><svg xmlns="http://www.w3.org/2000/svg" width="1000" height="1197" viewBox="0 0 1000 1197" id="chartlet-d5472d7361b74f66" role="img" aria-labelledby="chartlet-d5472d7361b74f66-title chartlet-d5472d7361b74f66-description" class="chartlet-root"><title id="chartlet-d5472d7361b74f66-title">Payments and what to know about them</title><desc id="chartlet-d5472d7361b74f66-description">Architecture diagram with 7 components and 6 connections in 2 boundaries. Cloud account: API gateway, Ledger, Card data zone. Card data zone (in Cloud account): Payment service, Token vault. Main path: Shopper → Checkout → API gateway → Payment service → Card provider. Most connected: Payment service (4 connections). Nothing leads into Shopper. Nothing leads out of Token vault, Ledger and Card provider. Bottleneck: API gateway; without it the diagram falls apart. Shopper (person): connects to Checkout (pays). Checkout (frontend): connects to API gateway (via HTTPS). API gateway (service): connects to Payment service (charge). Payment service (service): connects to Token vault (tokenizes), Card provider (authorizes, via HTTPS) and Ledger (records, via SQL). Token vault (security): no outgoing connection. Ledger (database): no outgoing connection. Card provider (external system): no outgoing connection. Note on Token vault: Card numbers never leave the vault; everything else sees tokens. Note on Card data zone: Audited once a year; changes need a second reviewer. Note: Figures and names are illustrative; the diagram shows the target state.</desc><style>.chartlet-root{--chartlet-text:#172033;--chartlet-muted:#344054;--chartlet-grid:#d9dee8;--chartlet-zero:#667085;--chartlet-accent:#2563eb;--chartlet-background:#fff;--chartlet-color-1:#2563eb;--chartlet-color-2:#c2410c;--chartlet-color-3:#475569;--chartlet-color-4:#111827;max-width:100%;height:auto;font-family:Inter,ui-sans-serif,system-ui,sans-serif;color:var(--chartlet-text)}#chartlet-d5472d7361b74f66 .chartlet-title{font-size:22px;font-weight:650;fill:var(--chartlet-text)}#chartlet-d5472d7361b74f66 .chartlet-label,#chartlet-d5472d7361b74f66 .chartlet-tick,#chartlet-d5472d7361b74f66 .chartlet-value,#chartlet-d5472d7361b74f66 .chartlet-value-inverse,#chartlet-d5472d7361b74f66 .chartlet-axis-title{font-size:12px;fill:var(--chartlet-muted)}#chartlet-d5472d7361b74f66 .chartlet-value,#chartlet-d5472d7361b74f66 .chartlet-value-inverse{font-weight:600}#chartlet-d5472d7361b74f66 .chartlet-value{fill:var(--chartlet-text)}#chartlet-d5472d7361b74f66 .chartlet-value-inverse{fill:var(--chartlet-background)}#chartlet-d5472d7361b74f66 .chartlet-axis-title{font-weight:600}#chartlet-d5472d7361b74f66 .chartlet-grid{stroke:var(--chartlet-grid);stroke-width:1}#chartlet-d5472d7361b74f66 .chartlet-zero{stroke:var(--chartlet-zero);stroke-width:1.5}#chartlet-d5472d7361b74f66 .chartlet-bar,#chartlet-d5472d7361b74f66 .chartlet-point{fill:var(--chartlet-accent)}#chartlet-d5472d7361b74f66 .chartlet-line{fill:none;stroke:var(--chartlet-accent);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}#chartlet-d5472d7361b74f66 .chartlet-background{fill:var(--chartlet-background)}.chartlet-root{--chartlet-node:#eef3fd;--chartlet-lane:#f7f9fc;--chartlet-lane-head:#eef1f6;--chartlet-shadow:rgba(16,24,40,.09);--chartlet-role-blue:#2563eb;--chartlet-role-blue-fill:#eef3fd;--chartlet-role-green:#15803d;--chartlet-role-green-fill:#ecfdf3;--chartlet-role-amber:#b45309;--chartlet-role-amber-fill:#fff7e8;--chartlet-role-teal:#0f766e;--chartlet-role-teal-fill:#e9faf7;--chartlet-role-violet:#6d28d9;--chartlet-role-violet-fill:#f3efff;--chartlet-role-gray:#667085;--chartlet-role-gray-fill:#f7f8fa;--chartlet-role-red:#b42318;--chartlet-role-red-fill:#fef3f2}.chartlet-root.chartlet-theme-dark{--chartlet-node:#1a2436;--chartlet-lane:#121925;--chartlet-lane-head:#18212f;--chartlet-shadow:rgba(0,0,0,.45);--chartlet-role-blue:#7ea6ff;--chartlet-role-blue-fill:#1a2436;--chartlet-role-green:#4ade80;--chartlet-role-green-fill:#132a1d;--chartlet-role-amber:#fbbf24;--chartlet-role-amber-fill:#2b2210;--chartlet-role-teal:#2dd4bf;--chartlet-role-teal-fill:#0f2a27;--chartlet-role-violet:#b69cff;--chartlet-role-violet-fill:#231c38;--chartlet-role-gray:#9aa7bd;--chartlet-role-gray-fill:#161d29;--chartlet-role-red:#f97066;--chartlet-role-red-fill:#2d1616}#chartlet-d5472d7361b74f66 .chartlet-role-blue{fill:var(--chartlet-role-blue-fill);stroke:var(--chartlet-role-blue)}#chartlet-d5472d7361b74f66 .chartlet-role-green{fill:var(--chartlet-role-green-fill);stroke:var(--chartlet-role-green)}#chartlet-d5472d7361b74f66 .chartlet-role-amber{fill:var(--chartlet-role-amber-fill);stroke:var(--chartlet-role-amber)}#chartlet-d5472d7361b74f66 .chartlet-role-teal{fill:var(--chartlet-role-teal-fill);stroke:var(--chartlet-role-teal)}#chartlet-d5472d7361b74f66 .chartlet-role-violet{fill:var(--chartlet-role-violet-fill);stroke:var(--chartlet-role-violet)}#chartlet-d5472d7361b74f66 .chartlet-role-gray{fill:var(--chartlet-role-gray-fill);stroke:var(--chartlet-role-gray)}#chartlet-d5472d7361b74f66 .chartlet-role-red{fill:var(--chartlet-role-red-fill);stroke:var(--chartlet-role-red)}#chartlet-d5472d7361b74f66 .chartlet-diagram-rim{fill:none;stroke:var(--chartlet-role-teal);stroke-width:1.5}#chartlet-d5472d7361b74f66 .chartlet-diagram-shadow{fill:var(--chartlet-shadow);stroke:none;rx:7px}#chartlet-d5472d7361b74f66 .chartlet-diagram-chip{fill:var(--chartlet-background);stroke:var(--chartlet-grid);stroke-width:1;rx:4px}#chartlet-d5472d7361b74f66 .chartlet-diagram-chip-text{font-size:12px;fill:var(--chartlet-text)}#chartlet-d5472d7361b74f66 .chartlet-diagram-badge{fill:var(--chartlet-accent);stroke:var(--chartlet-background);stroke-width:2}#chartlet-d5472d7361b74f66 .chartlet-diagram-badge-text{font-size:10px;font-weight:700;fill:var(--chartlet-background)}#chartlet-d5472d7361b74f66 .chartlet-flow-node{stroke-width:1.5;stroke-linejoin:round;rx:7px}#chartlet-d5472d7361b74f66 .chartlet-flow-start{stroke-width:2}#chartlet-d5472d7361b74f66 .chartlet-flow-end{stroke-width:3}#chartlet-d5472d7361b74f66 .chartlet-flow-external{stroke-dasharray:5 3}#chartlet-d5472d7361b74f66 .chartlet-flow-inner{stroke:var(--chartlet-role-blue);stroke-width:1}#chartlet-d5472d7361b74f66 .chartlet-flow-label{font-size:13px;font-weight:600;fill:var(--chartlet-text)}#chartlet-d5472d7361b74f66 .chartlet-flow-sublabel{font-size:11px;fill:var(--chartlet-muted)}#chartlet-d5472d7361b74f66 .chartlet-flow-edge{fill:none;stroke:var(--chartlet-zero);stroke-width:1.4;stroke-linejoin:round}#chartlet-d5472d7361b74f66 .chartlet-flow-dashed{stroke-dasharray:5 4}#chartlet-d5472d7361b74f66 .chartlet-flow-dotted{stroke-dasharray:1 4;stroke-linecap:round}#chartlet-d5472d7361b74f66 .chartlet-flow-main{stroke:var(--chartlet-accent);stroke-width:2.2}#chartlet-d5472d7361b74f66 .chartlet-flow-head{fill:var(--chartlet-zero);stroke:var(--chartlet-zero);stroke-width:1;stroke-linejoin:round}#chartlet-d5472d7361b74f66 .chartlet-flow-main-head{fill:var(--chartlet-accent);stroke:var(--chartlet-accent)}#chartlet-d5472d7361b74f66 .chartlet-flow-lane{fill:var(--chartlet-lane);stroke:var(--chartlet-grid);stroke-width:1}#chartlet-d5472d7361b74f66 .chartlet-flow-lane-alt{fill:var(--chartlet-background)}#chartlet-d5472d7361b74f66 .chartlet-flow-lane-head{fill:var(--chartlet-lane-head);stroke:none}#chartlet-d5472d7361b74f66 .chartlet-flow-lane-label{font-size:11px;font-weight:650;fill:var(--chartlet-muted);letter-spacing:.04em}#chartlet-d5472d7361b74f66 .chartlet-flow-group{fill:var(--chartlet-accent);fill-opacity:.04;stroke:var(--chartlet-zero);stroke-width:1;stroke-dasharray:4 3;rx:10px}#chartlet-d5472d7361b74f66 .chartlet-flow-group-label{font-size:11px;font-weight:600;fill:var(--chartlet-muted)}#chartlet-d5472d7361b74f66 .chartlet-arch-head{fill:var(--chartlet-role-violet-fill);stroke:var(--chartlet-role-violet);stroke-width:1.5}#chartlet-d5472d7361b74f66 .chartlet-arch-dot{fill:var(--chartlet-role-blue);stroke:none}</style><rect x="172" y="296" width="652" height="716" class="chartlet-flow-group"/><text x="180" y="309" text-anchor="start" class="chartlet-flow-group-label">Cloud account</text><rect x="184" y="456" width="628" height="436" class="chartlet-flow-group"/><text x="192" y="469" text-anchor="start" class="chartlet-flow-group-label">Card data zone</text><g class="chartlet-f chartlet-f-0 chartlet-f-1"><polyline points="488,72 488,148" class="chartlet-flow-edge chartlet-flow-main"><title>Shopper → Checkout: pays</title></polyline><polyline points="484.5,148 488,156 491.5,148 484.5,148" class="chartlet-flow-head chartlet-flow-main-head"/></g><g class="chartlet-f chartlet-f-1 chartlet-f-2"><polyline points="488,204 488,316" class="chartlet-flow-edge chartlet-flow-main"><title>Checkout → API gateway: [HTTPS]</title></polyline><polyline points="484.5,316 488,324 491.5,316 484.5,316" class="chartlet-flow-head chartlet-flow-main-head"/></g><g class="chartlet-f chartlet-f-2 chartlet-f-3"><polyline points="488,364 488,480" class="chartlet-flow-edge chartlet-flow-main"><title>API gateway → Payment service: charge</title></polyline><polyline points="484.5,480 488,488 491.5,480 484.5,480" class="chartlet-flow-head chartlet-flow-main-head"/></g><g class="chartlet-f chartlet-f-3 chartlet-f-4"><polyline points="440,528 440,650.146 340,650.146 340,696" class="chartlet-flow-edge"><title>Payment service → Token vault: tokenizes</title></polyline><polyline points="336.5,696 340,704 343.5,696 336.5,696" class="chartlet-flow-head"/></g><g class="chartlet-f chartlet-f-3 chartlet-f-6"><polyline points="488,528 488,1048" class="chartlet-flow-edge chartlet-flow-main"><title>Payment service → Card provider: authorizes [HTTPS]</title></polyline><polyline points="484.5,1048 488,1056 491.5,1048 484.5,1048" class="chartlet-flow-head chartlet-flow-main-head"/></g><g class="chartlet-f chartlet-f-3 chartlet-f-5"><polyline points="464,528 464,667.024 440,667.024 440,916.569 388,916.569 388,944" class="chartlet-flow-edge"><title>Payment service → Ledger: records [SQL]</title></polyline><polyline points="384.5,944 388,952 391.5,944 384.5,944" class="chartlet-flow-head"/></g><g class="chartlet-f chartlet-f-4 chartlet-f-7"><polyline points="340,760 340,779.691 288,779.691 288,816" class="chartlet-flow-edge chartlet-flow-dotted"/></g><g class="chartlet-f chartlet-n-0 chartlet-f-0 chartlet-f-1"></g><g class="chartlet-f chartlet-n-1 chartlet-f-0 chartlet-f-1 chartlet-f-2"></g><g class="chartlet-f chartlet-n-2 chartlet-f-1 chartlet-f-2 chartlet-f-3"></g><g class="chartlet-f chartlet-n-3 chartlet-f-2 chartlet-f-3 chartlet-f-4 chartlet-f-5 chartlet-f-6"></g><g class="chartlet-f chartlet-n-4 chartlet-f-3 chartlet-f-4 chartlet-f-7"></g><g class="chartlet-f chartlet-n-5 chartlet-f-3 chartlet-f-5"></g><g class="chartlet-f chartlet-n-6 chartlet-f-3 chartlet-f-6"></g><g class="chartlet-f chartlet-n-7 chartlet-f-4 chartlet-f-7"></g><g class="chartlet-f chartlet-n-8 chartlet-f-8"></g><g class="chartlet-f chartlet-f-0 chartlet-f-1"><rect x="492" y="77" width="36.88" height="21" class="chartlet-diagram-chip"/><text x="497" y="91" text-anchor="start" class="chartlet-diagram-chip-text">pays</text></g><g class="chartlet-f chartlet-f-1 chartlet-f-2"><rect x="492" y="209" width="63.64" height="21" class="chartlet-diagram-chip"/><text x="497" y="223" text-anchor="start" class="chartlet-diagram-chip-text">[HTTPS]</text></g><g class="chartlet-f chartlet-f-2 chartlet-f-3"><rect x="492" y="369" width="50.32" height="21" class="chartlet-diagram-chip"/><text x="497" y="383" text-anchor="start" class="chartlet-diagram-chip-text">charge</text></g><g class="chartlet-f chartlet-f-3 chartlet-f-4"><rect x="368.64" y="533" width="67.36" height="21" class="chartlet-diagram-chip"/><text x="431" y="547" text-anchor="end" class="chartlet-diagram-chip-text">tokenizes</text></g><g class="chartlet-f chartlet-f-3 chartlet-f-6"><rect x="492" y="533" width="74.08" height="36" class="chartlet-diagram-chip"/><text x="497" y="547" text-anchor="start" class="chartlet-diagram-chip-text">authorizes</text><text x="497" y="562" text-anchor="start" class="chartlet-diagram-chip-text">[HTTPS]</text></g><g class="chartlet-f chartlet-f-3 chartlet-f-5"><rect x="385.48" y="1015" width="57.04" height="36" class="chartlet-diagram-chip"/><text x="414" y="1029" text-anchor="middle" class="chartlet-diagram-chip-text">records</text><text x="414" y="1044" text-anchor="middle" class="chartlet-diagram-chip-text">[SQL]</text></g><g class="chartlet-f chartlet-n-0 chartlet-f-0 chartlet-f-1"><rect x="436" y="18.5" width="104" height="56" class="chartlet-diagram-shadow"/><rect x="436" y="16" width="104" height="56" class="chartlet-flow-node chartlet-role-violet"><title>Shopper</title></rect><circle cx="488" cy="27" r="6" class="chartlet-arch-head"/><text x="488" y="56.5" text-anchor="middle" class="chartlet-flow-label">Shopper</text></g><g class="chartlet-f chartlet-n-1 chartlet-f-0 chartlet-f-1 chartlet-f-2"><rect x="436" y="158.5" width="104" height="48" class="chartlet-diagram-shadow"/><rect x="436" y="156" width="104" height="48" class="chartlet-flow-node chartlet-role-blue"><title>Checkout</title></rect><line x1="436" y1="168" x2="540" y2="168" class="chartlet-flow-inner"/><circle cx="444" cy="162" r="1.8" class="chartlet-arch-dot"/><circle cx="450" cy="162" r="1.8" class="chartlet-arch-dot"/><circle cx="456" cy="162" r="1.8" class="chartlet-arch-dot"/><text x="488" y="190.5" text-anchor="middle" class="chartlet-flow-label">Checkout</text></g><g class="chartlet-f chartlet-n-2 chartlet-f-1 chartlet-f-2 chartlet-f-3"><rect x="432" y="326.5" width="112" height="40" class="chartlet-diagram-shadow"/><rect x="432" y="324" width="112" height="40" class="chartlet-flow-node chartlet-role-blue"><title>API gateway</title></rect><text x="488" y="348.5" text-anchor="middle" class="chartlet-flow-label">API gateway</text></g><g class="chartlet-f chartlet-n-3 chartlet-f-2 chartlet-f-3 chartlet-f-4 chartlet-f-5 chartlet-f-6"><rect x="420" y="490.5" width="136" height="40" class="chartlet-diagram-shadow"/><rect x="420" y="488" width="136" height="40" class="chartlet-flow-node chartlet-role-blue"><title>Payment service</title></rect><text x="488" y="512.5" text-anchor="middle" class="chartlet-flow-label">Payment service</text></g><g class="chartlet-f chartlet-n-4 chartlet-f-3 chartlet-f-4 chartlet-f-7"><polyline points="288,706.5 392,706.5 392,740.1 340,762.5 288,740.1 288,706.5" class="chartlet-diagram-shadow"/><polyline points="288,704 392,704 392,737.6 340,760 288,737.6 288,704" class="chartlet-flow-node chartlet-role-red"><title>Token vault</title></polyline><text x="340" y="730.5" text-anchor="middle" class="chartlet-flow-label">Token vault</text></g><g class="chartlet-f chartlet-n-5 chartlet-f-3 chartlet-f-5"><polyline points="336,959.5 336,997.5 337.772,998.794 342.967,1000 351.23,1001.036 362,1001.83 374.541,1002.33 388,1002.5 401.459,1002.33 414,1001.83 424.77,1001.036 433.033,1000 438.228,998.794 440,997.5 440,959.5 438.228,958.206 433.033,957 424.77,955.964 414,955.17 401.459,954.67 388,954.5 374.541,954.67 362,955.17 351.23,955.964 342.967,957 337.772,958.206 336,959.5 336,959.5" class="chartlet-diagram-shadow"/><polyline points="336,957 336,995 337.772,996.294 342.967,997.5 351.23,998.536 362,999.33 374.541,999.83 388,1000 401.459,999.83 414,999.33 424.77,998.536 433.033,997.5 438.228,996.294 440,995 440,957 438.228,955.706 433.033,954.5 424.77,953.464 414,952.67 401.459,952.17 388,952 374.541,952.17 362,952.67 351.23,953.464 342.967,954.5 337.772,955.706 336,957 336,957" class="chartlet-flow-node chartlet-role-teal"><title>Ledger</title></polyline><polyline points="336,957 337.772,958.294 342.967,959.5 351.23,960.536 362,961.33 374.541,961.83 388,962 401.459,961.83 414,961.33 424.77,960.536 433.033,959.5 438.228,958.294 440,957" class="chartlet-diagram-rim"/><text x="388" y="983.5" text-anchor="middle" class="chartlet-flow-label">Ledger</text></g><g class="chartlet-f chartlet-n-6 chartlet-f-3 chartlet-f-6"><rect x="428" y="1058.5" width="120" height="40" class="chartlet-diagram-shadow"/><rect x="428" y="1056" width="120" height="40" class="chartlet-flow-node chartlet-flow-external chartlet-role-gray"><title>Card provider</title></rect><text x="488" y="1080.5" text-anchor="middle" class="chartlet-flow-label">Card provider</text></g><g class="chartlet-f chartlet-n-7 chartlet-f-4 chartlet-f-7"><polyline points="196,816 370,816 380,826 380,880 196,880 196,816" class="chartlet-flow-node chartlet-role-amber"><title>Card numbers never leave the vault; everything else sees tokens.</title></polyline><polyline points="370,816 370,826 380,826" class="chartlet-flow-node chartlet-role-amber"/><text x="208" y="835" text-anchor="start" class="chartlet-diagram-chip-text">Card numbers never leave</text><text x="208" y="850" text-anchor="start" class="chartlet-diagram-chip-text">the vault; everything else</text><text x="208" y="865" text-anchor="start" class="chartlet-diagram-chip-text">sees tokens.</text></g><g class="chartlet-f chartlet-n-8 chartlet-f-8"><polyline points="600,484 790,484 800,494 800,532 600,532 600,484" class="chartlet-flow-node chartlet-role-amber"><title>Audited once a year; changes need a second reviewer.</title></polyline><polyline points="790,484 790,494 800,494" class="chartlet-flow-node chartlet-role-amber"/><text x="612" y="503" text-anchor="start" class="chartlet-diagram-chip-text">Audited once a year; changes</text><text x="612" y="518" text-anchor="start" class="chartlet-diagram-chip-text">need a second reviewer.</text></g><polyline points="24,1120 185.6,1120 195.6,1130 195.6,1181 24,1181 24,1120" class="chartlet-flow-node chartlet-role-amber"><title>Figures and names are illustrative; the diagram shows the target state.</title></polyline><polyline points="185.6,1120 185.6,1130 195.6,1130" class="chartlet-flow-node chartlet-role-amber"/><text x="36" y="1139" text-anchor="start" class="chartlet-diagram-chip-text">Figures and names are</text><text x="36" y="1154" text-anchor="start" class="chartlet-diagram-chip-text">illustrative; the diagram</text><text x="36" y="1169" text-anchor="start" class="chartlet-diagram-chip-text">shows the target state.</text></svg><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-hs-0" for="chartlet-d5472d7361b74f66-focus-0"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-hs-1" for="chartlet-d5472d7361b74f66-focus-1"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-hs-2" for="chartlet-d5472d7361b74f66-focus-2"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-hs-3" for="chartlet-d5472d7361b74f66-focus-3"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-hs-4" for="chartlet-d5472d7361b74f66-focus-4"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-hs-5" for="chartlet-d5472d7361b74f66-focus-5"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-hs-6" for="chartlet-d5472d7361b74f66-focus-6"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-hs-7" for="chartlet-d5472d7361b74f66-focus-7"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-hs-8" for="chartlet-d5472d7361b74f66-focus-8"></label></div></div><div class="chartlet-variant-mobile"><div class="chartlet-stage"><svg xmlns="http://www.w3.org/2000/svg" width="440" height="1322" viewBox="0 0 440 1322" id="chartlet-d5472d7361b74f66-m" role="img" aria-labelledby="chartlet-d5472d7361b74f66-m-title chartlet-d5472d7361b74f66-m-description" class="chartlet-root"><title id="chartlet-d5472d7361b74f66-m-title">Payments and what to know about them</title><desc id="chartlet-d5472d7361b74f66-m-description">Architecture diagram with 7 components and 6 connections in 2 boundaries. Cloud account: API gateway, Ledger, Card data zone. Card data zone (in Cloud account): Payment service, Token vault. Main path: Shopper → Checkout → API gateway → Payment service → Card provider. Most connected: Payment service (4 connections). Nothing leads into Shopper. Nothing leads out of Token vault, Ledger and Card provider. Bottleneck: API gateway; without it the diagram falls apart. Shopper (person): connects to Checkout (pays). Checkout (frontend): connects to API gateway (via HTTPS). API gateway (service): connects to Payment service (charge). Payment service (service): connects to Token vault (tokenizes), Card provider (authorizes, via HTTPS) and Ledger (records, via SQL). Token vault (security): no outgoing connection. Ledger (database): no outgoing connection. Card provider (external system): no outgoing connection. Note on Token vault: Card numbers never leave the vault; everything else sees tokens. Note on Card data zone: Audited once a year; changes need a second reviewer. Note: Figures and names are illustrative; the diagram shows the target state.</desc><style>.chartlet-root{--chartlet-text:#172033;--chartlet-muted:#344054;--chartlet-grid:#d9dee8;--chartlet-zero:#667085;--chartlet-accent:#2563eb;--chartlet-background:#fff;--chartlet-color-1:#2563eb;--chartlet-color-2:#c2410c;--chartlet-color-3:#475569;--chartlet-color-4:#111827;max-width:100%;height:auto;font-family:Inter,ui-sans-serif,system-ui,sans-serif;color:var(--chartlet-text)}#chartlet-d5472d7361b74f66-m .chartlet-title{font-size:22px;font-weight:650;fill:var(--chartlet-text)}#chartlet-d5472d7361b74f66-m .chartlet-label,#chartlet-d5472d7361b74f66-m .chartlet-tick,#chartlet-d5472d7361b74f66-m .chartlet-value,#chartlet-d5472d7361b74f66-m .chartlet-value-inverse,#chartlet-d5472d7361b74f66-m .chartlet-axis-title{font-size:12px;fill:var(--chartlet-muted)}#chartlet-d5472d7361b74f66-m .chartlet-value,#chartlet-d5472d7361b74f66-m .chartlet-value-inverse{font-weight:600}#chartlet-d5472d7361b74f66-m .chartlet-value{fill:var(--chartlet-text)}#chartlet-d5472d7361b74f66-m .chartlet-value-inverse{fill:var(--chartlet-background)}#chartlet-d5472d7361b74f66-m .chartlet-axis-title{font-weight:600}#chartlet-d5472d7361b74f66-m .chartlet-grid{stroke:var(--chartlet-grid);stroke-width:1}#chartlet-d5472d7361b74f66-m .chartlet-zero{stroke:var(--chartlet-zero);stroke-width:1.5}#chartlet-d5472d7361b74f66-m .chartlet-bar,#chartlet-d5472d7361b74f66-m .chartlet-point{fill:var(--chartlet-accent)}#chartlet-d5472d7361b74f66-m .chartlet-line{fill:none;stroke:var(--chartlet-accent);stroke-width:3;stroke-linecap:round;stroke-linejoin:round}#chartlet-d5472d7361b74f66-m .chartlet-background{fill:var(--chartlet-background)}#chartlet-d5472d7361b74f66-m .chartlet-title-small{font-size:18px}.chartlet-root{--chartlet-node:#eef3fd;--chartlet-lane:#f7f9fc;--chartlet-lane-head:#eef1f6;--chartlet-shadow:rgba(16,24,40,.09);--chartlet-role-blue:#2563eb;--chartlet-role-blue-fill:#eef3fd;--chartlet-role-green:#15803d;--chartlet-role-green-fill:#ecfdf3;--chartlet-role-amber:#b45309;--chartlet-role-amber-fill:#fff7e8;--chartlet-role-teal:#0f766e;--chartlet-role-teal-fill:#e9faf7;--chartlet-role-violet:#6d28d9;--chartlet-role-violet-fill:#f3efff;--chartlet-role-gray:#667085;--chartlet-role-gray-fill:#f7f8fa;--chartlet-role-red:#b42318;--chartlet-role-red-fill:#fef3f2}.chartlet-root.chartlet-theme-dark{--chartlet-node:#1a2436;--chartlet-lane:#121925;--chartlet-lane-head:#18212f;--chartlet-shadow:rgba(0,0,0,.45);--chartlet-role-blue:#7ea6ff;--chartlet-role-blue-fill:#1a2436;--chartlet-role-green:#4ade80;--chartlet-role-green-fill:#132a1d;--chartlet-role-amber:#fbbf24;--chartlet-role-amber-fill:#2b2210;--chartlet-role-teal:#2dd4bf;--chartlet-role-teal-fill:#0f2a27;--chartlet-role-violet:#b69cff;--chartlet-role-violet-fill:#231c38;--chartlet-role-gray:#9aa7bd;--chartlet-role-gray-fill:#161d29;--chartlet-role-red:#f97066;--chartlet-role-red-fill:#2d1616}#chartlet-d5472d7361b74f66-m .chartlet-role-blue{fill:var(--chartlet-role-blue-fill);stroke:var(--chartlet-role-blue)}#chartlet-d5472d7361b74f66-m .chartlet-role-green{fill:var(--chartlet-role-green-fill);stroke:var(--chartlet-role-green)}#chartlet-d5472d7361b74f66-m .chartlet-role-amber{fill:var(--chartlet-role-amber-fill);stroke:var(--chartlet-role-amber)}#chartlet-d5472d7361b74f66-m .chartlet-role-teal{fill:var(--chartlet-role-teal-fill);stroke:var(--chartlet-role-teal)}#chartlet-d5472d7361b74f66-m .chartlet-role-violet{fill:var(--chartlet-role-violet-fill);stroke:var(--chartlet-role-violet)}#chartlet-d5472d7361b74f66-m .chartlet-role-gray{fill:var(--chartlet-role-gray-fill);stroke:var(--chartlet-role-gray)}#chartlet-d5472d7361b74f66-m .chartlet-role-red{fill:var(--chartlet-role-red-fill);stroke:var(--chartlet-role-red)}#chartlet-d5472d7361b74f66-m .chartlet-diagram-rim{fill:none;stroke:var(--chartlet-role-teal);stroke-width:1.5}#chartlet-d5472d7361b74f66-m .chartlet-diagram-shadow{fill:var(--chartlet-shadow);stroke:none;rx:7px}#chartlet-d5472d7361b74f66-m .chartlet-diagram-chip{fill:var(--chartlet-background);stroke:var(--chartlet-grid);stroke-width:1;rx:4px}#chartlet-d5472d7361b74f66-m .chartlet-diagram-chip-text{font-size:12px;fill:var(--chartlet-text)}#chartlet-d5472d7361b74f66-m .chartlet-diagram-badge{fill:var(--chartlet-accent);stroke:var(--chartlet-background);stroke-width:2}#chartlet-d5472d7361b74f66-m .chartlet-diagram-badge-text{font-size:10px;font-weight:700;fill:var(--chartlet-background)}#chartlet-d5472d7361b74f66-m .chartlet-flow-node{stroke-width:1.5;stroke-linejoin:round;rx:7px}#chartlet-d5472d7361b74f66-m .chartlet-flow-start{stroke-width:2}#chartlet-d5472d7361b74f66-m .chartlet-flow-end{stroke-width:3}#chartlet-d5472d7361b74f66-m .chartlet-flow-external{stroke-dasharray:5 3}#chartlet-d5472d7361b74f66-m .chartlet-flow-inner{stroke:var(--chartlet-role-blue);stroke-width:1}#chartlet-d5472d7361b74f66-m .chartlet-flow-label{font-size:13px;font-weight:600;fill:var(--chartlet-text)}#chartlet-d5472d7361b74f66-m .chartlet-flow-sublabel{font-size:11px;fill:var(--chartlet-muted)}#chartlet-d5472d7361b74f66-m .chartlet-flow-edge{fill:none;stroke:var(--chartlet-zero);stroke-width:1.4;stroke-linejoin:round}#chartlet-d5472d7361b74f66-m .chartlet-flow-dashed{stroke-dasharray:5 4}#chartlet-d5472d7361b74f66-m .chartlet-flow-dotted{stroke-dasharray:1 4;stroke-linecap:round}#chartlet-d5472d7361b74f66-m .chartlet-flow-main{stroke:var(--chartlet-accent);stroke-width:2.2}#chartlet-d5472d7361b74f66-m .chartlet-flow-head{fill:var(--chartlet-zero);stroke:var(--chartlet-zero);stroke-width:1;stroke-linejoin:round}#chartlet-d5472d7361b74f66-m .chartlet-flow-main-head{fill:var(--chartlet-accent);stroke:var(--chartlet-accent)}#chartlet-d5472d7361b74f66-m .chartlet-flow-lane{fill:var(--chartlet-lane);stroke:var(--chartlet-grid);stroke-width:1}#chartlet-d5472d7361b74f66-m .chartlet-flow-lane-alt{fill:var(--chartlet-background)}#chartlet-d5472d7361b74f66-m .chartlet-flow-lane-head{fill:var(--chartlet-lane-head);stroke:none}#chartlet-d5472d7361b74f66-m .chartlet-flow-lane-label{font-size:11px;font-weight:650;fill:var(--chartlet-muted);letter-spacing:.04em}#chartlet-d5472d7361b74f66-m .chartlet-flow-group{fill:var(--chartlet-accent);fill-opacity:.04;stroke:var(--chartlet-zero);stroke-width:1;stroke-dasharray:4 3;rx:10px}#chartlet-d5472d7361b74f66-m .chartlet-flow-group-label{font-size:11px;font-weight:600;fill:var(--chartlet-muted)}#chartlet-d5472d7361b74f66-m .chartlet-arch-head{fill:var(--chartlet-role-violet-fill);stroke:var(--chartlet-role-violet);stroke-width:1.5}#chartlet-d5472d7361b74f66-m .chartlet-arch-dot{fill:var(--chartlet-role-blue);stroke:none}</style><rect x="12" y="308" width="416" height="784" class="chartlet-flow-group"/><text x="20" y="321" text-anchor="start" class="chartlet-flow-group-label">Cloud account</text><rect x="24" y="476" width="392" height="492" class="chartlet-flow-group"/><text x="32" y="489" text-anchor="start" class="chartlet-flow-group-label">Card data zone</text><g class="chartlet-f chartlet-f-0 chartlet-f-1"><polyline points="220,72 220,152" class="chartlet-flow-edge chartlet-flow-main"><title>Shopper → Checkout: pays</title></polyline><polyline points="216.5,152 220,160 223.5,152 216.5,152" class="chartlet-flow-head chartlet-flow-main-head"/></g><g class="chartlet-f chartlet-f-1 chartlet-f-2"><polyline points="220,208 220,328" class="chartlet-flow-edge chartlet-flow-main"><title>Checkout → API gateway: [HTTPS]</title></polyline><polyline points="216.5,328 220,336 223.5,328 216.5,328" class="chartlet-flow-head chartlet-flow-main-head"/></g><g class="chartlet-f chartlet-f-2 chartlet-f-3"><polyline points="220,376 220,508" class="chartlet-flow-edge chartlet-flow-main"><title>API gateway → Payment service: charge</title></polyline><polyline points="216.5,508 220,516 223.5,508 216.5,508" class="chartlet-flow-head chartlet-flow-main-head"/></g><g class="chartlet-f chartlet-f-3 chartlet-f-4"><polyline points="184,572 184,707.9 96,707.9 96,756" class="chartlet-flow-edge"><title>Payment service → Token vault: tokenizes</title></polyline><polyline points="92.5,756 96,764 99.5,756 92.5,756" class="chartlet-flow-head"/></g><g class="chartlet-f chartlet-f-3 chartlet-f-6"><polyline points="220,572 220,1128" class="chartlet-flow-edge chartlet-flow-main"><title>Payment service → Card provider: authorizes [HTTPS]</title></polyline><polyline points="216.5,1128 220,1136 223.5,1128 216.5,1128" class="chartlet-flow-head chartlet-flow-main-head"/></g><g class="chartlet-f chartlet-f-3 chartlet-f-5"><polyline points="202,572 202,725.6 192,725.6 192,994.35 156,994.35 156,1024" class="chartlet-flow-edge"><title>Payment service → Ledger: records [SQL]</title></polyline><polyline points="152.5,1024 156,1032 159.5,1024 152.5,1024" class="chartlet-flow-head"/></g><g class="chartlet-f chartlet-f-4 chartlet-f-7"><polyline points="96,820 96,860" class="chartlet-flow-edge chartlet-flow-dotted"/></g><g class="chartlet-f chartlet-n-0 chartlet-f-0 chartlet-f-1"></g><g class="chartlet-f chartlet-n-1 chartlet-f-0 chartlet-f-1 chartlet-f-2"></g><g class="chartlet-f chartlet-n-2 chartlet-f-1 chartlet-f-2 chartlet-f-3"></g><g class="chartlet-f chartlet-n-3 chartlet-f-2 chartlet-f-3 chartlet-f-4 chartlet-f-5 chartlet-f-6"></g><g class="chartlet-f chartlet-n-4 chartlet-f-3 chartlet-f-4 chartlet-f-7"></g><g class="chartlet-f chartlet-n-5 chartlet-f-3 chartlet-f-5"></g><g class="chartlet-f chartlet-n-6 chartlet-f-3 chartlet-f-6"></g><g class="chartlet-f chartlet-n-7 chartlet-f-4 chartlet-f-7"></g><g class="chartlet-f chartlet-n-8 chartlet-f-8"></g><g class="chartlet-f chartlet-f-0 chartlet-f-1"><rect x="224" y="77" width="36.88" height="21" class="chartlet-diagram-chip"/><text x="229" y="91" text-anchor="start" class="chartlet-diagram-chip-text">pays</text></g><g class="chartlet-f chartlet-f-1 chartlet-f-2"><rect x="224" y="213" width="63.64" height="21" class="chartlet-diagram-chip"/><text x="229" y="227" text-anchor="start" class="chartlet-diagram-chip-text">[HTTPS]</text></g><g class="chartlet-f chartlet-f-2 chartlet-f-3"><rect x="224" y="381" width="50.32" height="21" class="chartlet-diagram-chip"/><text x="229" y="395" text-anchor="start" class="chartlet-diagram-chip-text">charge</text></g><g class="chartlet-f chartlet-f-3 chartlet-f-4"><rect x="112.64" y="577" width="67.36" height="21" class="chartlet-diagram-chip"/><text x="175" y="591" text-anchor="end" class="chartlet-diagram-chip-text">tokenizes</text></g><g class="chartlet-f chartlet-f-3 chartlet-f-6"><rect x="224" y="587" width="74.08" height="36" class="chartlet-diagram-chip"/><text x="229" y="601" text-anchor="start" class="chartlet-diagram-chip-text">authorizes</text><text x="229" y="616" text-anchor="start" class="chartlet-diagram-chip-text">[HTTPS]</text></g><g class="chartlet-f chartlet-f-3 chartlet-f-5"><rect x="145.48" y="1095" width="57.04" height="36" class="chartlet-diagram-chip"/><text x="174" y="1109" text-anchor="middle" class="chartlet-diagram-chip-text">records</text><text x="174" y="1124" text-anchor="middle" class="chartlet-diagram-chip-text">[SQL]</text></g><g class="chartlet-f chartlet-n-0 chartlet-f-0 chartlet-f-1"><rect x="180" y="18.5" width="80" height="56" class="chartlet-diagram-shadow"/><rect x="180" y="16" width="80" height="56" class="chartlet-flow-node chartlet-role-violet"><title>Shopper</title></rect><circle cx="220" cy="27" r="6" class="chartlet-arch-head"/><text x="220" y="56.5" text-anchor="middle" class="chartlet-flow-label">Shopper</text></g><g class="chartlet-f chartlet-n-1 chartlet-f-0 chartlet-f-1 chartlet-f-2"><rect x="176" y="162.5" width="88" height="48" class="chartlet-diagram-shadow"/><rect x="176" y="160" width="88" height="48" class="chartlet-flow-node chartlet-role-blue"><title>Checkout</title></rect><line x1="176" y1="172" x2="264" y2="172" class="chartlet-flow-inner"/><circle cx="184" cy="166" r="1.8" class="chartlet-arch-dot"/><circle cx="190" cy="166" r="1.8" class="chartlet-arch-dot"/><circle cx="196" cy="166" r="1.8" class="chartlet-arch-dot"/><text x="220" y="194.5" text-anchor="middle" class="chartlet-flow-label">Checkout</text></g><g class="chartlet-f chartlet-n-2 chartlet-f-1 chartlet-f-2 chartlet-f-3"><rect x="164" y="338.5" width="112" height="40" class="chartlet-diagram-shadow"/><rect x="164" y="336" width="112" height="40" class="chartlet-flow-node chartlet-role-blue"><title>API gateway</title></rect><text x="220" y="360.5" text-anchor="middle" class="chartlet-flow-label">API gateway</text></g><g class="chartlet-f chartlet-n-3 chartlet-f-2 chartlet-f-3 chartlet-f-4 chartlet-f-5 chartlet-f-6"><rect x="176" y="518.5" width="88" height="56" class="chartlet-diagram-shadow"/><rect x="176" y="516" width="88" height="56" class="chartlet-flow-node chartlet-role-blue"><title>Payment service</title></rect><text x="220" y="540.5" text-anchor="middle" class="chartlet-flow-label">Payment</text><text x="220" y="556.5" text-anchor="middle" class="chartlet-flow-label">service</text></g><g class="chartlet-f chartlet-n-4 chartlet-f-3 chartlet-f-4 chartlet-f-7"><polyline points="44,766.5 148,766.5 148,800.1 96,822.5 44,800.1 44,766.5" class="chartlet-diagram-shadow"/><polyline points="44,764 148,764 148,797.6 96,820 44,797.6 44,764" class="chartlet-flow-node chartlet-role-red"><title>Token vault</title></polyline><text x="96" y="790.5" text-anchor="middle" class="chartlet-flow-label">Token vault</text></g><g class="chartlet-f chartlet-n-5 chartlet-f-3 chartlet-f-5"><polyline points="120,1039.5 120,1077.5 121.227,1078.794 124.823,1080 130.544,1081.036 138,1081.83 146.683,1082.33 156,1082.5 165.317,1082.33 174,1081.83 181.456,1081.036 187.177,1080 190.773,1078.794 192,1077.5 192,1039.5 190.773,1038.206 187.177,1037 181.456,1035.964 174,1035.17 165.317,1034.67 156,1034.5 146.683,1034.67 138,1035.17 130.544,1035.964 124.823,1037 121.227,1038.206 120,1039.5 120,1039.5" class="chartlet-diagram-shadow"/><polyline points="120,1037 120,1075 121.227,1076.294 124.823,1077.5 130.544,1078.536 138,1079.33 146.683,1079.83 156,1080 165.317,1079.83 174,1079.33 181.456,1078.536 187.177,1077.5 190.773,1076.294 192,1075 192,1037 190.773,1035.706 187.177,1034.5 181.456,1033.464 174,1032.67 165.317,1032.17 156,1032 146.683,1032.17 138,1032.67 130.544,1033.464 124.823,1034.5 121.227,1035.706 120,1037 120,1037" class="chartlet-flow-node chartlet-role-teal"><title>Ledger</title></polyline><polyline points="120,1037 121.227,1038.294 124.823,1039.5 130.544,1040.536 138,1041.33 146.683,1041.83 156,1042 165.317,1041.83 174,1041.33 181.456,1040.536 187.177,1039.5 190.773,1038.294 192,1037" class="chartlet-diagram-rim"/><text x="156" y="1063.5" text-anchor="middle" class="chartlet-flow-label">Ledger</text></g><g class="chartlet-f chartlet-n-6 chartlet-f-3 chartlet-f-6"><rect x="160" y="1138.5" width="120" height="40" class="chartlet-diagram-shadow"/><rect x="160" y="1136" width="120" height="40" class="chartlet-flow-node chartlet-flow-external chartlet-role-gray"><title>Card provider</title></rect><text x="220" y="1160.5" text-anchor="middle" class="chartlet-flow-label">Card provider</text></g><g class="chartlet-f chartlet-n-7 chartlet-f-4 chartlet-f-7"><polyline points="36,860 146,860 156,870 156,956 36,956 36,860" class="chartlet-flow-node chartlet-role-amber"><title>Card numbers never leave the vault; everything else sees tokens.</title></polyline><polyline points="146,860 146,870 156,870" class="chartlet-flow-node chartlet-role-amber"/><text x="48" y="879" text-anchor="start" class="chartlet-diagram-chip-text">Card numbers</text><text x="48" y="894" text-anchor="start" class="chartlet-diagram-chip-text">never leave the</text><text x="48" y="909" text-anchor="start" class="chartlet-diagram-chip-text">vault;</text><text x="48" y="924" text-anchor="start" class="chartlet-diagram-chip-text">everything else</text><text x="48" y="939" text-anchor="start" class="chartlet-diagram-chip-text">sees tokens.</text></g><g class="chartlet-f chartlet-n-8 chartlet-f-8"><polyline points="292,504 394,504 404,514 404,584 292,584 292,504" class="chartlet-flow-node chartlet-role-amber"><title>Audited once a year; changes need a second reviewer.</title></polyline><polyline points="394,504 394,514 404,514" class="chartlet-flow-node chartlet-role-amber"/><text x="304" y="523" text-anchor="start" class="chartlet-diagram-chip-text">Audited once a</text><text x="304" y="538" text-anchor="start" class="chartlet-diagram-chip-text">year; changes</text><text x="304" y="553" text-anchor="start" class="chartlet-diagram-chip-text">need a second</text><text x="304" y="568" text-anchor="start" class="chartlet-diagram-chip-text">reviewer.</text></g><polyline points="12,1200 121.76,1200 131.76,1210 131.76,1306 12,1306 12,1200" class="chartlet-flow-node chartlet-role-amber"><title>Figures and names are illustrative; the diagram shows the target state.</title></polyline><polyline points="121.76,1200 121.76,1210 131.76,1210" class="chartlet-flow-node chartlet-role-amber"/><text x="24" y="1219" text-anchor="start" class="chartlet-diagram-chip-text">Figures and</text><text x="24" y="1234" text-anchor="start" class="chartlet-diagram-chip-text">names are</text><text x="24" y="1249" text-anchor="start" class="chartlet-diagram-chip-text">illustrative; the</text><text x="24" y="1264" text-anchor="start" class="chartlet-diagram-chip-text">diagram shows</text><text x="24" y="1279" text-anchor="start" class="chartlet-diagram-chip-text">the target</text><text x="24" y="1294" text-anchor="start" class="chartlet-diagram-chip-text">state.</text></svg><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-m-hs-0" for="chartlet-d5472d7361b74f66-focus-0"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-m-hs-1" for="chartlet-d5472d7361b74f66-focus-1"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-m-hs-2" for="chartlet-d5472d7361b74f66-focus-2"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-m-hs-3" for="chartlet-d5472d7361b74f66-focus-3"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-m-hs-4" for="chartlet-d5472d7361b74f66-focus-4"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-m-hs-5" for="chartlet-d5472d7361b74f66-focus-5"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-m-hs-6" for="chartlet-d5472d7361b74f66-focus-6"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-m-hs-7" for="chartlet-d5472d7361b74f66-focus-7"></label><label class="chartlet-hotspot" id="chartlet-d5472d7361b74f66-m-hs-8" for="chartlet-d5472d7361b74f66-focus-8"></label></div></div><p class="chartlet-source">Source: Illustrative reference architecture</p><details class="chartlet-data" data-viz-text><summary>Show chart data</summary><table><caption>Data for Payments and what to know about them. Note on Card data zone: Audited once a year; changes need a second reviewer. Note: Figures and names are illustrative; the diagram shows the target state.</caption><thead><tr><th scope="col">Component</th><th scope="col">Kind</th><th scope="col">Boundary</th><th scope="col">Connects to</th><th scope="col">Notes</th></tr></thead><tbody><tr><th scope="row">Shopper</th><td>person</td><td></td><td>Checkout (pays)</td><td></td></tr><tr><th scope="row">Checkout</th><td>frontend</td><td></td><td>API gateway (via HTTPS)</td><td></td></tr><tr><th scope="row">API gateway</th><td>service</td><td>Cloud account</td><td>Payment service (charge)</td><td></td></tr><tr><th scope="row">Payment service</th><td>service</td><td>Cloud account › Card data zone</td><td>Token vault (tokenizes), Card provider (authorizes, via HTTPS), Ledger (records, via SQL)</td><td></td></tr><tr><th scope="row">Token vault</th><td>security</td><td>Cloud account › Card data zone</td><td></td><td>Card numbers never leave the vault; everything else sees tokens.</td></tr><tr><th scope="row">Ledger</th><td>database</td><td>Cloud account</td><td></td><td></td></tr><tr><th scope="row">Card provider</th><td>external system</td><td></td><td></td><td></td></tr></tbody></table></details></figure></div>