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

Status
Needs you
At risk
$20.00
Detected (detector clock)
2026-10-27 17:03

Diagnosis

AI agent (anthropic/claude-haiku-5.5)

The buyer was refunded $20.00 twice for the same $80.00 espresso order, 2 seconds apart, most likely from a retry without a duplicate-protection key. Both refunds completed, so the buyer has $40.00 back and the extra $20.00 has already left the shop's account. Nothing further goes out automatically, but the owner needs to decide whether to keep the $20.00 overpayment or ask the buyer to return it.

Decisions

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

Ask the owner

Waiting for you

Agent proposed

The duplicate refund is already completed and reversing or adding money movement is the owner's decision, so this needs the owner rather than an automatic action.

Note: Order 6GL03991ND044991H (espresso sampler, $80.00) was refunded $20.00 twice (refunds 5AK95525WH343112R and 5XA57134M1951843B, 2 seconds apart). The buyer has received $40.00 back and the order is still unshipped with $40.00 remaining on the capture. Do y

Policy said

Needs approval
  • The agent asked for a human decision.

PayPal returned

No PayPal call for this action.

Evidence

Refunds 5AK95525WH343112R and 5XA57134M1951843B both returned $20.00 from capture 67B24395JS343504U 2 seconds apart. That pattern usually means a retry without an idempotency key, not two decisions.

capture id
67B24395JS343504U
order id
6GL03991ND044991H
first refund id
5AK95525WH343112R
first refund at
2026-10-27T17:03:39.000Z
duplicate refund id
5XA57134M1951843B
duplicate refund at
2026-10-27T17:03:41.000Z
amount
$20.00
seconds apart
2
order6GL03991ND044991Hcapture67B24395JS343504Urefund5AK95525WH343112Rrefund5XA57134M1951843B

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, 2s apart
Detector
Refunds 5AK95525WH343112R and 5XA57134M1951843B both returned $20.00 from capture 67B24395JS343504U 2 seconds apart. That pattern usually means a retry without an idempotency key, not two decisions.
Agent started triage
Agent
Agent read ledger_lookup
Agent
ledger_lookupNightshift ledgerok
args { "order_id": "6GL03991ND044991H" }
Result
{"order":{"id":"6GL03991ND044991H","intent":"CAPTURE","status":"COMPLETED","amountCents":8000,"currency":"USD","payer":"night-owl-mvqxpgoo350@example.com","cartRef":"cart-84908","description":"Espresso sampler, 4 x 250g","fulfillment":"unfulfilled","shippedAt":null,"createdAt":"2026-10-27T17:03:38.000Z","updatedAt":"2026-10-27T17:03:43.971Z","source":"scenario","scenario":"lab_mvqxnfgj"},"buyer_note_untrusted":null,"authorizations":[],"captures":[{"id":"67B24395JS343504U","orderId":"6GL03991ND044991H","authorizationId":null,"status":"PARTIALLY_REFUNDED","statusReason":null,"amountCents":8000,"currency":"USD","finalCapture":true,"createdAt":"2026-10-27T17:03:38.000Z","updatedAt":"2026-10-27T17:03:43.978Z"}],"refunds":[{"id":"5AK95525WH343112R","captureId":"67B24395JS343504U","orderId":"6GL03991ND044991H","status":"COMPLETED","amountCents":2000,"currency":"USD","createdAt":"2026-10-27T17:03:39.000Z","updatedAt":"2026-10-27T17:03:43.982Z"},{"id":"5XA57134M1951843B","captureId":"67B24395JS343504U","orderId":"6GL03991ND044991H","status":"COMPLETED","amountCents":2000,"currency":"USD","createdAt":"2026-10-27T17:03:41.000Z","updatedAt":"2026-10-27T17:03:43.990Z"}],"failed_capture_attempts":[]}
Agent read get_refund
Agent
get_refundvia PayPal Agent Toolkitok
args { "refund_id": "5XA57134M1951843B" }
Result
{"id":"5XA57134M1951843B","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-84908","status":"COMPLETED","create_time":"2026-10-27T10:03:41-07:00","update_time":"2026-10-27T10:03:41-07:00","payer":{"email_address":"sb-djk8i53501233@business.example.com","merchant_id":"D8M8MT98DPNNG"},"links":[{"href":"https://api.sandbox.paypal.com/v2/payments/refunds/5XA57134M1951843B","rel":"self","method":"GET"},{"href":"https://api.sandbox.paypal.com/v2/payments/captures/67B24395JS343504U","rel":"up","method":"GET"}]}
Agent read get_refund
Agent
get_refundvia PayPal Agent Toolkitok
args { "refund_id": "5AK95525WH343112R" }
Result
{"id":"5AK95525WH343112R","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-84908","status":"COMPLETED","create_time":"2026-10-27T10:03:39-07:00","update_time":"2026-10-27T10:03:39-07:00","payer":{"email_address":"sb-djk8i53501233@business.example.com","merchant_id":"D8M8MT98DPNNG"},"links":[{"href":"https://api.sandbox.paypal.com/v2/payments/refunds/5AK95525WH343112R","rel":"self","method":"GET"},{"href":"https://api.sandbox.paypal.com/v2/payments/captures/67B24395JS343504U","rel":"up","method":"GET"}]}
Agent diagnosis
Agent
The buyer was refunded $20.00 twice for the same $80.00 espresso order, 2 seconds apart, most likely from a retry without a duplicate-protection key. Both refunds completed, so the buyer has $40.00 back and the extra $20.00 has already left the shop's account. Nothing further goes out automatically, but the owner needs to decide whether to keep the $20.00 overpayment or ask the buyer to return it.
Agent proposed: Ask the owner
Agent
The duplicate refund is already completed and reversing or adding money movement is the owner's decision, so this needs the owner rather than an automatic action.
Policy said: needs the owner's approval
Policy gate
  • The agent asked for a human decision.