# Does a Square success response mean the outcome happened?

> Does a Square success response mean the outcome happened? The 3 completion levels, the Square lifecycle, and the evidence Provely reads.

Canonical: https://provely.sh/verify/square  
Last reviewed: 2026-09-05  
Skill version: 0.1.0  
Certification: provisional  

**No. Square returns a success response when it accepts the request. The payment then holds one of 5 states. Only `COMPLETED` is terminal success. Provely proves `approved`, `completed` and `refunded` as separate promises.**

*Skill facts from the signed manifest.*

| Fact | Value |
| --- | --- |
| Skill version | `0.1.0` |
| Publisher | Built and signed by Provely. |
| Certification | Provisional (score 49 of 100) |
| Last conformance run | 2026-09-05T12:00:00Z: 52 of 52 cases passed, 0 critical false VERIFIED |
| Provider API versions | `2026-08-19` |
| Default provider API version | `2026-08-19` |
| Compiled | 2026-09-05T12:00:00Z by compiler 0.1.0 |
| Manifest hash | `5b92b4a15b5a20ca` |
| Manifest hash check | the document hashes to the value the manifest states |
| Signature | valid, key `provely-skill-2026-09`, trusted by this build |

## What does this page prove?

| Claim | Proven by | Evidence | Status |
| --- | --- | --- | --- |
| The card issuer authorised the amount, and Square holds the authorisation. This level does not prove a capture. The money did not move. | [square.payment.approved](/verify/square/square.payment.approved) | E2 + E3 | proven |
| An approved payment is an authorisation hold, not a captured payment. This level reads the payment status and the card timeline together. | [square.payment.completed](/verify/square/square.payment.completed) | E2 + E3 | proven |
| A PaymentRefund object does not prove that money moved. This level proves the COMPLETED state on the refund and an event that carries it. | [square.refund.completed](/verify/square/square.refund.completed) | E2 + E3 | proven |
| An outcome outside Square, such as a bank credit or a person who read a message | not proven | no E5 channel | not proven |
| The meaning of the `PENDING` state of `square.payment` | not proven | no source states it | not proven |
| The agent report that the action worked | never counts | E0 | not proven |

## Which completion levels does the Square 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](/glossary/completion-level) definition.

| Level | Contract | Promise | Evidence | Certification |
| --- | --- | --- | --- | --- |
| `approved` | [square.payment.approved](/verify/square/square.payment.approved) v1.0.0 | The card issuer authorised the amount, and Square holds the authorisation. This level does not prove a capture. The money did not move. | E2 + E3 | Provisional |
| `completed` | [square.payment.completed](/verify/square/square.payment.completed) v1.0.0 | An approved payment is an authorisation hold, not a captured payment. This level reads the payment status and the card timeline together. | E2 + E3 | Provisional |
| `refunded` | [square.refund.completed](/verify/square/square.refund.completed) v1.0.0 | A PaymentRefund object does not prove that money moved. This level proves the COMPLETED state on the refund and an event that carries it. | E2 + E3 | Provisional |

## What is the Square lifecycle?

### Which states can a `square.payment` be in?

| State | Class | Verdict | Meaning | Source |
| --- | --- | --- | --- | --- |
| `APPROVED` | transitional | PENDING | The card issuer authorised the amount. Square holds the authorisation. The money did not move. | [square.openapi](https://raw.githubusercontent.com/square/connect-api-specification/master/api.json) |
| `COMPLETED` | terminal success | VERIFIED | Square captured the payment. The money moved. The card_details status member holds CAPTURED. | [square.openapi](https://raw.githubusercontent.com/square/connect-api-specification/master/api.json) |
| `CANCELED` | terminal neutral | FAILED | Square voided the payment. No money moved. | [square.openapi](https://raw.githubusercontent.com/square/connect-api-specification/master/api.json) |
| `FAILED` | terminal failure | FAILED | The payment did not succeed. The response carries an error code. | [square.openapi](https://raw.githubusercontent.com/square/connect-api-specification/master/api.json) |
| `PENDING` | unknown | UNVERIFIABLE | The published description lists this value. No source states what it means for the money of the payment. | [square.openapi](https://raw.githubusercontent.com/square/connect-api-specification/master/api.json) |

In `square.payment` under provider API version `2026-08-19`, `COMPLETED` is the only state that means terminal success. Every other state gives PENDING, FAILED, or UNVERIFIABLE.

Source: https://raw.githubusercontent.com/square/connect-api-specification/master/api.json (retrieved 2026-09-08)

### Which states can a `square.payment_refund` be in?

| State | Class | Verdict | Meaning | Source |
| --- | --- | --- | --- | --- |
| `PENDING` | transitional | PENDING | The refund awaits approval. Square still processes it. | [square.openapi](https://raw.githubusercontent.com/square/connect-api-specification/master/api.json) |
| `COMPLETED` | terminal success | VERIFIED | The refund is successfully completed. The money reached the payment card of the buyer. | [square.openapi](https://raw.githubusercontent.com/square/connect-api-specification/master/api.json) |
| `REJECTED` | terminal neutral | FAILED | Square rejected the refund. No money moved. | [square.openapi](https://raw.githubusercontent.com/square/connect-api-specification/master/api.json) |
| `FAILED` | terminal failure | FAILED | An error occurred. The refund did not complete. | [square.openapi](https://raw.githubusercontent.com/square/connect-api-specification/master/api.json) |

In `square.payment_refund` under provider API version `2026-08-19`, `COMPLETED` is the only state that means terminal success. Every other state gives PENDING, FAILED, or UNVERIFIABLE.

Source: https://raw.githubusercontent.com/square/connect-api-specification/master/api.json (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](/glossary/correlation) keys that bind the evidence to the operation, and the [idempotency](/glossary/idempotency) key that stops a duplicate side effect.

| Strategy | Assurance | Keys | Required | Window |
| --- | --- | --- | --- | --- |
| `resource_id` | strong | payment_id from `$action.result.payment.id` | yes | none |
| `idempotency_key` | strong | idempotency_key from `$operation.id` | no | none |
| `fingerprint` | weak | reference_id from `$input.reference_id`; amount from `$input.amount` | no | 600000 ms |
| `resource_id` | strong | refund_id from `$action.result.refund.id` | yes | none |
| `idempotency_key` | strong | idempotency_key from `$operation.id` | no | none |
| `fingerprint` | weak | payment_id from `$input.payment_id`; amount from `$input.amount` | no | 600000 ms |

*Figure: The skill reads the channels below. It prefers the ones furthest from the action.*

- 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](/glossary/evidence-level) definition. An [acknowledgement](/glossary/acknowledgement) from Square is E1 and never terminal success.

| Channel | Level | Independence | Verifier | Deterministic | Typical latency |
| --- | --- | --- | --- | --- | --- |
| `payment_action_response` | E1 | same response | `action_result` | yes | not stated |
| `payment_completed_events` | E3 | provider event | `webhook` | no | 3000 ms |
| `payment_created_events` | E3 | provider event | `webhook` | no | 3000 ms |
| `payment_readback` | E2 | provider readback | `http` | yes | 300 ms |
| `refund_completed_events` | E3 | provider event | `webhook` | no | 4000 ms |
| `refund_created_events` | E3 | provider event | `webhook` | no | 4000 ms |
| `refund_readback` | E2 | provider readback | `http` | yes | 300 ms |

## Which ways can a Square action look done and not be?

| Contract | Case | Rule | Verdict |
| --- | --- | --- | --- |
| [square.payment.approved](/verify/square/square.payment.approved) | wrong subject | The payment carries a different reference than the intent named. | CONTRADICTED |
| [square.payment.approved](/verify/square/square.payment.approved) | wrong amount | The provider charged a different amount than the intent stated. | CONTRADICTED |
| [square.payment.approved](/verify/square/square.payment.approved) | pre existing state | The payment is older than the operation. It proves nothing. | CONTRADICTED |
| [square.payment.approved](/verify/square/square.payment.approved) | duplicate side effect | Square created more than one payment for the reference since the operation started. Do not retry. | CONTRADICTED |
| [square.payment.approved](/verify/square/square.payment.approved) | observed state | Square reports a failed payment. The response carries an error code. | FAILED |
| [square.payment.approved](/verify/square/square.payment.approved) | observed state | Square voided the payment. No money moved, and no retry can change that. | CONTRADICTED |
| [square.payment.approved](/verify/square/square.payment.approved) | observed state | Square states no meaning for this state. The runtime cannot decide. Ask a person. | UNVERIFIABLE |
| [square.payment.completed](/verify/square/square.payment.completed) | wrong subject | The payment carries a different reference than the intent named. | CONTRADICTED |
| [square.payment.completed](/verify/square/square.payment.completed) | wrong amount | The provider charged a different amount than the intent stated. | CONTRADICTED |
| [square.payment.completed](/verify/square/square.payment.completed) | pre existing state | The payment is older than the operation. It proves nothing. | CONTRADICTED |
| [square.payment.completed](/verify/square/square.payment.completed) | duplicate side effect | Square created more than one payment for the reference since the operation started. Do not retry. | CONTRADICTED |
| [square.payment.completed](/verify/square/square.payment.completed) | observed state | Square reports a failed payment. The response carries an error code. | FAILED |
| [square.payment.completed](/verify/square/square.payment.completed) | observed state | Square voided the payment. No money moved, and no retry can change that. | CONTRADICTED |
| [square.payment.completed](/verify/square/square.payment.completed) | observed state | The payment is not a card payment, so Square writes no card timeline. This level cannot decide. | UNVERIFIABLE |
| [square.payment.completed](/verify/square/square.payment.completed) | observed state | Square holds an authorisation. Nobody captured the payment, so the money did not move. | PENDING |
| [square.payment.completed](/verify/square/square.payment.completed) | observed state | Square states no meaning for this state. The runtime cannot decide. Ask a person. | UNVERIFIABLE |
| [square.refund.completed](/verify/square/square.refund.completed) | wrong subject | The refund belongs to a different payment than the intent named. | CONTRADICTED |
| [square.refund.completed](/verify/square/square.refund.completed) | wrong amount | The provider refunded a different amount than the intent stated. | CONTRADICTED |
| [square.refund.completed](/verify/square/square.refund.completed) | pre existing state | The refund is older than the operation. It proves nothing. | CONTRADICTED |
| [square.refund.completed](/verify/square/square.refund.completed) | duplicate side effect | Square created more than one refund for the payment since the operation started. Do not retry. | CONTRADICTED |
| [square.refund.completed](/verify/square/square.refund.completed) | observed state | An error stopped the refund. Square reports the failed state. | FAILED |
| [square.refund.completed](/verify/square/square.refund.completed) | observed state | Square rejected the refund. No money moved back to the buyer. | CONTRADICTED |
| [square.refund.completed](/verify/square/square.refund.completed) | observed state | The refund awaits approval. The runtime observes again later. | PENDING |

## What did the last conformance run show?

*The six confidence dimensions of the signed manifest.*

| Dimension | Score | Maximum |
| --- | --- | --- |
| Documentation | 14 | 20 |
| Schema alignment | 0 | 15 |
| Lifecycle certainty | 17.78 | 20 |
| Evidence strength | 16 | 20 |
| Causal correlation | 15 | 15 |
| Sandbox conformance | 10 | 10 |
| Raw score | 72.78 | 100 |
| Score after the caps | 49 | 100 |

The raw score is 72.78. 2 hard caps apply, so the score is 49 and the level is Provisional.

*Why the score is capped.*

| Reason | Highest score it allows |
| --- | --- |
| A lifecycle state has unknown semantics. The compiler cannot prove the end state. | 49 |
| 10 uncertainty records are open. The lowest cap is 49. | 49 |

*The score and the level of each contract.*

| Contract | Raw score | Score after the caps | Certification |
| --- | --- | --- | --- |
| `square.payment.approved` | 71 | 49 | Provisional |
| `square.payment.completed` | 71 | 49 | Provisional |
| `square.refund.completed` | 75 | 49 | Provisional |

> The weakest contract is square.payment.approved. 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 52 of 52 cases with 0 critical false VERIFIED. One critical false VERIFIED rejects a skill.

*The conformance result by case class.*

| Case class | Passed | Total |
| --- | --- | --- |
| duplicate side effect | 3 | 3 |
| error after execution | 3 | 3 |
| error before execution | 3 | 3 |
| evidence unavailable | 3 | 3 |
| idempotent retry | 3 | 3 |
| pre existing state | 3 | 3 |
| stale readback | 3 | 3 |
| still transitional | 3 | 3 |
| terminal failure | 3 | 3 |
| terminal success | 3 | 3 |
| timeout after commit | 3 | 3 |
| version mismatch | 3 | 3 |
| webhook duplicate | 3 | 3 |
| webhook out of order | 3 | 3 |
| wrong amount | 3 | 3 |
| wrong resource | 1 | 1 |
| wrong subject | 3 | 3 |
| wrong terminal state | 3 | 3 |

The conformance artifact digest is `d375359d3d20fb3f`. 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. 10 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.

| Source | Kind | Retrieved | Excerpt |
| --- | --- | --- | --- |
| [square.docs.idempotency](https://developer.squareup.com/docs/build-basics/common-api-patterns/idempotency) | docs | 2026-09-08 | authored |
| [square.docs.payments](https://developer.squareup.com/reference/square/objects/Payment) | docs | 2026-09-08 | authored |
| [square.docs.refunds](https://developer.squareup.com/reference/square/objects/PaymentRefund) | docs | 2026-09-08 | authored |
| [square.docs.versions](https://developer.squareup.com/docs/build-basics/versioning-overview) | docs | 2026-09-08 | authored |
| [square.docs.webhooks](https://developer.squareup.com/docs/webhooks/overview) | docs | 2026-09-08 | authored |
| [square.events](https://developer.squareup.com/reference/square/webhooks) | event sample | 2026-09-08 | authored |
| [square.openapi](https://raw.githubusercontent.com/square/connect-api-specification/master/api.json) | openapi | 2026-09-08 | trimmed |

## How do I verify a Square action?

### Verify a Square action with Provely

1. **Begin the operation.** Call `begin` with the contract `square.payment.approved` and the input. Keep the operation id.
2. **Make the Square call you make today.** Send the request with the correlation metadata that `begin` returned.
3. **Submit the acknowledgement.** Call `action_result` with the Square response. This is evidence level E1. It is not completion.
4. **Verify.** Call `verify`. The runtime reads `payment_action_response`, `payment_completed_events`, `payment_created_events`, `payment_readback`, `refund_completed_events`, `refund_created_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 `approved` level prove the `refunded` level?

No. The card issuer authorised the amount, and Square holds the authorisation. This level does not prove a capture. The money did not move. A PaymentRefund object does not prove that money moved. This level proves the COMPLETED state on the refund and an event that carries it. Use `square.refund.completed` to prove `refunded`.

### What does the agent say while Square reports `APPROVED`?

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

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

### Does Provely need write access to Square?

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

## Read next

- [Read the square.payment.approved contract](https://provely.sh/verify/square/square.payment.approved)
- [Read the square.payment.completed contract](https://provely.sh/verify/square/square.payment.completed)
- [Read the square.refund.completed contract](https://provely.sh/verify/square/square.refund.completed)
- [Read the GitHub REST API verification page](https://provely.sh/verify/github)
- [Read the HubSpot CRM API verification page](https://provely.sh/verify/hubspot)
- [See every integration](https://provely.sh/verify)
- [Verify Square actions from Claude Code](https://provely.sh/agents/claude-code)
- [Verify Square actions from Cursor](https://provely.sh/agents/cursor)
- [See every agent integration](https://provely.sh/agents)
- [Open the quick start](https://provely.sh/docs/quick-start)
- [Read how Provely records integration uptime](https://provely.sh/docs/uptime)
- [Read the completion level definition](https://provely.sh/glossary/completion-level)
