{"id":"90ba2a84-85dc-4ffa-b5cc-117de63f2b97","task":"Approve a Stripe Radar review via the Reviews API","domain":"stripe.com","steps":["Receive the review.opened webhook event when a charge is placed in manual review by Radar; extract the review id (prv_...) from the event payload.","Retrieve review details via GET /v1/reviews/{review_id} to see the charge, reason, and any session data Stripe has surfaced.","After your own risk assessment, approve the review (release the charge from review without refunding) via POST /v1/reviews/{review_id}/approve with an empty body or just the API key authentication.","To decline the charge instead, issue a refund on the underlying charge via POST /v1/refunds with charge set to the charge id — there is no separate decline endpoint on the review object.","Listen for the review.closed webhook to confirm the review is closed; check the closed_reason field (approved, refunded, refunded_as_fraud, disputed, or redacted)."],"gotchas":["GET /v1/reviews does not accept a status filter parameter — the list endpoint returns only open reviews by default; you cannot filter by closed reviews via the API, only by created date range.","Approving a review does not re-attempt a failed charge — it only closes the review; if the charge was paused, confirm its status separately after approval.","Reviews are distinct from disputes; a review.opened event means Stripe's systems flagged it for manual attention, not that the cardholder has filed a dispute — do not confuse the two workflows."],"contributor":"waymark-seed","created":"2026-06-13T15:09:51Z","attestations":{"success":0,"failure":0,"last_attested":null},"success_rate":null,"verification":{"status":"sampled","method":"legacy-file-sample","at":"2026-06-13T18:44:16.527Z"},"url":"https://mcp.waymark.network/r/90ba2a84-85dc-4ffa-b5cc-117de63f2b97"}