# Stripe: promotion_code_customer_not_first_time

> Stripe rejects a first-time-only promotion code when the customer has prior transactions, even an unpaid PaymentIntent or a canceled trial. How to handle it.

Canonical: https://app369.com/fix/stripe-promotion-code-not-first-time/
Last updated: 2026-11-10

promotion_code_customer_not_first_time is the Stripe error for a promotion code limited to first-time customers, applied to a customer who already has transactions. Stripe counts a started PaymentIntent or a canceled trial as history, so new-looking customers can fail too.

**Short answer**

Tell the customer the code is for first orders only and let them continue without it. If your checkout creates a PaymentIntent or a trial before the code is applied, apply the code before either is created, because both count as history. Use a code without the first-time restriction for returning customers.

Rather not fix it yourself? [**Stripe Billing Fix and Setup**](https://app369.com/fixed-price/stripe-billing-setup/) handles it at a fixed price, agreed before work starts.

## **Why Stripe says the customer is not first-time, and the fix**

1. 01 ### **An earlier unpaid attempt counts as history**
  > “Initiated a PaymentIntent, even if the payment never completed.” [**Stripe, Coupons and promotion codes (Limit by first time order)**](https://docs.stripe.com/billing/subscriptions/coupons) A customer who started a payment and never finished it still has a transaction on record. If your flow creates the PaymentIntent before the code is entered, apply the code before the PaymentIntent is created.
2. 02 ### **A canceled trial counts too**
  > “Subscribed to a trial period, even if it subsequently canceled.” [**Stripe, Coupons and promotion codes (Limit by first time order)**](https://docs.stripe.com/billing/subscriptions/coupons) A user who started a trial, canceled and came back is no longer first-time for Stripe. Offer returning trial users a different code.
3. 03 ### **The returning customer really has ordered before**
  > “This promotion code can’t be redeemed because the associated customer has prior transactions.” [**Stripe, Error codes (promotion_code_customer_not_first_time)**](https://docs.stripe.com/error-codes) The restriction works as designed. Show a clear message such as “This code is for first orders” and keep the checkout going instead of failing the whole payment.
4. 04 ### **No customer is attached**
  > “A customer must be specified before applying a promotion code that is restricted to first-time transactions.” [**Stripe, Error codes (promotion_code_customer_missing_first_time)**](https://docs.stripe.com/error-codes) Also check: applying a first-time code with no customer gives the related promotion_code_customer_missing_first_time error. Attach the customer before applying the code.

Checked against the vendor’s docs on November 10, 2026: [Stripe docs: Coupons and promotion codes](https://docs.stripe.com/billing/subscriptions/coupons); [Stripe docs: Error codes](https://docs.stripe.com/error-codes); [Stripe API: Create a promotion code](https://docs.stripe.com/api/promotion_codes/create).

## **Rather hand it over?**

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

- [$950**Stripe Billing Fix and Setup**Subscriptions, webhooks, customer portal and failed payments set up or fixed, tested in Stripe test mode.**See scope and start**](https://app369.com/fixed-price/stripe-billing-setup/)
- [from $450**App Fix Ticket**One reproducible bug in an existing mobile or web app, diagnosed and fixed.**See scope and start**](https://app369.com/fixed-price/flutter-firebase-bug-fix/)
- [from $450**AI-Built App Rescue**A Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.****No issues worth fixing, no charge.**** If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.**See scope and start**](https://app369.com/fixed-price/ai-app-rescue/)

[**All 127 Fiverr reviews**](https://app369.com/reviews/)

Related: [**Stripe coupon expired**](https://app369.com/fix/stripe-coupon-expired/) · [**Stripe setup_attempt_failed**](https://app369.com/fix/stripe-setup-attempt-failed/) · [**Stripe customer_max_payment_methods**](https://app369.com/fix/stripe-customer-max-payment-methods/) · [**Stripe card_decline_rate_limit_exceeded**](https://app369.com/fix/stripe-card-decline-rate-limit-exceeded/)

Questions

## **More on this error**

<details>

<summary>**Where is the first-time setting? **+</summary>

In the Dashboard, select “Eligible for first-time order only” on the Create a coupon page. In the API, set first_time_transaction in the promotion code’s restrictions.

</details>

<details>

<summary>**Can I make one customer eligible again? **+</summary>

Stripe’s docs describe no reset for one customer. Create a separate code without the first-time restriction, or one limited to that customer.

</details>

<details>

<summary>**Can you fix it for me? **+</summary>

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

</details>

A different error?

## **Describe it and get a written quote**

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.

[**Describe your problem **→](https://app369.com/contact/) [**All fixes**](https://app369.com/fix/)