Last reviewed 2026-09-05Skill version 0.1.0Provisional
Prove that Square holds an authorisation of the card for this amount. The card issuer authorised the amount, and Square holds the authorisation. This level does not prove a capture. The money did not move.
How does the evidence correlate with this operation?
Strategy
Assurance
Keys
Required
resource_id
strong
payment_id from $action.result.payment.id
yes
idempotency_key
strong
idempotency_key from $operation.id
no
fingerprint
weak
reference_id from $input.reference_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
payment_readback
E2
provider readback
http
Read the payment from the provider. The http verifier returns the parsed object, so a condition path is $observed.payment_readback.payment.status. The card state sits at $observed.payment_readback.payment.card_details.status.
payment_created_events
E3
provider event
webhook
The payment.created events for the reference since the operation started. The webhook verifier returns {events, count, latest, earliest, types, duplicates_dropped}. A count above one shows a second charge of the card.
Which conditions must all hold for VERIFIED?
Condition
Meaning
Path
Operator
Expected
Evidence
payment_present
The provider holds the payment with the returned identifier.
$observed.payment_readback.payment.id
eq
$action.result.payment.id
payment_readback
payment_authorised
The payment holds an authorisation. A captured payment was authorised first, so both values satisfy this level.
$observed.payment_readback.payment.status
in
["APPROVED","COMPLETED"]
payment_readback
payment_amount_matches
The amount of the payment equals the requested amount. The member holds the amount without the tip.
The provider created the payment after the operation started.
$observed.payment_readback.payment.created_at
time_after
$operation.created_at
payment_readback
payment_created_event
At least one payment.created event names the reference of this payment. The duplicate guard reads the same channel, so a workspace with no event endpoint cannot verify and cannot miss a second charge either.
$observed.payment_created_events.count
gte
1
payment_created_events
Which conditions give CONTRADICTED?
Condition
Class
Reason
Path
Operator
Expected
payment_on_wrong_reference
wrong subject
The payment carries a different reference than the intent named.
$observed.payment_readback.payment.reference_id
ne
$input.reference_id
payment_amount_mismatch
wrong amount
The provider charged a different amount than the intent stated.