---
title: "Vault Card"
method: POST
path: "/api/payment/vault-card"
---

# Vault Card

`POST /api/payment/vault-card`

Capture a card through the Basis Theory vault, Stripe stays the processor.

The funnel form (behind ``NEXT_PUBLIC_BT_CHECKOUT``) tokenizes the PAN
into a BT token intent; this endpoint turns it into a regular Stripe
PaymentMethod (BT Ephemeral Proxy — the PAN flows vault→Stripe directly),
confirms a SetupIntent with it, and converts the intent into a permanent
vault token recorded in ``bil_vault_card``. Everything downstream
(Layer 2/3 verify, card-on-file, trial grant, invoicing) is the unchanged
``setup_intent.succeeded`` / ``activate-subscription`` machinery.

Order is load-bearing: the PM create runs BEFORE the intent→token
conversion, because conversion drops the CVC (BT token-intents contract)
and Stripe wants it on initial tokenization.

## Request body

- VaultCardRequest
  - `device_id` string, required
  - `utm_source` string
  - `utm_medium` string
  - `utm_campaign` string
  - `ref_code` string
  - `fbp` string
  - `fbc` string
  - `fbclid` string
  - `rdt_cid` string
  - `auto_recharge` boolean
  - `domain` string
  - `preferred_daily_usd` number, nullable
  - `token_intent_id` string, required
  - `email` string
  - `return_url` string

## Response `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/explee/apis/explee-api.md) · [All operations](https://skmtc.dev/explee/apis/explee-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/explee/explee-api/revisions/f169bc6e9447/schema)
