# Stripe: “No such price: ‘price_…’”

> Stripe says No such price: price_… or No such plan. The ID is a product ID, from the other mode or another account. Use the price ID from the same account.

Canonical: https://app369.com/fix/stripe-no-such-price/
Last updated: 2026-11-08

Creating a Checkout Session or subscription fails with resource_missing: No such price, or on older code No such plan. The ID you passed doesn’t exist in the account and mode your secret key points to. Most often it is a product ID, a test ID used with a live key, or a price from another Stripe account.

**Short answer**

Open the price in the Dashboard, in the same mode as your key, and copy its API ID: it starts with price_, not prod_. Test and live mode have separate prices, so create the live price and put its ID in your production config. To avoid hard-coding IDs, give prices a lookup_key and fetch them by key.

## **Why Stripe can’t find the price, and the fix**

1. 01 ### **A product ID where a price ID belongs**
  > “The ID provided isn’t valid. Either the resource doesn’t exist, or an ID for a different resource has been provided.” [**Stripe, Error codes (resource_missing)**](https://docs.stripe.com/error-codes) A product (prod_…) holds the name; its prices (price_…) hold the amount and interval. line_items and subscription items need the price ID. Copy it from the pricing section of the product in the Dashboard.```
line_items: [{ price: 'price_1Q…', quantity: 1 }] // not prod_…
```
2. 02 ### **A test price with a live key, or the reverse**
  > “Test and live mode API keys, requests, and objects are only available within the corresponding mode.” [**Stripe, Error codes (livemode_mismatch)**](https://docs.stripe.com/error-codes) Prices made in test mode or a sandbox don’t exist in live mode. When you go live, create the products and prices in live mode and switch the IDs in your production environment variables together with the keys.
3. 03 ### **Hard-coded IDs that drift**
  > “If these prices are hard-coded and you want to change them, the process is often manual and requires you to deploy new code.” [**Stripe, Manage prices (Lookup keys)**](https://docs.stripe.com/products-prices/manage-prices) IDs copied into code break when someone recreates a price or switches accounts. A lookup_key such as standard_monthly stays the same: fetch the price by key and use the ID it returns.```
const { data } = await stripe.prices.list({ lookup_keys: ['standard_monthly'] });
const priceId = data[0]?.id;
```
4. 04 ### **Old plan IDs on code written for Plans** No such plan comes from older integrations that pass plan. Stripe says new plans or recurring prices work in the plan parameter, but a one-time price won’t, so check the ID type first. With Connect, also check that the call carries the connected account the price was created on.

Checked against the vendor’s docs on November 8, 2026: [Stripe docs: Error codes](https://docs.stripe.com/error-codes); [Stripe docs: Manage prices](https://docs.stripe.com/products-prices/manage-prices); [Stripe docs: Checkout prices migration guide](https://docs.stripe.com/billing/migration/migrating-prices).

## **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/)

Related: [**Stripe “No such customer” in test or live mode**](https://app369.com/fix/stripe-no-such-customer-test-mode/) · [**Stripe works in test mode but not live**](https://app369.com/fix/stripe-works-in-test-mode-not-live/) · [**Stripe “No such PaymentMethod”**](https://app369.com/fix/stripe-no-such-paymentmethod/) · [**Stripe no default payment method**](https://app369.com/fix/stripe-no-default-payment-method/)

Questions

## **More on this error**

<details>

<summary>**Can I copy test prices to live mode? **+</summary>

Yes, the Dashboard can copy a product and its prices from a sandbox or test mode to live mode. The live copies get new IDs, so update the price IDs in your production config after copying.

</details>

<details>

<summary>**The ID is right and it still fails. What else? **+</summary>

Check which key the server really uses in production (a leftover test key is common), and whether the price was archived or belongs to a connected account that the request doesn’t name.

</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/)