## TL;DR

Stripe tokens are single-use: creating a charge with a token that was already consumed fails. Create a new token per charge, or better, use PaymentMethods and PaymentIntents which are reusable.

## Error

```text
You cannot use a Stripe token more than once.
```

## Steps

1. Check whether the token was already used (logs or idempotency) Expected: you confirm the reuse.
2. Generate a fresh token for each charge attempt Expected: each charge has its own token.
3. For retries, reuse the idempotency key, not the token Expected: retries are safe.
4. Consider migrating to PaymentMethods, which are reusable Expected: the whole class of bug disappears.

## When to use

- Stripe token reuse error on charge create
- The same token is charged twice

## When not to use

- The token is genuinely invalid (then the error differs)
- You need subscriptions (then PaymentMethods are required anyway)

## Tool compatibility

- Stripe tokens vs PaymentMethods
- Payment integrations

## Variant phrasings

### stripe token used more than once

Tokens are single-use. Mint a fresh one per charge.

### cannot use stripe token twice

Same: use idempotency keys for retries, not token reuse.

## Why it happens

Tokens feel like reusable credentials, but Stripe designed them as one-time. Retry logic that re-sends the same token trips this every time.

## Edge cases

- Test-mode tokens cannot be used with live keys and vice versa
- Save the card as a Customer + PaymentMethod for repeat charges

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_U2p_qAw95reB7tRLM-KC3Q
