Proof · run itmwd6l20z
32 of 33 steps behaved as designed on PayPal
27 moved money as asked · 5 were safety checks that correctly refused to move money (approval limit, injected price, repeated refund, new payee, reused reference) · 1 payout could not run because the shared business account ran out of payout balance.
Recorded Thu, 12 Nov 2026 06:44:40 GMT by the repository's proof script. Each row is one MCPal call; the ids are PayPal's own, and the debug id is what PayPal support can look up. The file is docs/sandbox-proof.json in the repository.
| Step | Result | PayPal ids | Debug id |
|---|---|---|---|
| fix4 charge default payment_link | needs_buyer_approval | order_id 83793224WB374020T | f4293219fe6c7 |
| fix4 charge invoice | invoice_sent | invoice_id INV2-7YBD-G2AG-UQN4-6GSZ | f175107a7b0aa |
| fix4 invoice cancelled via void_hold | cancelled | invoice_id INV2-7YBD-G2AG-UQN4-6GSZ | f501450f700e9 |
| charge card_on_file | captured | order_id 8WL07358AH480534W capture_ids 8LL876624A021532X | f8679443fa658 |
| charge replay | captured | order_id 8WL07358AH480534W capture_ids 8LL876624A021532X | — |
| fix2 charge 500.00 at threshold | blocked as designed · needs_approval | — | |
| fix3 charge injected 1.00 vs quote 42.50 | blocked as designed · denied | — | |
| fix3 charge from quote | captured | order_id 8Y6898978F559301U capture_ids 5JN56756YW2495610 | f6689502dd4f6 |
| hold | deposit_captured | order_id 4WA91673YB5993516 authorization_id 00L63365U8115122W capture_ids 8VV98434S14012132 | f687510927493 |
| fix1 capture_hold | captured | order_id 4WA91673YB5993516 authorization_id 00L63365U8115122W capture_ids 8VV98434S14012132, 0SR20478P95281829 | f213644fa1c7b |
| refund partial | partially_refunded | order_id 4WA91673YB5993516 authorization_id 00L63365U8115122W capture_ids 8VV98434S14012132, 0SR20478P95281829 refund_ids 55644962WW153740W, 9CU997903P5264643 | f3071797572e8 |
| refund rest | refunded | order_id 4WA91673YB5993516 authorization_id 00L63365U8115122W capture_ids 8VV98434S14012132, 0SR20478P95281829 refund_ids 55644962WW153740W, 9CU997903P5264643, 3LW21339698037348 | f4725522757af |
| status hold | refunded | order_id 4WA91673YB5993516 authorization_id 00L63365U8115122W capture_ids 8VV98434S14012132, 0SR20478P95281829 refund_ids 55644962WW153740W, 9CU997903P5264643, 3LW21339698037348 | f84405993573d |
| multi hold | deposit_captured | order_id 8DN93996M35305806 authorization_id 4B813455N5034935B capture_ids 7P398101GN9837110 | f619921a4b375 |
| multiple_partial_captures | {"fallback_used_for_first_partial":null,"second_partial_capture":{"id":"7PX61138V30634015","status":"COMPLETED"}} | ||
| multi capture_hold | captured | order_id 8DN93996M35305806 authorization_id 4B813455N5034935B capture_ids 7P398101GN9837110, 7PX61138V30634015, 0V301958K9059171B | f198981d8bfc9 |
| hold for void | authorized | order_id 08472947K8539704V authorization_id 4SL87695TB410735M | f98689960bc33 |
| fix1 void_hold | voided | order_id 08472947K8539704V authorization_id 4SL87695TB410735M | f90336540894b |
| charge 80 | captured | order_id 2WK79313E1072701X capture_ids 29A87647VS501882V | f19769335fea7 |
| fix5 refund fraction 0.5 | partially_refunded | order_id 2WK79313E1072701X capture_ids 29A87647VS501882V refund_ids 98Y83114TX187724G | f2621189a3ffb |
| fix5 status refundable_remaining | partially_refunded | order_id 2WK79313E1072701X capture_ids 29A87647VS501882V refund_ids 98Y83114TX187724G | f9902293c8b09 |
| fix6 refund 10.00 | partially_refunded | order_id 95187587WE555045D capture_ids 5Y126813Y9816454S refund_ids 64E23321K2546941P | f9285679d6105 |
| fix6 refund retry (replay) | partially_refunded | order_id 95187587WE555045D capture_ids 5Y126813Y9816454S refund_ids 64E23321K2546941P | — |
| fix6 refund confirm_additional within 10 min | blocked as designed · needs_approval | order_id 95187587WE555045D capture_ids 5Y126813Y9816454S refund_ids 64E23321K2546941P | — |
| fix6 second refund after human approval | partially_refunded | order_id 95187587WE555045D capture_ids 5Y126813Y9816454S refund_ids 64E23321K2546941P, 8XC56048SG7315034 | f5962479af00b |
| fix2 pay_out new recipient | blocked as designed · needs_approval | — | |
| pay_out after approval | payout balance empty | f821668b2940c | |
| payout_balance | "sandbox business account has no balance left for payouts (INSUFFICIENT_FUNDS); add funds in the sandbox dashboard" | ||
| subscribe new plan | subscription_active | product_id PROD-16512327WB5214436 plan_id P-67W57524RR3697220NL2WAQA subscription_id I-N2UV6FVVPFGH | f649036eeaafc |
| fix7 subscribe existing plan_id | subscription_approval_pending | product_id PROD-16512327WB5214436 plan_id P-67W57524RR3697220NL2WAQA subscription_id I-7ETY9SPM0GTN | f86208073ecf9 |
| void_hold subscription | cancelled | product_id PROD-16512327WB5214436 plan_id P-67W57524RR3697220NL2WAQA subscription_id I-N2UV6FVVPFGH | f711260fbe231 |
| idempotency install A orderRef=order | captured | order_id 5G143027Y4159494K capture_ids 6RX61932FX557434U | f8032553f7865 |
| idempotency install B orderRef=order | captured | order_id 2YK25148PK003545U capture_ids 76W71881FL444341N | f52203355f557 |
| idempotency install A retry (replay) | captured | order_id 5G143027Y4159494K capture_ids 6RX61932FX557434U | — |
| idempotency install A same ref, different amount | blocked as designed · invalid_input | order_id 5G143027Y4159494K capture_ids 6RX61932FX557434U | — |
“replay” rows call the same verb again with the same orderRef: PayPal returns the same order and capture ids, so no money moves twice.