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
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)
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_…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)
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.
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)
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;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 : Stripe docs: Error codes; Stripe docs: Manage prices; Stripe docs: Checkout prices migration guide.
Rather hand it over?
Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.
- $950Stripe Billing Fix and SetupSubscriptions, webhooks, customer portal and failed payments set up or fixed, tested in Stripe test mode.See scope and start
- from $450App Fix TicketOne reproducible bug in an existing mobile or web app, diagnosed and fixed.See scope and start
- from $450AI-Built App RescueA 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
Related: Stripe “No such customer” in test or live mode · Stripe works in test mode but not live · Stripe “No such PaymentMethod” · Stripe no default payment method