← All error messages
Amazon SP-API // error message

InvalidInput: Invalid request parameters

In short

InvalidInput means the request was rejected before it was processed: a malformed or missing parameter, a value outside the accepted set, or a combination the operation does not allow. The frustration is that the response usually does not say which parameter. The recurring culprits are date formats and timezones, marketplace IDs that do not match the endpoint region, pagination tokens reused with changed filters, and list parameters serialised in the wrong shape.

What the error means

InvalidInput is a client-side rejection. Amazon looked at the request, decided it was not usable, and stopped. It is deterministic: the same request will fail the same way every time.

That property matters for how you respond. Unlike throttling or a 500, there is nothing to wait for. Retrying an InvalidInput cannot succeed, and it consumes rate-limit budget that you will want for the requests that can.

The recurring causes

Dates and timezones. By some distance the most common. SP-API expects ISO 8601 timestamps with an explicit timezone offset. A local timestamp without a zone, a date with no time component, or a date range where the start is after the end will all be rejected. Timezone handling is also where a working integration breaks at a daylight-saving boundary.

Marketplace ID and region disagreement. A valid marketplace ID for the wrong regional endpoint is not a valid parameter combination. This can present as InvalidInput rather than as an access error, which sends people looking in the wrong place.

Pagination tokens reused across changed filters. A NextToken belongs to the exact query that produced it. Change a filter or a date range and reuse the token, and it is no longer meaningful.

List parameters in the wrong shape. Some operations expect a parameter repeated once per value; sending a single comma-joined string is a different thing and gets rejected.

Values outside the accepted set. Order statuses, fulfilment channels and report types are enumerations. A plausible-looking value that is not in the list is invalid, and enumerations gain and lose members over time.

Working out which one it is

ObservationLook at
Fails for every call to this operationA required parameter is missing or malformed
Fails only for some date rangesDate format, timezone, or range ordering
Fails on the second page onlyPagination token reuse
Fails for one marketplace onlyMarketplace ID against endpoint region
Started failing without a deploymentAmazon tightened validation or changed an enum
Fails only around a clock changeTimezone handling

Log the full response body, not just the message. The error detail often names the parameter, and it is routinely thrown away by error handling that keeps only the summary. This is the cheapest improvement available for this whole class of problem.

Do not retry these

An automatic retry policy that catches all failures will retry InvalidInput forever. That has three costs: it never succeeds, it consumes rate-limit budget, and the resulting throttling masks the original error behind a different one.

Deterministic rejections belong in a dead-letter queue with the request and the full response attached, so a person can look at exactly what was sent.

What we do differently

Frequently asked questions

Why does the error not name the field?
Sometimes it does, in the details of the error payload, and it is worth logging the full response body rather than only the message: teams routinely discard the part that would have answered the question. When it genuinely does not name a field, you are left with bisection, which is why keeping a known-good request to diff against is worth the small effort.
Which parameters cause this most often?
Dates are first by a distance. SP-API expects ISO 8601 with explicit timezone, and a naive local timestamp or a date without a time component gets rejected. After that: marketplace IDs that do not match the endpoint region, a NextToken reused after changing filters, and list parameters serialised as a comma-joined string where repeated parameters were expected.
It worked last week without any change on our side.
Then something changed on the other side. Amazon adds required parameters, tightens validation, and deprecates enum values over time. A request that was acceptable under an older behaviour can become invalid without you touching it. This is the argument for watching the API changelog rather than discovering changes through failures.
Can I retry an InvalidInput?
No, and retrying is actively harmful here. A 4xx of this kind is deterministic: the same request will be rejected the same way every time. Retrying burns rate-limit budget and can push you into throttling, which then masks the original problem. Route these to a dead-letter queue for inspection instead.
How do you avoid this class of failure?
By generating request models from the published API specification rather than hand-writing parameter maps, so a shape change surfaces at build time instead of in production. Combined with validating outbound requests before sending them, and treating deterministic rejections as data problems rather than transient errors to retry.
// scoping request

Seeing this in production and want it to stop being your problem? We design, build, and permanently operate the pipeline, including the validation and retry logic that stops this class of failure reaching you. Fixed-price scoping quote within 48 hours.

We reply within one working day. No newsletter, no sales sequence.