Contract · PayPal REST API · capture_recordedWhat does paypal.capture.recorded prove? Last reviewed 2026-09-05 Skill version 0.1.0 Provisional
Prove that PayPal holds a captured payment for this order. The captured payment exists with the intended order, amount, and currency. A 201 Created answer with the status PENDING proves that no money moved.
Contract identity. Fact Value Contract id paypal.capture.recordedVersion 1.0.0Hash 2331d39709d51d40Completion level capture_recordedPublisher Built and signed by Provely. Certification Provisional Skill PayPal REST API 0.1.0 Valid for provider API versions v2
What is the intent? Capture the payment of the approved order.
What is the subject and the action? Member Value Subject type paypal.captureSubject identity capture_id = $action.result.purchase_units[0].payments.captures[0].id Canonical effect money.captureProvider operation POST /v2/checkout/orders/{id}/captureIdempotency idempotency_key through PayPal-Request-Id, retry is safe
How does the evidence correlate with this operation? Strategy Assurance Keys Required resource_idstrong capture_id from $action.result.purchase_units[0].payments.captures[0].id yes fingerprintweak order_id from $input.order_id; amount from $input.amount no
Which evidence does the contract require? Minimum evidence level E2. An independent channel is required. Minimum channels: 1.
Channel Level Independence Verifier Description capture_readbackE2 provider readback httpRead the captured payment from the Payments API. A condition path is $observed.capture_readback.status, and the amount sits at $observed.capture_readback.amount.value as a string. capture_status_eventsE3 provider event webhookEvery capture event of the intended order since the operation started, whatever the status. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}. A condition reads $observed.capture_status_events.count.
Which conditions must all hold for VERIFIED? Condition Meaning Path Operator Expected Evidence capture_presentThe Payments API holds the captured payment that the capture response named. $observed.capture_readback.ideq$action.result.purchase_units[0].payments.captures[0].idcapture_readbackcapture_on_intended_orderThe captured payment belongs to the order that the intent named. $observed.capture_readback.supplementary_data.related_ids.order_ideq$input.order_idcapture_readbackcapture_amount_matchesThe captured amount equals the requested amount. PayPal states the value as a string, so this is a string comparison and it normalizes nothing. $observed.capture_readback.amount.valueeq$input.amountcapture_readbackcapture_currency_matchesThe currency of the captured amount equals the requested currency. $observed.capture_readback.amount.currency_codeeq$input.currency_codecapture_readbackcapture_created_in_windowPayPal made the captured payment after the operation started. $observed.capture_readback.create_timetime_after$operation.created_atcapture_readbackcapture_status_eventAt least one capture event of this captured payment reached the workspace. The event states the status that PayPal reports, whatever that status is. $observed.capture_status_events.countgte1capture_status_events
Which conditions give CONTRADICTED? Condition Class Reason Path Operator Expected capture_on_wrong_orderwrong subject The captured payment belongs to a different order than the intent named. $observed.capture_readback.supplementary_data.related_ids.order_idne$input.order_idcapture_amount_mismatchwrong amount PayPal captured a different amount than the intent stated. $observed.capture_readback.amount.valuene$input.amountcapture_currency_mismatchwrong amount PayPal captured a different currency than the intent stated. $observed.capture_readback.amount.currency_codene$input.currency_codecapture_predates_operationpre existing state The captured payment is older than the operation. It proves nothing. $observed.capture_readback.create_timetime_before$operation.created_at
Which observed states map to a verdict before completion? The contract declares no verdict map. The completion block decides.
How long does the runtime observe? Timing member Value Initial delay 2000 ms Poll interval 5000 ms Backoff exponential factor 2, max 300000 ms Maximum attempts 60 Timeout 900000 ms Stale read window 20000 ms On timeout UNVERIFIABLE (evidence_unavailable_before_timeout), escalated to a person
Where do these rules come from? paypal.orders.openapi#/paths/~1v2~1checkout~1orders~1{id}~1capture/post: paypal.orders.openapi , retrieved 2026-09-08paypal.orders.openapi#/paths/~1v2~1checkout~1orders~1{id}~1capture/post/responses/201: paypal.orders.openapi , retrieved 2026-09-08paypal.docs.captures#captured-payments/capture-a-payment: paypal.docs.captures , retrieved 2026-09-08paypal.docs.captures#captured-payments/a-pending-capture: paypal.docs.captures , retrieved 2026-09-08paypal.payments.openapi#/components/schemas/capture: paypal.payments.openapi , retrieved 2026-09-08paypal.payments.openapi#/paths/~1v2~1payments~1captures~1{capture_id}/get/responses/200: paypal.payments.openapi , retrieved 2026-09-08paypal.orders.openapi#/components/schemas/payment_collection/properties/captures: paypal.orders.openapi , retrieved 2026-09-08paypal.payments.openapi#/components/schemas/related_ids/properties/order_id: paypal.payments.openapi , retrieved 2026-09-08paypal.payments.openapi#/components/schemas/capture-2: paypal.payments.openapi , retrieved 2026-09-08paypal.payments.openapi#/components/schemas/money/properties/value: paypal.payments.openapi , retrieved 2026-09-08paypal.payments.openapi#/components/schemas/money/properties/currency_code: paypal.payments.openapi , retrieved 2026-09-08paypal.payments.openapi#/components/schemas/activity_timestamps/properties/create_time: paypal.payments.openapi , retrieved 2026-09-08paypal.events#/events/PAYMENT.CAPTURE.COMPLETED: paypal.events , retrieved 2026-09-08paypal.events#/events/PAYMENT.CAPTURE.PENDING: paypal.events , retrieved 2026-09-08paypal.docs.captures#captured-payments/events: paypal.docs.captures , retrieved 2026-09-08Can paypal.capture.recorded return VERIFIED from the action response alone? No. The minimum evidence level is E2. The action response is E1. The completion conditions read capture_readback and capture_status_events.
What happens after the timeout? The verdict is UNVERIFIABLE with the reason evidence_unavailable_before_timeout. The operation goes to a person for review.
Read next