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).
Known 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.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp