No. PayPal REST API returns a success response when it accepts the request. The capture then holds one of 6 states. Only COMPLETED is terminal success. Provely proves capture_completed, capture_recorded, refund_completed and refund_recorded as separate promises.

Skill facts from the signed manifest.
FactValue
Skill version0.1.0
PublisherBuilt and signed by Provely.
CertificationProvisional (score 49 of 100)
Last conformance run2026-09-05T12:00:00Z: 59 of 59 cases passed, 0 critical false VERIFIED
Provider API versionsv2
Default provider API versionv2
Compiled2026-09-05T12:00:00Z by compiler 0.1.0
Manifest hashb569478a510412b0
Manifest hash checkthe document hashes to the value the manifest states
Signaturevalid, key provely-skill-2026-09, trusted by this build

What does this page prove?

ClaimProven byEvidenceStatus
The captured payment reached the status COMPLETED. A 201 Created answer with the status PENDING is an object that exists and not money that moved.paypal.capture.completedE2 + E3proven
The captured payment exists with the intended order, amount, and currency. A 201 Created answer with the status PENDING proves that no money moved.paypal.capture.recordedE2 + E3proven
The refund reached the status COMPLETED. A 201 Created answer with the status PENDING is an object that exists and not money that went back.paypal.refund.completedE2 + E3proven
The refund exists with the intended amount and currency, and an event ties it to the intended captured payment. It proves no money went back.paypal.refund.recordedE2 + E3proven
An outcome outside PayPal REST API, such as a bank credit or a person who read a messagenot provenno E5 channelnot proven
The meaning of the FAILED state of paypal.capturenot provenno source states itnot proven
The meaning of the CANCELLED state of paypal.refundnot provenno source states itnot proven
The agent report that the action workednever countsE0not proven

Which completion levels does the PayPal REST API skill expose?

Each level is one promise with one contract. An agent picks the level that matches the promise it makes. It cannot upgrade a level. Read the completion level definition.

LevelContractPromiseEvidenceCertification
capture_completedpaypal.capture.completed v1.0.0The captured payment reached the status COMPLETED. A 201 Created answer with the status PENDING is an object that exists and not money that moved.E2 + E3Provisional
capture_recordedpaypal.capture.recorded v1.0.0The captured payment exists with the intended order, amount, and currency. A 201 Created answer with the status PENDING proves that no money moved.E2 + E3Provisional
refund_completedpaypal.refund.completed v1.0.0The refund reached the status COMPLETED. A 201 Created answer with the status PENDING is an object that exists and not money that went back.E2 + E3Provisional
refund_recordedpaypal.refund.recorded v1.0.0The refund exists with the intended amount and currency, and an event ties it to the intended captured payment. It proves no money went back.E2 + E3Provisional

What is the PayPal REST API lifecycle?

Which states can a paypal.capture be in?

StateClassVerdictMeaningSource
PENDINGtransitionalPENDINGThe captured payment exists and the money did not move. The member status_details.reason states why.paypal.payments.openapi
COMPLETEDterminal successVERIFIEDThe capture completed. The money moved from the payer to the payee.paypal.payments.openapi
DECLINEDterminal failureFAILEDPayPal declined the capture. No money moved.paypal.payments.openapi
REFUNDEDterminal neutralFAILEDThe money moved and a refund returned all of it. The capture is not a failure, and it holds no money now.paypal.payments.openapi
PARTIALLY_REFUNDEDterminal neutralFAILEDThe money moved and a refund returned a part of it.paypal.payments.openapi
FAILEDunknownUNVERIFIABLEThe published enumeration lists this status. No source of this compile states what it means for the money, and the event table names no event for it.paypal.payments.openapi

In paypal.capture under provider API version v2, COMPLETED is the only state that means terminal success. Every other state gives PENDING, FAILED, or UNVERIFIABLE.

Source: paypal.payments.openapi · retrieved 2026-09-08

Which states can a paypal.refund be in?

StateClassVerdictMeaningSource
PENDINGtransitionalPENDINGThe refund exists and the money did not move back. An eCheck refund waits for the bank of the merchant.paypal.payments.openapi
COMPLETEDterminal successVERIFIEDThe refund completed. The money went back to the payer.paypal.payments.openapi
FAILEDterminal failureFAILEDThe settlement process of the bank did not issue the refund.paypal.payments.openapi
CANCELLEDunknownUNVERIFIABLEThe published enumeration lists this status. No source of this compile states when a refund reaches it, and the event table names no event for it.paypal.payments.openapi

In paypal.refund under provider API version v2, COMPLETED is the only state that means terminal success. Every other state gives PENDING, FAILED, or UNVERIFIABLE.

Source: paypal.payments.openapi · retrieved 2026-09-08

How does Provely tie the evidence to this exact operation?

A matching state that already existed must not verify. Every contract names the correlation keys that bind the evidence to the operation, and the idempotency key that stops a duplicate side effect.

StrategyAssuranceKeysRequiredWindow
resource_idstrongcapture_id from $action.result.purchase_units[0].payments.captures[0].idyesnone
fingerprintweakorder_id from $input.order_id; amount from $input.amountno600000 ms
resource_idweakcapture_id from $input.capture_idno600000 ms
resource_idstrongrefund_id from $action.result.idnonone
fingerprintweakcapture_id from $input.capture_id; amount from $input.amountno600000 ms
The skill reads the channels below. It prefers the ones furthest from the action.
In words
  • E0 agent assertion: never sufficient.
  • E1 action response: the provider acknowledged the request.
  • E2 provider readback: the runtime read the resource back.
  • E3 provider event: the provider reported the change.
  • E4 independent system: a system outside the action path agrees.
  • E5 external outcome: the result is observable in the world.

Which evidence channels does the skill read?

The runtime prefers the channel that is more independent from the action path. Read the evidence level definition. An acknowledgement from PayPal REST API is E1 and never terminal success.

ChannelLevelIndependenceVerifierDeterministicTypical latency
capture_completed_eventsE3provider eventwebhookno5000 ms
capture_readbackE2provider readbackhttpyes400 ms
capture_refunded_eventsE3provider eventwebhookno5000 ms
capture_status_eventsE3provider eventwebhookno5000 ms
refund_readbackE2provider readbackhttpyes400 ms

Which ways can a PayPal REST API action look done and not be?

ContractCaseRuleVerdict
paypal.capture.completedwrong subjectThe captured payment belongs to a different order than the intent named.CONTRADICTED
paypal.capture.completedwrong amountPayPal captured a different amount than the intent stated.CONTRADICTED
paypal.capture.completedwrong amountPayPal captured a different currency than the intent stated.CONTRADICTED
paypal.capture.completedpre existing stateThe captured payment is older than the operation. It proves nothing.CONTRADICTED
paypal.capture.completedduplicate side effectPayPal completed more than one capture of the order. Do not retry.CONTRADICTED
paypal.capture.completedobserved statePayPal declined the capture. No money moved. Retry with the first request id.FAILED
paypal.capture.completedobserved stateThe capture is pending. The money did not move. The runtime observes again.PENDING
paypal.capture.completedobserved stateA refund reversed the capture before the verification. Ask a person.CONTRADICTED
paypal.capture.recordedwrong subjectThe captured payment belongs to a different order than the intent named.CONTRADICTED
paypal.capture.recordedwrong amountPayPal captured a different amount than the intent stated.CONTRADICTED
paypal.capture.recordedwrong amountPayPal captured a different currency than the intent stated.CONTRADICTED
paypal.capture.recordedpre existing stateThe captured payment is older than the operation. It proves nothing.CONTRADICTED
paypal.refund.completedwrong amountPayPal refunded a different amount than the intent stated.CONTRADICTED
paypal.refund.completedwrong amountPayPal refunded a different currency than the intent stated.CONTRADICTED
paypal.refund.completedpre existing stateThe refund is older than the operation. It proves nothing.CONTRADICTED
paypal.refund.completedduplicate side effectPayPal refunded the captured payment more than once since the operation started. Do not retry.CONTRADICTED
paypal.refund.completedobserved stateThe settlement process of the bank did not issue the refund. Retry with the first request id.FAILED
paypal.refund.completedobserved stateThe refund is pending. The money did not move back. The runtime observes again.PENDING
paypal.refund.recordedwrong amountPayPal refunded a different amount than the intent stated.CONTRADICTED
paypal.refund.recordedwrong amountPayPal refunded a different currency than the intent stated.CONTRADICTED
paypal.refund.recordedpre existing stateThe refund is older than the operation. It proves nothing.CONTRADICTED
paypal.refund.recordedduplicate side effectPayPal refunded the captured payment more than once since the operation started. Do not retry.CONTRADICTED

What did the last conformance run show?

The six confidence dimensions of the signed manifest.
DimensionScoreMaximum
Documentation1420
Schema alignment015
Lifecycle certainty1620
Evidence strength1620
Causal correlation1015
Sandbox conformance1010
Raw score66100
Score after the caps49100

The raw score is 66. 4 hard caps apply, so the score is 49 and the level is Provisional.

Why the score is capped.
ReasonHighest score it allows
A lifecycle state has unknown semantics. The compiler cannot prove the end state.49
No strong correlation strategy ties the evidence to the operation.69
24 uncertainty records are open. The lowest cap is 49.49
6 mandatory cases are missing. Example: paypal.capture.completed:duplicate_side_effect.74
The score and the level of each contract.
ContractRaw scoreScore after the capsCertification
paypal.capture.completed71.6749Provisional
paypal.capture.recorded71.6749Provisional
paypal.refund.completed6549Provisional
paypal.refund.recorded6549Provisional

The weakest contract is paypal.capture.completed. It scores 49 and reaches Provisional. The package level is Provisional, because a package level never rises above its weakest contract. Read the level of the contract you use.

The last conformance run on 2026-09-05T12:00:00Z passed 59 of 59 cases with 0 critical false VERIFIED. One critical false VERIFIED rejects a skill.

The conformance result by case class.
Case classPassedTotal
duplicate side effect22
error after execution44
error before execution44
evidence unavailable44
idempotent retry44
pre existing state44
stale readback44
still transitional44
terminal failure22
terminal success44
timeout after commit44
version mismatch44
webhook duplicate44
webhook out of order44
wrong amount44
wrong subject22
wrong terminal state11

The conformance artifact digest is 7a1ba0842c927b54. The harness signs the run, so a reader can check that these numbers come from that run.

What remains uncertain?

The level is Provisional because of it. A lifecycle state has unknown semantics. The compiler cannot prove the end state. 24 uncertainty records are open. The lowest cap is 49. Provely does not guess a rule that a source does not state.

Where do these facts come from?

Every claim above cites a source assertion in the skill provenance. The compiler records the source, its hash, and the retrieval date. A page never states a provider rule without one.

SourceKindRetrievedExcerpt
paypal.docs.capturesdocs2026-09-08authored
paypal.docs.credentialsdocs2026-09-08authored
paypal.docs.idempotencydocs2026-09-08authored
paypal.docs.refundsdocs2026-09-08authored
paypal.docs.sandboxdocs2026-09-08authored
paypal.docs.versionsdocs2026-09-08authored
paypal.docs.webhooksdocs2026-09-08authored
paypal.eventsevent sample2026-09-08authored
paypal.orders.openapiopenapi2026-09-08trimmed
paypal.payments.openapiopenapi2026-09-08trimmed

How do I verify a PayPal REST API action?

Verify a PayPal REST API action with Provely

  1. Begin the operation.Call begin with the contract paypal.capture.completed and the input. Keep the operation id and the idempotency key.
  2. Make the PayPal REST API call you make today.Send the PayPal-Request-Id header with the key that begin returned. A retry then cannot create a second side effect.
  3. Submit the acknowledgement.Call action_result with the PayPal REST API response. This is evidence level E1. It is not completion.
  4. Verify.Call verify. The runtime reads capture_completed_events, capture_readback, capture_refunded_events, capture_status_events and refund_readback and evaluates the contract.
  5. Report the verdict exactly as returned.VERIFIED comes with a signed receipt. PENDING comes with the operation id. CONTRADICTED and UNVERIFIABLE are not success.

Questions developers ask

Does the capture_completed level prove the refund_recorded level?

No. The captured payment reached the status COMPLETED. A 201 Created answer with the status PENDING is an object that exists and not money that moved. The refund exists with the intended amount and currency, and an event ties it to the intended captured payment. It proves no money went back. Use paypal.refund.recorded to prove refund_recorded.

What does the agent say while PayPal REST API reports PENDING?

It says: "The action is accepted but not yet verified. Operation: <id>." The verdict is PENDING. The runtime observes again on the contract timing policy.

Which PayPal REST API API versions does the skill support?

v2. An operation on another version returns UNVERIFIABLE with the reason version_unsupported. The runtime never guesses.

Does Provely need write access to PayPal REST API?

No. The agent keeps its write key. The verifier reads with a separate read-only credential where PayPal REST API permits it, and it never shares that credential with the agent.