Pay with cards stored in your own VGS vault without copying them to KERNEL
use provider: "vgs" when your cards already live in your own VGS vault and you want KERNEL browsers to pay with them. your vault stays the source of truth: you give KERNEL a read-only VGS service account, and each purchase carries the card’s aliases from your vault.neither your application, KERNEL’s api, the agent, nor the browser receives the card number or security code. at authorization, KERNEL reads your aliases through its own VGS outbound proxy, which replaces the revealed values with aliases in KERNEL’s VGS vault before they reach KERNEL. at checkout, KERNEL’s VGS proxy reveals the card to the merchant.
provider: "vgs" requires @onkernel/sdk 0.141.0 or later, or kernel 0.141.0 or later for Python. the CLI doesn’t support VGS provider configurations or cards yet.
register your service account once. create a provider configuration with a VGS service account that can read aliases from your vault.
create a wallet. the wallet binds that configuration and connects immediately. it holds no cards.
create a card for each purchase. send the card’s PAN alias, a freshly collected CVC alias, the expiry, and the last four digits.
authorize. KERNEL reveals both aliases from your vault through its VGS proxy and stores KERNEL-vault aliases. the card becomes ready with no further cardholder approval.
fill and submit.fill types KERNEL’s aliases into the checkout. when the browser submits, KERNEL’s VGS proxy replaces them with the real card details on the way to the merchant.
enable alias reveal on your vault. ask VGS to enable the aliases:read capability and alias reveal on your vault. it’s off by default.
create a read-only service account. in your VGS dashboard, create a service account with only the aliases:read scope. KERNEL uses it to reveal aliases; it doesn’t need write or card management scopes. you can revoke or rotate it at any time; once you do, KERNEL can’t authorize new cards from your vault.
store cards as aliases. store the card number as a persistent alias. any alias format works; KERNEL chooses the format of its own aliases.
collect a fresh CVC for each purchase. card networks don’t allow storing a security code after authorization, so collect it again for each purchase, for example with a VGS Collect CVC field. store it as a volatile alias and create the card item right after collection. the alias must still exist when you authorize.
create a project-scoped client and vault. the examples below use these kernel and vault variables.
import Kernel from "@onkernel/sdk";const kernel = new Kernel({ projectID: process.env.KERNEL_PROJECT_ID!, maxRetries: 0,});const vault = await kernel.vaults.upsert({ name: "user-12345" });
register a provider configuration once for your organization. configurations are shared across projects, so authenticate this step with an organization-scoped api key. keep the service account credentials in your backend, outside the agent’s context.
vault_id is your VGS vault ID, and environment is sandbox or live to match it. before storing anything, KERNEL checks that the service account holds aliases:read and that it can reach vault_id in environment. if either check fails, creation returns 400 invalid_request and nothing is stored.the response returns client_id, vault_id, and environment. it never returns client_secret.
rotation: you can update client_secret only. KERNEL re-runs both checks against the same vault and environment, and refuses the update if either fails.
changing vaults:client_id, vault_id, and environment can’t change. to use another vault or service account, create a new configuration and new wallets.
create the wallet with the project-scoped kernel client. provider_config is required, because there are no KERNEL-managed VGS credentials. pass the configuration’s name or id; responses return the resolved id.
the wallet’s state.status is connected on creation. it has no enrollment action and no payment methods. if it reports pending_authorization or degraded, creation didn’t finish; reading the wallet retries it. KERNEL checks whether the service account still works when you authorize a card, not when you read the wallet.
# stored_card.pan_alias and collected_cvc_alias are aliases from your VGS vaultcard = kernel.vaults.items.upsert( "flight-order-8841", id_or_name=vault.id, type="card", spec={ "provider": "vgs", "wallet": "cards-wallet", "amount": 45210, "currency": "usd", "merchant_name": "example air", "merchant_url": "https://www.example-air.com/checkout", "card": { "pan_alias": stored_card.pan_alias, "cvc_alias": collected_cvc_alias, "exp_month": 12, "exp_year": 2028, "last4": "4242", }, },)card = kernel.vaults.items.perform_operation( card.key, id_or_name=vault.id, type="authorize",)if card.state.status != "ready": raise RuntimeError(f"card not ready: {card.state.status} {card.state.status_reason or ''}")
spec.card field
description
pan_alias
a persistent alias of the card number in your vault
cvc_alias
a volatile alias of a freshly collected security code. it must still exist when authorize runs
exp_month, exp_year
the card’s expiry. an alias doesn’t carry it
last4
the card number’s last four digits. KERNEL checks it against the revealed card
spec.card is write-only. KERNEL stores it encrypted and never returns it in the item, its events, or logs. a repeated PUT with the same key must send the same card, and card updates return 409; to change anything, delete the item and create a new one.once ready, the card supports fill on merchant_url’s origin until expires_at, five minutes after authorization by default. it then becomes expired, and you need a new card item with a freshly collected CVC. supported fill fields are number, cvc, exp_month, exp_year, and expiration; billing fields aren’t available for VGS cards. the item’s masks.last4 shows the card’s last four digits; the card brand isn’t reported.the recorded amount and merchant don’t restrict the payment requests the browser sends. expires_at isn’t a single-use guarantee.
card number: KERNEL keeps an alias of the card number in its own VGS vault. it remains there after the card item expires or is deleted.
security code: KERNEL keeps a volatile alias of the security code, which VGS deletes automatically within an hour.
your aliases and credentials: your aliases and service account secret are encrypted at rest and never returned.
KERNEL never receives the card number or security code itself. to stop KERNEL from reading your vault, revoke the service account in VGS and delete the provider configuration. deletion returns 409 while any item still references it.
{"docsConfig":{"theme":"palm","$schema":"https://mintlify.com/docs.json","name":"Kernel","colors":{"primary":"#212225","light":"#CAB168","dark":"#CAB168"},"logo":{"light":"https://mintcdn.com/tbd-6fc993ce/Lt3m2NlMiCztMtQK/logo/black.svg?fit=max\u0026auto=format\u0026n=Lt3m2NlMiCztMtQK\u0026q=85\u0026s=68e987c751954bbc1d35886a02636c73","dark":"https://mintcdn.com/tbd-6fc993ce/y3CmyOX_b9m5t8tc/logo/white.svg?fit=max\u0026auto=format\u0026n=y3CmyOX_b9m5t8tc\u0026q=85\u0026s=c197f34af93346f9141a9a79870f101e"},"favicon":"https://mintcdn.com/tbd-6fc993ce/G-Oz940pmbilrFx5/favicon.svg?fit=max\u0026auto=format\u0026n=G-Oz940pmbilrFx5\u0026q=85\u0026s=ce38e3ee0e5d07700bccd70f5df08733","appearance":{"default":"light","strict":false},"background":{"color":{"light":"#F0F0F3","dark":"#212225"}},"navbar":{"links":[{"href":"https://dashboard.onkernel.com","label":"Dashboard"},{"href":"https://jobs.ashbyhq.com/usekernel","label":"Careers"}],"primary":{"type":"button","label":"Sign up","href":"https://dashboard.onkernel.com/sign-up"}},"footer":{"socials":{"x":"https://x.com/usekernel","github":"https://github.com/orgs/kernel","linkedin":"https://www.linkedin.com/company/trykernel"}},"seo":{"metatags":{"canonical":"https://www.kernel.sh/docs","og:image":"https://www.kernel.sh/docs/images/og-image.png","twitter:image":"https://www.kernel.sh/docs/images/og-image.png"},"indexing":"all"},"fonts":{"family":"Inter","weight":400},"integrations":{"ga4":{"measurementId":"G-GVEXRLYSN4"}},"contextual":{"options":["copy","chatgpt","claude"],"display":"header"},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tbd-6fc993ce","hasAudioNarration":false,"actualSubdomain":"tbd-6fc993ce","customDomains":["www.kernel.sh"],"gitSource":{"type":"github","owner":"kernel","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aecc6e13c2f00fc09de8237","collectionId":"0acc4d94-3202-4f9c-9ebf-24e5934a7398","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aecc6e13c2f00fc09de8237"},"feedback":{"thumbs":false},"entitlements":{"AI_CHAT":{"status":"ENABLED"},"WEB_MCP":{"status":"ENABLED"},"NARRATION":{"status":"ENABLED"}},"buildId":"6aecc6e13c2f00fc09de8237","clientVersion":"0.0.4071","searchFilterCounts":[{"language":"default","tag":"API Reference","count":166},{"language":"default","tag":"Guides","count":95},{"language":"default","tag":"How it works","count":72},{"language":"default","tag":"Configure","count":43},{"language":"default","tag":"MCP","count":31},{"language":"default","tag":"Vaults","count":23},{"language":"default","tag":"Managed Auth","count":15},{"language":"default","tag":"Partnering with KERNEL","count":15},{"language":"default","tag":"CLI","count":15},{"language":"default","tag":"Browser Filesystem","count":15}]},"assistantConfig":{},"basePath":"/docs","hasChatPermissions":true,"hasWebMcpPermissions":true,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":"*{text-transform:lowercase!important}.kernel-brand-name{text-transform:uppercase!important}code,pre,pre *,code *,.code-group code,.code-group pre,[class*=\"highlight\"] code,[class*=\"highlight\"] pre,kbd{text-transform:none!important}*,*::before,*::after{border-radius:0!important}:root{--btn-selected-bg: #CAB168;--btn-border: #000}#navigation-items .sidebar-group-header{font-weight:300!important;font-size:11px!important}html.dark #navigation-items .sidebar-group-header{color:rgba(237, 238, 240, 0.55)!important}#navigation-items div[class*=\"mt-\"]>.sidebar-group-header{margin-top:0.75rem;padding-top:1rem;border-top:1px solid rgba(33, 34, 37, 0.1)}html.dark #navigation-items div[class*=\"mt-\"]>.sidebar-group-header{border-top-color:rgba(237, 238, 240, 0.1)}#navigation-items li[data-title]>button.group,#navigation-items li[data-title]>div.group{width:100%!important;flex-direction:row-reverse!important;justify-content:space-between!important}#navigation-items li[data-title]>button.group>svg,#navigation-items li[data-title]>div.group>svg{margin-right:0!important;margin-left:0!important}.prose table,article table,table{width:100%!important;border-collapse:separate!important;border-spacing:0!important;border-radius:0!important;overflow:hidden!important;border:1px solid rgb(var(--gray-950) / 0.1)!important;background-color:rgb(249, 250, 251)!important;margin:0!important;display:table!important}.prose table thead th,article table thead th,table thead th{padding:10px 16px!important;text-align:left!important;font-weight:600!important;font-size:0.875rem!important;line-height:1.5rem!important;background-color:rgba(0, 0, 0, 0.02)!important;border-bottom:1px solid rgba(0, 0, 0, 0.1)!important;word-wrap:break-word!important;word-break:break-word!important;overflow-wrap:break-word!important;white-space:normal!important;max-width:0!important}.prose table tbody tr,article table tbody tr,table tbody tr{transition:background-color 0.15s ease!important;border-bottom:1px solid rgba(0, 0, 0, 0.06)!important}.prose table tbody tr:last-child,article table tbody tr:last-child,table tbody tr:last-child{border-bottom:none!important}.prose table tbody tr:hover,article table tbody tr:hover,table tbody tr:hover{background-color:rgba(0, 0, 0, 0.02)!important}.prose table tbody td,article table tbody td,table tbody td{padding:10px 16px!important;font-size:0.875rem!important;line-height:1.5rem!important;word-wrap:break-word!important;word-break:break-word!important;overflow-wrap:break-word!important;white-space:normal!important;max-width:0!important;min-width:130px!important}.prose table code,article table code,table code{font-size:0.8125rem!important;padding:2px 6px!important;border-radius:0!important}.prose code:not(pre *),article code:not(pre *),code:not(pre *){padding:1px 4px!important;background-color:transparent!important;border:1px solid #D0D2D9!important}html.dark .prose code:not(pre *),html.dark article code:not(pre *),html.dark code:not(pre *){border-color:rgba(237, 238, 240, 0.10)!important}.prose table tbody td:first-child,article table tbody td:first-child,table tbody td:first-child{font-weight:500!important}.tinker-box{display:flex;flex-direction:column;gap:32px;padding:32px;border:1px solid rgba(0, 0, 0, 0.12);margin-top:2rem;margin-bottom:2rem}.tinker-box-row{display:flex;align-items:center;gap:32px}.tinker-box-content{display:flex;flex-direction:column;gap:32px;flex:1;min-width:0}.tinker-box-content button{width:100%!important;max-width:100%!important}@media (max-width: 640px){.tinker-box{padding:24px;gap:24px}.tinker-box-row{flex-direction:column;align-items:stretch;gap:24px;width:100%}.tinker-box-content{width:100%}}html.dark .prose table,html.dark article table,html.dark table{border-color:rgba(237, 238, 240, 0.10)!important;background-color:rgba(237, 238, 240, 0.02)!important}html.dark .prose table thead th,html.dark article table thead th,html.dark table thead th{background-color:rgba(237, 238, 240, 0.04)!important;border-bottom-color:rgba(237, 238, 240, 0.10)!important}html.dark .prose table tbody tr,html.dark article table tbody tr,html.dark table tbody tr{border-bottom-color:rgba(237, 238, 240, 0.08)!important}html.dark .prose table tbody tr:hover,html.dark article table tbody tr:hover,html.dark table tbody tr:hover{background-color:rgba(237, 238, 240, 0.04)!important}html.dark .tinker-box{border-color:rgba(237, 238, 240, 0.14)}html.dark{--btn-border: #EDEEF0}html.dark .callout[class*=\"yellow\"]{background-color:rgba(237, 238, 240, 0.03)!important;border-color:rgba(237, 238, 240, 0.10)!important}html.dark .callout[class*=\"yellow\"] svg{color:#CAB168!important}.dark .card:hover{border-color:rgb(223 223 223)!important}.dark .link{border-bottom-color:#EDEEF0}#navigation-items img[src*=\"/images/integration-icons/\"]{width:14px;height:14px;opacity:0.68}#navigation-items img[src*=\"/images/integration-icons/nousresearch.svg\"]{opacity:0.72;transform:scale(1.06)}#navigation-items img[src*=\"/images/integration-icons/browser-use-logo-transparent.svg\"]{transform:scale(0.9)}#navigation-items img[src*=\"/images/integration-icons/computer-cursor-rounded.svg\"]{transform:scale(0.95)}#navigation-items img[src*=\"/images/integration-icons/laminar-outline.svg\"]{transform:scale(0.9)}#navigation-items img[src*=\"/images/integration-icons/stagehand-logo-transparent.svg\"]{transform:scale(0.88)}#navigation-items img[src*=\"/images/integration-icons/stripe.svg\"]{transform:scale(0.82)}#navigation-items img[src*=\"/images/integration-icons/vercel.svg\"]{transform:scale(0.76)}#navigation-items img[src*=\"/images/integration-icons/1password-logo-transparent.svg\"]{opacity:0.6;transform:scale(0.82)}#navigation-items li>button:has(img[src*=\"/images/integration-icons/\"])>div:has(>svg){order:1}#navigation-items li>button:has(img[src*=\"/images/integration-icons/\"])>div:has(>img[src*=\"/images/integration-icons/\"]){order:3}#navigation-items li>button:has(img[src*=\"/images/integration-icons/\"])>div:not(:has(>svg)):not(:has(>img[src*=\"/images/integration-icons/\"])){order:2}html.dark #navigation-items img[src*=\"/images/integration-icons/\"]{filter:invert(1)}#pagination a[href^=\"/cookbooks/\"]{display:none}#header .eyebrow[data-parent-group]{font-size:0}#header .eyebrow[data-parent-group]::after{content:attr(data-parent-group);font-size:0.875rem}.cookbook-tag{display:block;font-size:0.6875rem;font-weight:400;letter-spacing:-0.015em;opacity:0.72;margin-bottom:0.5rem}html.dark .cookbook-tag{color:rgba(237, 238, 240, 0.7)}.copy-prompt-full button{width:100%!important;max-width:100%!important}html[data-current-path=\"/\"] #header>div.prose{display:none!important}"}],"page":{"pagePath":"integrations/wallets/bring-your-own-vgs-vault","slug":"/integrations/wallets/bring-your-own-vgs-vault","pageMetadata":{"title":"Bring Your Own VGS Vault","description":"Pay with cards stored in your own VGS vault without copying them to KERNEL","href":"/integrations/wallets/bring-your-own-vgs-vault"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Pay with cards stored in your own VGS vault without copying them to KERNEL\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{CodeBlock,CodeGroup,Heading,Note,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Note)_missingMdxReference(`Note`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`use `,_jsx(_components.code,{children:`provider: \"vgs\"`}),` when your cards already live in your own `,_jsx(_components.a,{href:`https://www.verygoodsecurity.com`,children:`VGS`}),` vault and you want KERNEL browsers to pay with them. your vault stays the source of truth: you give KERNEL a read-only VGS service account, and each purchase carries the card’s aliases from your vault.`]}),`\n`,_jsx(_components.p,{children:`neither your application, KERNEL’s api, the agent, nor the browser receives the card number or security code. at authorization, KERNEL reads your aliases through its own VGS outbound proxy, which replaces the revealed values with aliases in KERNEL’s VGS vault before they reach KERNEL. at checkout, KERNEL’s VGS proxy reveals the card to the merchant.`}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`provider: \"vgs\"`}),` requires `,_jsx(_components.code,{children:`@onkernel/sdk`}),` 0.141.0 or later, or `,_jsx(_components.code,{children:`kernel`}),` 0.141.0 or later for Python. the CLI doesn’t support VGS provider configurations or cards yet.`]})}),`\n`,_jsx(Heading,{level:`2`,id:`how-it-works`,children:`How it works`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`register your service account once.`}),` create a provider configuration with a VGS service account that can read aliases from your vault.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`create a wallet.`}),` the wallet binds that configuration and connects immediately. it holds no cards.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`create a card for each purchase.`}),` send the card’s PAN alias, a freshly collected CVC alias, the expiry, and the last four digits.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`authorize.`}),` KERNEL reveals both aliases from your vault through its VGS proxy and stores KERNEL-vault aliases. the card becomes `,_jsx(_components.code,{children:`ready`}),` with no further cardholder approval.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`fill and submit.`}),` `,_jsx(_components.code,{children:`fill`}),` types KERNEL’s aliases into the checkout. when the browser submits, KERNEL’s VGS proxy replaces them with the real card details on the way to the merchant.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`before-you-start`,children:`Before you start`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`enable alias reveal on your vault.`}),` ask VGS to enable the `,_jsx(_components.code,{children:`aliases:read`}),` capability and alias reveal on your vault. it’s off by default.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`create a read-only service account.`}),` in your VGS dashboard, create a service account with only the `,_jsx(_components.code,{children:`aliases:read`}),` scope. KERNEL uses it to reveal aliases; it doesn’t need write or card management scopes. you can revoke or rotate it at any time; once you do, KERNEL can’t authorize new cards from your vault.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`store cards as aliases.`}),` store the card number as a persistent alias. any alias format works; KERNEL chooses the format of its own aliases.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`collect a fresh CVC for each purchase.`}),` card networks don’t allow storing a security code after authorization, so collect it again for each purchase, for example with a VGS Collect CVC field. store it as a volatile alias and create the card item right after collection. the alias must still exist when you authorize.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`create a project-scoped client and vault. the examples below use these `,_jsx(_components.code,{children:`kernel`}),` and `,_jsx(_components.code,{children:`vault`}),` variables.`]}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`TypeScript`,numberOfLines:`7`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`7`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Kernel`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"@onkernel/sdk\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` kernel`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Kernel`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` projectID:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`KERNEL_PROJECT_ID`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` maxRetries:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` vault`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` kernel`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`vaults`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`upsert`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`name:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"user-12345\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`Python`,numberOfLines:`6`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`6`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` os`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` kernel `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Kernel`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`kernel `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Kernel(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`project_id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`os.environ[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"KERNEL_PROJECT_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`], `}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`max_retries`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`0`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`vault `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` kernel.vaults.upsert(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"user-12345\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})})]}),`\n`,_jsx(Heading,{level:`2`,id:`register-your-service-account`,children:`Register your service account`}),`\n`,_jsxs(_components.p,{children:[`register a `,_jsx(_components.a,{href:`/integrations/wallets/overview#provider-configurations`,children:`provider configuration`}),` once for your organization. configurations are shared across projects, so authenticate this step with an `,_jsx(_components.a,{href:`/info/api-keys`,children:`organization-scoped api key`}),`. keep the service account credentials in your backend, outside the agent’s context.`]}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`TypeScript`,numberOfLines:`12`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`12`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` orgKernel`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Kernel`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({ `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`apiKey:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`KERNEL_ORG_API_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` });`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` vgsConfig`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` orgKernel`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`vaultProviderConfigs`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`create`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` name:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cards-vgs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` provider:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"vgs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` credentials:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client_id:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`VGS_CLIENT_ID`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` client_secret:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` process`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`VGS_CLIENT_SECRET`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` vault_id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"tntabc12345\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` environment:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"live\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Python`,numberOfLines:`12`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`12`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`org_kernel `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` Kernel(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:`api_key`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`os.environ[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"KERNEL_ORG_API_KEY\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`])`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`vgs_config `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` org_kernel.vault_provider_configs.create(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"cards-vgs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` provider`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"vgs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` credentials`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"client_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: os.environ[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"VGS_CLIENT_ID\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"client_secret\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: os.environ[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"VGS_CLIENT_SECRET\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`],`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"vault_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"tntabc12345\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"environment\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"live\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`vault_id`}),` is your VGS vault ID, and `,_jsx(_components.code,{children:`environment`}),` is `,_jsx(_components.code,{children:`sandbox`}),` or `,_jsx(_components.code,{children:`live`}),` to match it. before storing anything, KERNEL checks that the service account holds `,_jsx(_components.code,{children:`aliases:read`}),` and that it can reach `,_jsx(_components.code,{children:`vault_id`}),` in `,_jsx(_components.code,{children:`environment`}),`. if either check fails, creation returns `,_jsx(_components.code,{children:`400 invalid_request`}),` and nothing is stored.`]}),`\n`,_jsxs(_components.p,{children:[`the response returns `,_jsx(_components.code,{children:`client_id`}),`, `,_jsx(_components.code,{children:`vault_id`}),`, and `,_jsx(_components.code,{children:`environment`}),`. it never returns `,_jsx(_components.code,{children:`client_secret`}),`.`]}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`rotation:`}),` you can update `,_jsx(_components.code,{children:`client_secret`}),` only. KERNEL re-runs both checks against the same vault and environment, and refuses the update if either fails.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`changing vaults:`}),` `,_jsx(_components.code,{children:`client_id`}),`, `,_jsx(_components.code,{children:`vault_id`}),`, and `,_jsx(_components.code,{children:`environment`}),` can’t change. to use another vault or service account, create a new configuration and new wallets.`]}),`\n`]}),`\n`,_jsx(Heading,{level:`2`,id:`create-a-wallet`,children:`Create a wallet`}),`\n`,_jsxs(_components.p,{children:[`create the wallet with the project-scoped `,_jsx(_components.code,{children:`kernel`}),` client. `,_jsx(_components.code,{children:`provider_config`}),` is required, because there are no KERNEL-managed VGS credentials. pass the configuration’s `,_jsx(_components.code,{children:`name`}),` or `,_jsx(_components.code,{children:`id`}),`; responses return the resolved id.`]}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`TypeScript`,numberOfLines:`8`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`8`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` wallet`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` kernel`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`vaults`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`items`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`upsert`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"cards-wallet\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` id_or_name:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` vault`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"wallet\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` spec:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` provider:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"vgs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` provider_config:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`name:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cards-vgs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Python`,numberOfLines:`9`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`9`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`wallet `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` kernel.vaults.items.upsert(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cards-wallet\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` id_or_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`vault.id,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"wallet\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` spec`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"provider\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"vgs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"provider_config\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"cards-vgs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`},`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`]})})})]}),`\n`,_jsxs(_components.p,{children:[`the wallet’s `,_jsx(_components.code,{children:`state.status`}),` is `,_jsx(_components.code,{children:`connected`}),` on creation. it has no enrollment action and no payment methods. if it reports `,_jsx(_components.code,{children:`pending_authorization`}),` or `,_jsx(_components.code,{children:`degraded`}),`, creation didn’t finish; reading the wallet retries it. KERNEL checks whether the service account still works when you authorize a card, not when you read the wallet.`]}),`\n`,_jsx(Heading,{level:`2`,id:`make-a-purchase`,children:`Make a purchase`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`attach the vault when you `,_jsx(_components.a,{href:`/vaults/overview#scope-and-attachment`,children:`create the browser`}),`.`]}),`\n`,_jsx(_components.li,{children:`collect a fresh CVC from the cardholder and store it as a volatile alias in your vault.`}),`\n`,_jsxs(_components.li,{children:[`create a `,_jsx(_components.code,{children:`card`}),` item with the wallet, the merchant, amount, and currency, and the card’s aliases in `,_jsx(_components.code,{children:`spec.card`}),`.`]}),`\n`,_jsxs(_components.li,{children:[`invoke `,_jsx(_components.code,{children:`authorize`}),`. it takes no parameters and returns the card `,_jsx(_components.code,{children:`ready`}),`, with no action for the cardholder.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/vaults/fill`,children:`fill the checkout`}),` before `,_jsx(_components.code,{children:`expires_at`}),`, submit once, and verify the merchant’s order record. a completed fill isn’t proof of payment.`]}),`\n`]}),`\n`,_jsx(_components.p,{children:`the examples create and authorize a card for 452.10 usd.`}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`TypeScript`,numberOfLines:`32`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`32`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// storedCard.panAlias and collectedCvcAlias are aliases from your VGS vault`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`let`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` card`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` kernel`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`vaults`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`items`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`upsert`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"flight-order-8841\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` id_or_name:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` vault`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"card\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` spec:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` provider:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"vgs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` wallet:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cards-wallet\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` amount:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 45210`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` currency:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"usd\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` merchant_name:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"example air\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` merchant_url:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://www.example-air.com/checkout\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` card:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` pan_alias:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` storedCard`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`panAlias`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` cvc_alias:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` collectedCvcAlias`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` exp_month:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 12`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` exp_year:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:` 2028`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` last4:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"4242\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` authorized`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` kernel`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`vaults`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`items`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`performOperation`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`card`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`key`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` id_or_name:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` vault`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` type:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"authorize\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`authorized`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"card\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` throw`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"unexpected operation response\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`card`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` authorized`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`card`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`state`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`status`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` !==`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ready\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` throw`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`card not ready: \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`card`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`state`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`status`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\" ${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`card`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`state`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`status_reason`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` ??`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Python`,numberOfLines:`29`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`29`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# stored_card.pan_alias and collected_cvc_alias are aliases from your VGS vault`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`card `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` kernel.vaults.items.upsert(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"flight-order-8841\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` id_or_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`vault.id,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"card\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` spec`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"provider\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"vgs\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"wallet\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"cards-wallet\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"amount\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`45210`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"currency\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"usd\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"merchant_name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"example air\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"merchant_url\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://www.example-air.com/checkout\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"card\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"pan_alias\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: stored_card.pan_alias,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"cvc_alias\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: collected_cvc_alias,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"exp_month\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`12`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"exp_year\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2028`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"last4\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"4242\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`card `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` kernel.vaults.items.perform_operation(`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` card.key,`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` id_or_name`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`vault.id,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` type`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"authorize\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` card.state.status `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!=`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ready\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` raise`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` RuntimeError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"card not ready: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`card.state.status`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` {`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`card.state.status_reason `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`or`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` ''`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`]})})})]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsxs(_components.th,{children:[_jsx(_components.code,{children:`spec.card`}),` field`]}),_jsx(_components.th,{children:`description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`pan_alias`})}),_jsx(_components.td,{children:`a persistent alias of the card number in your vault`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`cvc_alias`})}),_jsxs(_components.td,{children:[`a volatile alias of a freshly collected security code. it must still exist when `,_jsx(_components.code,{children:`authorize`}),` runs`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`exp_month`}),`, `,_jsx(_components.code,{children:`exp_year`})]}),_jsx(_components.td,{children:`the card’s expiry. an alias doesn’t carry it`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`last4`})}),_jsx(_components.td,{children:`the card number’s last four digits. KERNEL checks it against the revealed card`})]})]})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`spec.card`}),` is write-only. KERNEL stores it encrypted and never returns it in the item, its events, or logs. a repeated `,_jsx(_components.code,{children:`PUT`}),` with the same key must send the same `,_jsx(_components.code,{children:`card`}),`, and card updates return `,_jsx(_components.code,{children:`409`}),`; to change anything, delete the item and create a new one.`]}),`\n`,_jsxs(_components.p,{children:[`once `,_jsx(_components.code,{children:`ready`}),`, the card supports `,_jsx(_components.code,{children:`fill`}),` on `,_jsx(_components.code,{children:`merchant_url`}),`’s origin until `,_jsx(_components.code,{children:`expires_at`}),`, five minutes after authorization by default. it then becomes `,_jsx(_components.code,{children:`expired`}),`, and you need a new card item with a freshly collected CVC. supported fill fields are `,_jsx(_components.code,{children:`number`}),`, `,_jsx(_components.code,{children:`cvc`}),`, `,_jsx(_components.code,{children:`exp_month`}),`, `,_jsx(_components.code,{children:`exp_year`}),`, and `,_jsx(_components.code,{children:`expiration`}),`; billing fields aren’t available for VGS cards. the item’s `,_jsx(_components.code,{children:`masks.last4`}),` shows the card’s last four digits; the card brand isn’t reported.`]}),`\n`,_jsxs(_components.p,{children:[`the recorded amount and merchant don’t restrict the payment requests the browser sends. `,_jsx(_components.code,{children:`expires_at`}),` isn’t a single-use guarantee.`]}),`\n`,_jsx(Heading,{level:`2`,id:`handle-authorization-failures`,children:`Handle authorization failures`}),`\n`,_jsxs(_components.p,{children:[`if `,_jsx(_components.code,{children:`authorize`}),` fails, KERNEL stores nothing from your vault. the card’s `,_jsx(_components.code,{children:`state.status`}),` and `,_jsx(_components.code,{children:`state.status_reason`}),` tell you what to do next:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`outcome`}),_jsx(_components.th,{children:`cause`}),_jsx(_components.th,{children:`what to do`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`declined`}),`, `,_jsx(_components.code,{children:`invalid_card`})]}),_jsxs(_components.td,{children:[`the revealed card doesn’t match `,_jsx(_components.code,{children:`last4`}),`, isn’t a valid card number, or the card has expired`]}),_jsx(_components.td,{children:`fix the input and create a new card item`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`declined`}),`, `,_jsx(_components.code,{children:`alias_not_found`})]}),_jsx(_components.td,{children:`your vault has no such alias, usually because the CVC alias expired`}),_jsx(_components.td,{children:`collect the CVC again and create a new card item`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`declined`}),`, `,_jsx(_components.code,{children:`provider_credentials_rejected`})]}),_jsx(_components.td,{children:`VGS refused the service account, for example after you revoked or rotated it`}),_jsxs(_components.td,{children:[`update the provider configuration’s `,_jsx(_components.code,{children:`client_secret`}),`, then create a new card item`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`503 provider_unavailable`}),`, card stays `,_jsx(_components.code,{children:`requested`})]}),_jsx(_components.td,{children:`VGS or KERNEL’s proxy couldn’t complete the reveal`}),_jsxs(_components.td,{children:[`retry `,_jsx(_components.code,{children:`authorize`}),` on the same card item with backoff`]})]})]})]}),`\n`,_jsx(Heading,{level:`2`,id:`what-kernel-stores`,children:`What KERNEL stores`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`card number:`}),` KERNEL keeps an alias of the card number in its own VGS vault. it remains there after the card item expires or is deleted.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`security code:`}),` KERNEL keeps a volatile alias of the security code, which VGS deletes automatically within an hour.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`your aliases and credentials:`}),` your aliases and service account secret are encrypted at rest and never returned.`]}),`\n`]}),`\n`,_jsxs(_components.p,{children:[`KERNEL never receives the card number or security code itself. to stop KERNEL from reading your vault, revoke the service account in VGS and delete the provider configuration. deletion returns `,_jsx(_components.code,{children:`409`}),` while any item still references it.`]}),`\n`,_jsx(Heading,{level:`2`,id:`reference`,children:`Reference`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/integrations/wallets/overview`,children:`wallets overview`}),`: provider configurations, wallet and card items, and payment actions.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/browsers/enable-payments-in-browser-agent`,children:`enable payments in a browser agent`}),`: the controller, agent, fill, and checkout walkthrough.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`/vaults/fill`,children:`fill`}),`: field bindings and outcomes.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.a,{href:`https://kernel.sh/docs/api-reference/vaults/create-or-retrieve-an-identical-vault-item-by-immutable-key`,children:`vault items api`}),`: request fields, operations, and expiry.`]}),`\n`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Bring Your Own VGS Vault","description":"Pay with cards stored in your own VGS vault without copying them to KERNEL","href":"/integrations/wallets/bring-your-own-vgs-vault"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"How it works","slug":"how-it-works","depth":2,"children":[]},{"title":"Before you start","slug":"before-you-start","depth":2,"children":[]},{"title":"Register your service account","slug":"register-your-service-account","depth":2,"children":[]},{"title":"Create a wallet","slug":"create-a-wallet","depth":2,"children":[]},{"title":"Make a purchase","slug":"make-a-purchase","depth":2,"children":[]},{"title":"Handle authorization failures","slug":"handle-authorization-failures","depth":2,"children":[]},{"title":"What KERNEL stores","slug":"what-kernel-stores","depth":2,"children":[]},{"title":"Reference","slug":"reference","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":["/docs/_mintlify/custom/tbd-6fc993ce/ab7a5fd22e95880d/conceptual.js","/docs/_mintlify/custom/tbd-6fc993ce/08c6845006936328/eyebrow.js"],"subdomain":"tbd-6fc993ce","siteName":"Kernel","title":"Bring Your Own VGS Vault - Kernel","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-05T18:11:57.077Z","originalFileLocation":"integrations/wallets/bring-your-own-vgs-vault.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Pay with cards stored in your own VGS vault without copying them to KERNEL\">\u003cmeta data-mint-head name=\"application-name\" content=\"Kernel\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/tbd-6fc993ce/CjCJZGCXnaix-Ex0/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/docs/mintlify-assets/_mintlify/favicons/tbd-6fc993ce/CjCJZGCXnaix-Ex0/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/tbd-6fc993ce/CjCJZGCXnaix-Ex0/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/tbd-6fc993ce/CjCJZGCXnaix-Ex0/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/tbd-6fc993ce/CjCJZGCXnaix-Ex0/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/docs/mintlify-assets/_mintlify/favicons/tbd-6fc993ce/CjCJZGCXnaix-Ex0/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/docs/mintlify-assets/_mintlify/favicons/tbd-6fc993ce/CjCJZGCXnaix-Ex0/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/docs/mintlify-assets/_mintlify/favicons/tbd-6fc993ce/CjCJZGCXnaix-Ex0/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/docs/mintlify-assets/_mintlify/favicons/tbd-6fc993ce/CjCJZGCXnaix-Ex0/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Bring Your Own VGS Vault - Kernel\">\u003cmeta data-mint-head property=\"og:description\" content=\"Pay with cards stored in your own VGS vault without copying them to KERNEL\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Kernel\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://www.kernel.sh/docs/integrations/wallets/bring-your-own-vgs-vault\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://www.kernel.sh/docs/images/og-image.png\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Bring Your Own VGS Vault - Kernel\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Pay with cards stored in your own VGS vault without copying them to KERNEL\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://www.kernel.sh/docs/images/og-image.png\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/docs/mintlify-assets/_mintlify/favicons/tbd-6fc993ce/CjCJZGCXnaix-Ex0/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Kernel\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#212225\">\u003clink data-mint-head rel=\"canonical\" href=\"https://www.kernel.sh/docs/integrations/wallets/bring-your-own-vgs-vault\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/docs/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/docs/integrations/wallets/bring-your-own-vgs-vault.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://www.kernel.sh/#organization\",\"name\":\"Kernel\",\"url\":\"https://www.kernel.sh\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/tbd-6fc993ce/Lt3m2NlMiCztMtQK/logo/black.svg?fit=max\u0026auto=format\u0026n=Lt3m2NlMiCztMtQK\u0026q=85\u0026s=68e987c751954bbc1d35886a02636c73\"}},{\"@type\":\"WebSite\",\"@id\":\"https://www.kernel.sh/docs#website\",\"name\":\"Kernel\",\"url\":\"https://www.kernel.sh/docs\",\"publisher\":{\"@id\":\"https://www.kernel.sh/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://www.kernel.sh/docs/integrations/wallets/bring-your-own-vgs-vault#webpage\",\"url\":\"https://www.kernel.sh/docs/integrations/wallets/bring-your-own-vgs-vault\",\"name\":\"Bring Your Own VGS Vault\",\"description\":\"Pay with cards stored in your own VGS vault without copying them to KERNEL\",\"dateModified\":\"2026-11-05T18:11:57.077Z\",\"isPartOf\":{\"@id\":\"https://www.kernel.sh/docs#website\"},\"breadcrumb\":{\"@id\":\"https://www.kernel.sh/docs/integrations/wallets/bring-your-own-vgs-vault#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://www.kernel.sh/docs/integrations/wallets/bring-your-own-vgs-vault#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"How it works\",\"item\":\"https://www.kernel.sh/docs/introduction/configure\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Configure\",\"item\":\"https://www.kernel.sh/docs/introduction/configure\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Payments\",\"item\":\"https://www.kernel.sh/docs/browsers/payments\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Bring Your Own VGS Vault\",\"item\":\"https://www.kernel.sh/docs/integrations/wallets/bring-your-own-vgs-vault\"}]},{\"@type\":[\"Article\",\"TechArticle\"],\"@id\":\"https://www.kernel.sh/docs/integrations/wallets/bring-your-own-vgs-vault#article\",\"headline\":\"Bring Your Own VGS Vault\",\"name\":\"Bring Your Own VGS Vault\",\"description\":\"Pay with cards stored in your own VGS vault without copying them to KERNEL\",\"url\":\"https://www.kernel.sh/docs/integrations/wallets/bring-your-own-vgs-vault\",\"mainEntityOfPage\":{\"@id\":\"https://www.kernel.sh/docs/integrations/wallets/bring-your-own-vgs-vault#webpage\"},\"image\":\"https://www.kernel.sh/docs/images/og-image.png\",\"dateModified\":\"2026-11-05T18:11:57.077Z\",\"publisher\":{\"@id\":\"https://www.kernel.sh/#organization\"},\"isPartOf\":{\"@id\":\"https://www.kernel.sh/docs#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Kernel\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Kernel","nav":{"global":null,"tabs":[{"tab":"Guides","groups":[{"group":"Overview","pages":[{"title":"wrangle the wild web","sidebarTitle":"Introduction","mode":"wide","href":""},{"title":"See All Features","mode":"wide","href":"/overview/features"},{"title":"How KERNEL Fits Between Your Agent and the Internet","sidebarTitle":"Important Concepts","mode":"wide","href":"/overview/concepts"},{"title":"Why KERNEL?","href":"/overview/why-kernel"}]},{"group":"Start building","pages":[{"title":"Quickstart","mode":"wide","href":"/start/quickstart"},{"title":"Agent Skills","sidebarTitle":"Agent Skills","mode":"wide","href":"/skills/overview"},{"title":"Integrations","sidebarTitle":"Integrations","mode":"wide","href":"/integrations/overview"},{"title":"cookbooks","sidebarTitle":"Cookbooks","mode":"wide","href":"/cookbooks"}]},{"group":"How it works","pages":[{"group":"Configure","pages":[{"title":"Configure","sidebarTitle":"Overview","mode":"wide","href":"/introduction/configure"},{"group":"Stealth","pages":[{"title":"Stealth","sidebarTitle":"Overview","href":"/browsers/bot-detection/overview"},{"title":"Stealth Mode","href":"/browsers/bot-detection/stealth"},{"title":"Web Bot Auth (WBA)","href":"/browsers/bot-detection/web-bot-auth"}]},{"group":"Proxies","pages":[{"title":"Proxies","sidebarTitle":"Overview","href":"/proxies/overview"},{"title":"Residential Proxies","href":"/proxies/residential"},{"title":"ISP Proxies","href":"/proxies/isp"},{"title":"Mobile Proxies","href":"/proxies/mobile"},{"title":"Custom Proxies","href":"/proxies/custom"},{"title":"Per-Host Proxy Routes","href":"/proxies/routes"},{"title":"Egress Allowlists","href":"/browsers/egress-allowlists"},{"title":"Proxy Errors","href":"/proxies/errors"}]},{"group":"Profiles","pages":[{"title":"Profiles","sidebarTitle":"Overview","href":"/browsers/profiles"},{"title":"Save and Reuse Profile State","sidebarTitle":"Save and Reuse State","href":"/browsers/profiles/save-and-reuse"},{"title":"Profile Sharing and Concurrency","sidebarTitle":"Sharing and Concurrency","href":"/browsers/profiles/concurrency"},{"title":"Browser Profile Patterns for AI Agents","sidebarTitle":"Patterns for AI Agents","href":"/browsers/profiles/agent-patterns"}]},{"group":"Vaults","pages":[{"title":"Vaults","sidebarTitle":"Overview","href":"/vaults/overview"},{"title":"Credential Items","href":"/vaults/credentials"},{"title":"Passkeys","href":"/vaults/passkeys"},{"title":"Use an Existing Credential Vault","href":"/vaults/existing-credential-vault"},{"title":"Fill Browser Fields","href":"/vaults/fill"},{"title":"1Password Agentic Autofill","href":"/vaults/1password"}]},{"group":"Authentication","pages":[{"title":"Authentication","sidebarTitle":"Overview","href":"/auth/overview"},{"title":"Fill from Vault","href":"/auth/fill-from-vault"},{"title":"Fill from Managed Auth","href":"/auth/fill-from-managed-auth"},{"group":"Managed Auth","pages":[{"title":"Managed Auth","sidebarTitle":"Overview","href":"/auth/managed-auth"},{"title":"Hosted UI","href":"/auth/hosted-ui"},{"title":"React Component","href":"/auth/react"},{"title":"Programmatic Flow","href":"/auth/programmatic"},{"title":"Connection Configuration","sidebarTitle":"Configuration","href":"/auth/configuration"},{"title":"Connection Lifecycle","sidebarTitle":"Lifecycle","href":"/auth/connection-lifecycle"}]}]},{"group":"Payments","pages":[{"title":"Payments","sidebarTitle":"Overview","href":"/browsers/payments"},{"title":"Wallets","href":"/integrations/wallets/overview"},{"title":"Pay with card","href":"/integrations/wallets/pay-with-card"},{"title":"Pay with multiple cards","sidebarTitle":"Pay with multiple cards","href":"/integrations/wallets/pay-with-multiple-cards"},{"title":"Fill Single-Use Cards","href":"/integrations/wallets/single-use-cards"},{"title":"Link by Stripe","href":"/integrations/wallets/stripe-link"},{"title":"Shop Pay","href":"/integrations/wallets/shop-pay"},{"title":"AgentCard","description":"Use Agentcard to approve browser checkouts against an enrolled payment method","href":"/integrations/wallets/agentcard"},{"title":"Bring Your Own VGS Vault","href":"/integrations/wallets/bring-your-own-vgs-vault"},{"title":"Embedded Card Capture","description":"Collect a card for a KERNEL wallet on your own branded page","href":"/integrations/wallets/embedded-card-capture"},{"title":"Embedded Card CVC","href":"/integrations/wallets/embedded-card-cvc"}]},{"title":"Config Registry","href":"/config-registry"}]},{"group":"Control","pages":[{"title":"Control","sidebarTitle":"Overview","href":"/introduction/control"},{"title":"Playwright Execution","href":"/browsers/playwright-execution"},{"title":"Computer Controls","href":"/browsers/computer-controls"},{"title":"WebMCP","href":"/browsers/webmcp"},{"title":"Browser REPL","href":"/browsers/repl"},{"title":"Process Execution","href":"/browsers/process-execution"},{"title":"File I/O","href":"/browsers/file-io"},{"group":"Code Execution Platform","pages":[{"title":"Develop an App","sidebarTitle":"Develop","href":"/apps/develop"},{"title":"Deploy an App","sidebarTitle":"Deploy","href":"/apps/deploy"},{"title":"Invoke an App","sidebarTitle":"Invoke","href":"/apps/invoke"},{"title":"Invocation Status","sidebarTitle":"Status","href":"/apps/status"},{"title":"Invocation Logs","sidebarTitle":"Logs","href":"/apps/logs"}]}]},{"group":"Scale","pages":[{"title":"Scale","sidebarTitle":"Overview","href":"/introduction/scale"},{"title":"Concurrency and Limits","href":"/browsers/concurrency-and-limits"},{"title":"Performance","href":"/browsers/performance"},{"title":"Browser Pools","href":"/browsers/pools"}]},{"group":"Observe","pages":[{"title":"Observe","sidebarTitle":"Overview","href":"/introduction/observe"},{"title":"Live View","href":"/browsers/live-view"},{"title":"Replays","href":"/browsers/replays"},{"group":"Browser Telemetry","pages":[{"title":"Browser Telemetry","sidebarTitle":"Overview","href":"/browsers/telemetry/overview"},{"title":"Telemetry Categories","sidebarTitle":"Categories","href":"/browsers/telemetry/categories"},{"title":"Stream Telemetry","sidebarTitle":"Streaming","href":"/browsers/telemetry/streaming"},{"title":"Export Telemetry","sidebarTitle":"Export","href":"/browsers/telemetry/export"}]}]},{"group":"Manage","pages":[{"title":"Manage","sidebarTitle":"Overview","mode":"wide","href":"/introduction/manage"},{"title":"Projects","href":"/info/projects"},{"title":"API Keys","href":"/info/api-keys"},{"title":"API Key Permissions","href":"/info/api-key-permissions"},{"title":"Audit Logs","href":"/info/audit-logs"},{"title":"Allowlist KERNEL Domains","sidebarTitle":"Firewall Allowlist","href":"/info/network-access"}]}]},{"group":"Partnering with KERNEL","pages":[{"group":"Plans and Billing","pages":[{"title":"Pricing","sidebarTitle":"Plans and Pricing","href":"/info/pricing"},{"title":"Spending Caps","href":"/info/spending-caps"},{"title":"Buy a Browser with MPP","href":"/info/mpp"}]},{"group":"Security and Trust","pages":[{"title":"Shared Responsibility Model","href":"/shared-responsibility-model"},{"title":"Trust Center","href":"/info/trust-center"},{"title":"Bug Bounty Program: Scope and Policy","sidebarTitle":"Vulnerability Reporting","href":"/security-vulnerability-reporting"},{"title":"KERNEL Bots and Agents","sidebarTitle":"Verify KERNEL Traffic","href":"/bots"}]},{"group":"Enterprise","pages":[{"title":"Enterprise","sidebarTitle":"Overview","href":"/info/enterprise"},{"title":"Single Sign-On (SSO)","sidebarTitle":"SSO","href":"/info/sso"},{"title":"HIPAA","href":"/info/hipaa"},{"title":"Zero Data Retention","href":"/info/zero-data-retention"},{"title":"Contact Sales","href":"/info/contact-sales"}]},{"group":"Support and Community","pages":[{"title":"Support","href":"/info/support"},{"title":"Discord","url":"https://discord.gg/FBrveQRcud","href":"/community/discord"},{"title":"Github","url":"https://github.com/onkernel/kernel-images","href":"/community/github"}]}]}]},{"tab":"API Reference","pages":[{"title":"API Reference","href":"/api-reference/apps/list-apps"}]},{"tab":"CLI","pages":[{"title":"CLI","href":"/reference/cli"}]},{"tab":"MCP","pages":[{"title":"MCP","href":"/reference/mcp-server"}]},{"tab":"Changelog","href":"https://www.kernel.sh/changelog"}]},"basePath":"","title":"Bring Your Own VGS Vault - Kernel","buildId":"dpl_DQCMP4mismmBj3AFK7YZqNhrtLNq","deploymentId":"dpl_DQCMP4mismmBj3AFK7YZqNhrtLNq","dynamics":[],"chunks":[]}