> ## Documentation Index
> Fetch the complete documentation index at: https://primer.io/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# startPaymentFlow

Starts the payment flow for the vaulted payment method. You can get the `id` from any instance of `PrimerHeadlessUniversalCheckout.VaultedPaymentMethod`
returned by [fetchVaultedPaymentMethods](/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods).

Additionally you may pass `vaultedPaymentMethodAdditionalData`, which might be required by some payment methods (e.g.
you might need to pass CVV which can be recommended to increase auth rates).

Make sure that `vaultedPaymentMethodAdditionalData` is [validated](/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/validate) before being passed to this method.

Upon a successful invocation of this function, the SDK will automatically trigger the standard payment [delegate methods](/sdk/ios/v2.x.x/primer-headless-checkout/delegates/PrimerHeadlessUniversalCheckoutDelegate).

```swift SWIFT theme={"dark"}
func startPaymentFlow(vaultedPaymentMethodId: String, vaultedPaymentMethodAdditionalData: PrimerVaultedPaymentMethodAdditionalData? = nil)
```

## Parameters

<Expandable title="Properties" defaultOpen>
  <ResponseField name="vaultedPaymentMethodId" type="String" required>
    The `id` of a `PrimerHeadlessUniversalCheckout.VaultedPaymentMethod` previously retrieved with [fetchVaultedPaymentMethods](/sdk/ios/v2.x.x/primer-headless-checkout/vault-manager/fetchVaultedPaymentMethods).
  </ResponseField>

  <ResponseField name="vaultedPaymentMethodAdditionalData" type="PrimerVaultedPaymentMethodAdditionalData" post={["optional"]}>
    <Expandable title="Direct Subclasses">
      <ResponseField name="PrimerVaultedCardAdditionalData">
        <Expandable title="Properties" defaultOpen>
          <ResponseField name="cvv" type="String" required>
            CVV value associated with the vaulted card.
          </ResponseField>
        </Expandable>
      </ResponseField>
    </Expandable>
  </ResponseField>
</Expandable>

## Example

It's provided that you have started `PrimerHeadlessUniversalCheckout` with a client token, and you know
the vaulted payment method id.

### Without additional data

```swift SWIFT theme={"dark"}
var vaultManager = PrimerHeadlessUniversalCheckout.VaultManager()

func payWithVaultedPaymentMethod(with id: String) {
    self.vaultManager.startPaymentFlow(vaultedPaymentMethodId: id)
}
```

### With additional data

```swift SWIFT theme={"dark"}
var vaultManager = PrimerHeadlessUniversalCheckout.VaultManager()

func payWithVaultedPaymentMethod(with id: String) {
    let vaultedCardAdditionalData = PrimerVaultedCardAdditionalData(cvv: "123")
    self.vaultManager.startPaymentFlow(vaultedPaymentMethodId: id, vaultedPaymentMethodAdditionalData: vaultedCardAdditionalData)
}
```
