No. Stripe returns a 200 response with a refund object when it accepts the request. The refund then holds one of 5 states. Only succeeded is terminal success. Provely proves created and succeeded as separate promises.

Skill facts from the signed manifest.
FactValue
Skill version0.1.0
CertificationCommunity (score 49 of 100)
Last conformance run2026-09-05T12:00:00Z: 30 of 32 cases passed, 0 critical false VERIFIED
Provider API versions2026-08-26
Default provider API version2026-08-26
Compiled2026-09-05T12:00:00Z by compiler 0.1.0
Manifest hash596962869919041a
Manifest hash checkthe document hashes to the value the manifest states
Signaturevalid, key provely-test-key-1, not in the trusted key map of this build

What does this page prove?

ClaimProven byEvidenceStatus
The created level proves that the Refund object exists at the provider with the requested amount and charge. It does not prove that money moved.stripe.refund.createdE2proven
A Refund object does not prove that money moved. This contract proves the succeeded state on the refund resource and a refund.updated event that carries it.stripe.refund.succeededE2 + E3proven
An outcome outside Stripe, such as a bank credit or a person who read a messagenot provenno E5 channelnot proven
The agent report that the action workednever countsE0not proven

Which completion levels does the Stripe 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
createdstripe.refund.created v1.0.0The created level proves that the Refund object exists at the provider with the requested amount and charge. It does not prove that money moved.E2Community
succeededstripe.refund.succeeded v1.0.0A Refund object does not prove that money moved. This contract proves the succeeded state on the refund resource and a refund.updated event that carries it.E2 + E3Community

What is the Stripe lifecycle?

Which states can a stripe.refund be in?

StateClassVerdictMeaningSource
pendingtransitionalPENDINGStripe submitted the refund to the payment network or waits for a condition.stripe.openapi
requires_actiontransitionalPENDINGThe customer must give bank details before the refund can continue.stripe.openapi
succeededterminal successVERIFIEDThe payment network accepted the refund. The funds return to the customer.stripe.openapi
failedterminal failureFAILEDThe payment network rejected the refund. Stripe returns the funds to the balance.stripe.openapi
canceledterminal neutralFAILEDA refund in requires_action was canceled. No funds moved.stripe.openapi

In stripe.refund under provider API version 2026-08-26, succeeded is the only state that means terminal success. Every other state gives PENDING, FAILED, or UNVERIFIABLE.

Source: stripe.openapi · retrieved 2026-09-05

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_idstrongrefund_id from $action.result.idyesnone
idempotency_keystrongidempotency_key from $operation.idnonone
fingerprintweakcharge from $input.charge; amount from $input.amountno600000 ms

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 Stripe is E1 and never terminal success.

ChannelLevelIndependenceVerifierDeterministicTypical latency
refund_action_responseE1same responseaction_resultyesnot stated
refund_created_eventsE3provider eventwebhookno4000 ms
refund_readbackE2provider readbackhttpyes250 ms
refund_succeeded_eventsE3provider eventwebhookno4000 ms

Which ways can a Stripe action look done and not be?

ContractCaseRuleVerdict
stripe.refund.createdwrong subjectThe refund belongs to a different charge.CONTRADICTED
stripe.refund.createdwrong amountThe provider refunded a different amount.CONTRADICTED
stripe.refund.createdpre existing stateThe refund is older than the operation. It proves nothing.CONTRADICTED
stripe.refund.createdduplicate side effectStripe created more than one refund for the charge since the operation started. Do not retry.CONTRADICTED
stripe.refund.createdobserved stateThe provider reports a failed refund.FAILED
stripe.refund.createdobserved stateThe refund was canceled. No funds will move.CONTRADICTED
stripe.refund.succeededwrong subjectThe refund belongs to a different charge.CONTRADICTED
stripe.refund.succeededwrong amountThe provider refunded a different amount.CONTRADICTED
stripe.refund.succeededpre existing stateThe refund is older than the operation. It proves nothing.CONTRADICTED
stripe.refund.succeededduplicate side effectStripe created more than one refund for the charge since the operation started. Do not retry.CONTRADICTED
stripe.refund.succeededobserved stateThe provider reports a failed refund.FAILED
stripe.refund.succeededobserved stateThe refund is still moving. The runtime observes again later.PENDING
stripe.refund.succeededobserved stateThe refund was canceled. No funds will move.CONTRADICTED

What did the last conformance run show?

The six confidence dimensions of the signed manifest.
DimensionScoreMaximum
Documentation1820
Schema alignment12.7515
Lifecycle certainty2020
Evidence strength1220
Causal correlation1515
Sandbox conformance9.3810
Raw score87.13100
Score after the caps49100

The raw score is 87.13. 2 hard caps apply, so the score is 49 and the level is Community.

The hard caps the compiler applied.
GateCapReason
uncertainty_caps491 uncertainty records are open. The lowest cap is 49.
conformance_threshold892 conformance cases failed.

The last conformance run on 2026-09-05T12:00:00Z passed 30 of 32 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 execution12
error before execution22
evidence unavailable22
idempotent retry22
pre existing state22
stale readback22
still transitional22
terminal failure22
terminal success22
timeout after commit12
version mismatch22
webhook duplicate22
webhook out of order22
wrong amount22
wrong subject22

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

What remains uncertain?

Open questions remain. 1 uncertainty records are open. The lowest cap is 49. The published manifest states the cap and its reason. The questions themselves stay in the compiler review bundle, which no customer receives.

This is why the level is Community and not higher. Unknown means unknown. The compiler does not infer an undocumented rule.

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
stripe.docs.idempotencydocs2026-09-05authored
stripe.docs.refundsdocs2026-09-05authored
stripe.docs.webhooksdocs2026-09-05authored
stripe.eventsevent sample2026-09-05authored
stripe.openapiopenapi2026-09-05trimmed

How do I verify a Stripe action?

Verify a Stripe action with Provely

  1. Begin the operation.Call begin with the contract stripe.refund.created and the input. Keep the operation id and the idempotency key.
  2. Make the Stripe call you make today.Send the Idempotency-Key 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 Stripe response. This is evidence level E1. It is not completion.
  4. Verify.Call verify. The runtime reads refund_action_response, refund_created_events, refund_readback and refund_succeeded_events 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 created level prove the succeeded level?

No. The created level proves that the Refund object exists at the provider with the requested amount and charge. It does not prove that money moved. A Refund object does not prove that money moved. This contract proves the succeeded state on the refund resource and a refund.updated event that carries it. Use stripe.refund.succeeded to prove succeeded.

What does the agent say while Stripe reports pending and requires_action?

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 Stripe API versions does the skill support?

2026-08-26. An operation on another version returns UNVERIFIABLE with the reason version_unsupported. The runtime never guesses.

Does Provely need write access to Stripe?

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