## TL;DR
Read the error body first. Stripe 400s name the offending parameter, so the fix is usually a single field. Common causes are an unsupported payment method type, an invalid amount or currency, or a missing required field. Validate the payload field by field against the evaluate_payment reference before retrying.

```text
stripe error: radar evaluate_payment returned 400
```

## Use this when
- The evaluate_payment endpoint returns 400.
- The error body names a specific parameter.
- You are integrating evaluate_payment for the first time.

## Not for this skill when
- The status is 401. That is an authentication problem with your key.
- The status is 404 on a payment_evaluation id. That is a lookup problem.
- The request succeeds but the score looks wrong. That is a scoring question.

## Steps
1. Log the full error response body, including the param field. Verify: you can quote the exact parameter Stripe rejected.
2. Check that the payment method type is one evaluate_payment supports. Verify: the type matches the documented supported list.
3. Validate amount is a positive integer in the smallest currency unit and currency is a supported three-letter code. Verify: no decimals, no symbols.
4. Confirm all required fields for your payment method type are present. Verify: the payload matches the API reference field by field.
5. Retry with the corrected payload. Verify: the response returns a payment_evaluation id.

## Variant phrasings
### radar evaluate_payment bad request
Shorter phrasing.
### stripe evaluate_payment 400 invalid request
Status-focused phrasing.
### evaluate_payment api error stripe radar
API-focused phrasing.

Compatibility: Stripe Radar evaluate_payment API, part of Radar for Fraud Teams. Request schema follows the pinned API version.

## Why it happens
evaluate_payment validates strictly before scoring. A wrong type string, a malformed amount, or a missing required field fails validation immediately, and the 400 names the culprit. Most 400s are payload-shape mistakes, not Radar problems.

## Edge cases / pitfalls
- Error messages reference the parameter path, which may be nested. Read the full path, not just the leaf name.
- API version pinning changes required fields. A payload built for one version can 400 on another.
- Retrying the identical payload will 400 identically. Fix the field first.
- A 400 on the first integration attempt is normal. Treat the error body as the spec and iterate on the payload until it passes.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_jjHmH6Pa833La7UpDjqVwg
