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.
FactValue
Contract idpaypal.capture.recorded
Version1.0.0
Hash2331d39709d51d40
Completion levelcapture_recorded
PublisherBuilt and signed by Provely.
CertificationProvisional
SkillPayPal REST API 0.1.0
Valid for provider API versionsv2

What is the intent?

Capture the payment of the approved order.

What is the subject and the action?

MemberValue
Subject typepaypal.capture
Subject identitycapture_id = $action.result.purchase_units[0].payments.captures[0].id
Canonical effectmoney.capture
Provider operationPOST /v2/checkout/orders/{id}/capture
Idempotencyidempotency_key through PayPal-Request-Id, retry is safe

How does the evidence correlate with this operation?

StrategyAssuranceKeysRequired
resource_idstrongcapture_id from $action.result.purchase_units[0].payments.captures[0].idyes
fingerprintweakorder_id from $input.order_id; amount from $input.amountno

Which evidence does the contract require?

Minimum evidence level E2. An independent channel is required. Minimum channels: 1.

ChannelLevelIndependenceVerifierDescription
capture_readbackE2provider readbackhttpRead 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_eventsE3provider eventwebhookEvery 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?

ConditionMeaningPathOperatorExpectedEvidence
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_readback
capture_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_readback
capture_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_readback
capture_currency_matchesThe currency of the captured amount equals the requested currency.$observed.capture_readback.amount.currency_codeeq$input.currency_codecapture_readback
capture_created_in_windowPayPal made the captured payment after the operation started.$observed.capture_readback.create_timetime_after$operation.created_atcapture_readback
capture_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?

ConditionClassReasonPathOperatorExpected
capture_on_wrong_orderwrong subjectThe captured payment belongs to a different order than the intent named.$observed.capture_readback.supplementary_data.related_ids.order_idne$input.order_id
capture_amount_mismatchwrong amountPayPal captured a different amount than the intent stated.$observed.capture_readback.amount.valuene$input.amount
capture_currency_mismatchwrong amountPayPal captured a different currency than the intent stated.$observed.capture_readback.amount.currency_codene$input.currency_code
capture_predates_operationpre existing stateThe 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 memberValue
Initial delay2000 ms
Poll interval5000 ms
Backoffexponential factor 2, max 300000 ms
Maximum attempts60
Timeout900000 ms
Stale read window20000 ms
On timeoutUNVERIFIABLE (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-08
  • paypal.orders.openapi#/paths/~1v2~1checkout~1orders~1{id}~1capture/post/responses/201: paypal.orders.openapi, retrieved 2026-09-08
  • paypal.docs.captures#captured-payments/capture-a-payment: paypal.docs.captures, retrieved 2026-09-08
  • paypal.docs.captures#captured-payments/a-pending-capture: paypal.docs.captures, retrieved 2026-09-08
  • paypal.payments.openapi#/components/schemas/capture: paypal.payments.openapi, retrieved 2026-09-08
  • paypal.payments.openapi#/paths/~1v2~1payments~1captures~1{capture_id}/get/responses/200: paypal.payments.openapi, retrieved 2026-09-08
  • paypal.orders.openapi#/components/schemas/payment_collection/properties/captures: paypal.orders.openapi, retrieved 2026-09-08
  • paypal.payments.openapi#/components/schemas/related_ids/properties/order_id: paypal.payments.openapi, retrieved 2026-09-08
  • paypal.payments.openapi#/components/schemas/capture-2: paypal.payments.openapi, retrieved 2026-09-08
  • paypal.payments.openapi#/components/schemas/money/properties/value: paypal.payments.openapi, retrieved 2026-09-08
  • paypal.payments.openapi#/components/schemas/money/properties/currency_code: paypal.payments.openapi, retrieved 2026-09-08
  • paypal.payments.openapi#/components/schemas/activity_timestamps/properties/create_time: paypal.payments.openapi, retrieved 2026-09-08
  • paypal.events#/events/PAYMENT.CAPTURE.COMPLETED: paypal.events, retrieved 2026-09-08
  • paypal.events#/events/PAYMENT.CAPTURE.PENDING: paypal.events, retrieved 2026-09-08
  • paypal.docs.captures#captured-payments/events: paypal.docs.captures, retrieved 2026-09-08

Can 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.