# Stripe: “Received unknown parameter: source”

> Stripe says Received unknown parameter (parameter_unknown). The field isn’t valid for that endpoint or API version, or belongs in a header. How to find it.

Canonical: https://app369.com/fix/stripe-received-unknown-parameter/
Last updated: 2026-11-08

A Stripe request fails with parameter_unknown: Received unknown parameter, followed by a field name such as source, receipt_email or stripe_account. Stripe rejects the whole request when it sees a field that endpoint doesn’t accept, in the API version the request uses.

**Short answer**

Read the parameter name in the error and look it up in the API reference for that exact endpoint. It is usually a field from another object (source on a PaymentIntent), a field in the wrong place (stripe_account in the body instead of the Stripe-Account header), or a field your API version doesn’t have. Remove it, move it, or set the API version your code was written for.

## **Why Stripe doesn’t know the parameter, and the fix**

1. 01 ### **A field from a different endpoint**
  > “The request contains one or more unexpected parameters. Remove these and try again.” [**Stripe, Error codes (parameter_unknown)**](https://docs.stripe.com/error-codes) Fields from the Charges API, such as source, don’t exist on a PaymentIntent, and some fields live on a nested object instead. Check the parameter list of the endpoint you call and the error’s param value.
2. 02 ### **stripe_account sent as a body field**
  > “Include the connected account ID in the `Stripe-Account` header on each request” [**Stripe, Make API calls for connected accounts (server-side)**](https://docs.stripe.com/connect/authentication) The connected account isn’t a request parameter. Pass it as the Stripe-Account header, which the Node library sets from the stripeAccount request option.```
await stripe.paymentIntents.create(
  { amount, currency: 'usd' },
  { stripeAccount: 'acct_…' }, // options, not params
);
```
3. 03 ### **Code written for another API version**
  > “If you don’t set an API version, recent versions of stripe-node will use the API version that was latest at the time your version of stripe-node was released.” [**Stripe, Set a Stripe API version**](https://docs.stripe.com/sdks/set-version) An example written for an older or newer API version can use fields your request version doesn’t accept. Server-side libraries send the version that was current when that library release came out, so upgrading or downgrading the library changes which fields exist.
4. 04 ### **Custom data in the wrong place** Your own fields, such as an order ID, go inside metadata. Sending them at the top level of the request is an unknown parameter.```
await stripe.checkout.sessions.create({
  // ...
  metadata: { orderId: order.id }, // not orderId at the top level
});
```

Checked against the vendor’s docs on November 8, 2026: [Stripe docs: Error codes](https://docs.stripe.com/error-codes); [Stripe docs: Errors](https://docs.stripe.com/api/errors); [Stripe docs: Set a Stripe API version](https://docs.stripe.com/sdks/set-version); [Stripe docs: Make API calls for connected accounts](https://docs.stripe.com/connect/authentication).

## **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 “Must provide source or customer”**](https://app369.com/fix/stripe-must-provide-source-or-customer/) · [**Stripe “Invalid integer”**](https://app369.com/fix/stripe-invalid-integer/) · [**Stripe “Invalid API Key provided”**](https://app369.com/fix/stripe-invalid-api-key-provided/) · [**Stripe “No such PaymentMethod”**](https://app369.com/fix/stripe-no-such-paymentmethod/)

Questions

## **More on this error**

<details>

<summary>**How do I see the exact request Stripe received? **+</summary>

Open Workbench in the Dashboard and find the failed request in the logs. It shows the request details and the API version used, which usually points straight at the extra field.

</details>

<details>

<summary>**Does a typo cause this too? **+</summary>

Yes. A misspelled field, or camelCase such as successUrl where Stripe expects success_url, is an unknown parameter.

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