$20.00 refunded twice on the same capture, 3s apart

Status
Needs you
At risk
$20.00
Detected (detector clock)
2026-12-01 17:29

Diagnosis

AI agent (anthropic/claude-haiku-5.5)

Two refunds of $20.00 each were issued on the same $80.00 payment for the espresso sampler order, 3 seconds apart. This looks like a duplicate sent by a system retry, so $40.00 has gone back to the buyer in total, and $20.00 more than the one refund you may have intended. Nothing will be sent automatically; the extra $20.00 stays with the buyer until you decide what to do.

Decisions

The agent proposes, the policy gate decides, the executor calls PayPal.

Ask the owner

Waiting for you

Agent proposed

Whether the buyer should have received $20 or $40 is a business decision only the owner can make, and refunds cannot be run automatically.

Note: Refunds 3GU42375GX2618426 and 8H484643K51163030 each returned $20.00 from the $80.00 payment on order 8XN61138VD1171603 (espresso sampler), 3 seconds apart. Did you intend to refund $40.00 total, or only $20.00? PayPal cannot reverse a completed refund fr

Policy said

Needs approval
  • The agent asked for a human decision.

PayPal returned

No PayPal call for this action.

Evidence

Refunds 3GU42375GX2618426 and 8H484643K51163030 both returned $20.00 from capture 7Y412879EP586214L 3 seconds apart. That pattern usually means a retry without an idempotency key, not two decisions.

capture id
7Y412879EP586214L
order id
8XN61138VD1171603
first refund id
3GU42375GX2618426
first refund at
2026-11-04T17:29:33.000Z
duplicate refund id
8H484643K51163030
duplicate refund at
2026-11-04T17:29:36.000Z
amount
$20.00
seconds apart
3
order8XN61138VD1171603capture7Y412879EP586214Lrefund3GU42375GX2618426refund8H484643K51163030

All ids are real PayPal sandbox objects; GET them with your sandbox credentials to check.

Audit trail

Detected, diagnosed, decided, executed. Live.

Detected: $20.00 refunded twice on the same capture, 3s apart
Detector
Refunds 3GU42375GX2618426 and 8H484643K51163030 both returned $20.00 from capture 7Y412879EP586214L 3 seconds apart. That pattern usually means a retry without an idempotency key, not two decisions.
Agent started triage
Agent
Agent read get_refund
Agent
get_refundvia PayPal Agent Toolkitok
args { "refund_id": "8H484643K51163030" }
Result
{"id":"8H484643K51163030","amount":{"currency_code":"USD","value":"20.00"},"note_to_payer":"Sorry about the crushed bag","seller_payable_breakdown":{"gross_amount":{"currency_code":"USD","value":"20.00"},"paypal_fee":{"currency_code":"USD","value":"0.00"},"net_amount":{"currency_code":"USD","value":"20.00"},"total_refunded_amount":{"currency_code":"USD","value":"40.00"}},"custom_id":"cart-95960","status":"COMPLETED","create_time":"2026-11-04T09:29:36-08:00","update_time":"2026-11-04T09:29:36-08:00","payer":{"email_address":"sb-djk8i53501233@business.example.com","merchant_id":"D8M8MT98DPNNG"},"links":[{"href":"https://api.sandbox.paypal.com/v2/payments/refunds/8H484643K51163030","rel":"self","method":"GET"},{"href":"https://api.sandbox.paypal.com/v2/payments/captures/7Y412879EP586214L","rel":"up","method":"GET"}]}
Agent read get_refund
Agent
get_refundvia PayPal Agent Toolkitok
args { "refund_id": "3GU42375GX2618426" }
Result
{"id":"3GU42375GX2618426","amount":{"currency_code":"USD","value":"20.00"},"note_to_payer":"Sorry about the crushed bag","seller_payable_breakdown":{"gross_amount":{"currency_code":"USD","value":"20.00"},"paypal_fee":{"currency_code":"USD","value":"0.00"},"net_amount":{"currency_code":"USD","value":"20.00"},"total_refunded_amount":{"currency_code":"USD","value":"40.00"}},"custom_id":"cart-95960","status":"COMPLETED","create_time":"2026-11-04T09:29:33-08:00","update_time":"2026-11-04T09:29:33-08:00","payer":{"email_address":"sb-djk8i53501233@business.example.com","merchant_id":"D8M8MT98DPNNG"},"links":[{"href":"https://api.sandbox.paypal.com/v2/payments/refunds/3GU42375GX2618426","rel":"self","method":"GET"},{"href":"https://api.sandbox.paypal.com/v2/payments/captures/7Y412879EP586214L","rel":"up","method":"GET"}]}
Agent read ledger_lookup
Agent
ledger_lookupNightshift ledgerok
args { "order_id": "8XN61138VD1171603" }
Result
{"order":{"id":"8XN61138VD1171603","intent":"CAPTURE","status":"COMPLETED","amountCents":8000,"currency":"USD","payer":"night-owl-mw2e5jfx606@example.com","cartRef":"cart-95960","description":"Espresso sampler, 4 x 250g","fulfillment":"unfulfilled","shippedAt":null,"createdAt":"2026-11-04T17:29:31.000Z","updatedAt":"2026-11-04T17:29:47.447Z","source":"scenario","scenario":"lab_mw2e3kyb"},"buyer_note_untrusted":null,"authorizations":[],"captures":[{"id":"7Y412879EP586214L","orderId":"8XN61138VD1171603","authorizationId":null,"status":"PARTIALLY_REFUNDED","statusReason":null,"amountCents":8000,"currency":"USD","finalCapture":true,"createdAt":"2026-11-04T17:29:31.000Z","updatedAt":"2026-11-04T17:29:47.450Z"}],"refunds":[{"id":"3GU42375GX2618426","captureId":"7Y412879EP586214L","orderId":"8XN61138VD1171603","status":"COMPLETED","amountCents":2000,"currency":"USD","createdAt":"2026-11-04T17:29:33.000Z","updatedAt":"2026-11-04T17:29:47.453Z"},{"id":"8H484643K51163030","captureId":"7Y412879EP586214L","orderId":"8XN61138VD1171603","status":"COMPLETED","amountCents":2000,"currency":"USD","createdAt":"2026-11-04T17:29:36.000Z","updatedAt":"2026-11-04T17:29:47.456Z"}],"failed_capture_attempts":[]}
Agent diagnosis
Agent
Two refunds of $20.00 each were issued on the same $80.00 payment for the espresso sampler order, 3 seconds apart. This looks like a duplicate sent by a system retry, so $40.00 has gone back to the buyer in total, and $20.00 more than the one refund you may have intended. Nothing will be sent automatically; the extra $20.00 stays with the buyer until you decide what to do.
Agent proposed: Ask the owner
Agent
Whether the buyer should have received $20 or $40 is a business decision only the owner can make, and refunds cannot be run automatically.
Policy said: needs the owner's approval
Policy gate
  • The agent asked for a human decision.