> ## Documentation Index
> Fetch the complete documentation index at: https://docs.agentcard.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Checkout authorization events

> What happened to a paused checkout: approved, submitted, declined, refused by your rules, expired, watched, charged a different amount, and whether the charge settled.

Filter: `checkout_authorization.*`. Every payload carries `mode`: `token` (the device sent the card and the processor answered), `cse` (the device encrypted it for Adyen and the browser sent it), or `hosted_form` (the device submitted Tranzila's own form). None of these events confirms a merchant order. Only the merchant does.

Every event that finishes an authorization (`approved`, `submitted`, and `expired` when a device may have sent the card) carries a `settlement` object: whether Agentcard can confirm the charge with the processor. When its `final` is `false`, Agentcard is reading the payment back and exactly one of `settled` or `settlement_unconfirmed` follows for the same authorization. When `final` is `true` on the finishing event itself, nothing follows, because there is nothing to read: the request tokenized a card for the merchant to charge, and only the merchant's order confirms it.

| Event | Fires when |
| - | - |
| [`checkout_authorization.approved`](/webhooks/checkout-authorizations/checkout_authorization-approved) | The user approved with their passkey and the processor answered (`token` and `cse` only). |
| [`checkout_authorization.submitted`](/webhooks/checkout-authorizations/checkout_authorization-submitted) | Hosted-form processors only, instead of `approved`: the user's device attested that it submitted the processor's form. |
| [`checkout_authorization.declined`](/webhooks/checkout-authorizations/checkout_authorization-declined) | The user said no, a pre-replay check or one of your presets refused it, the processor refused the card, or your runtime cancelled it. |
| [`checkout_authorization.expired`](/webhooks/checkout-authorizations/checkout_authorization-expired) | Nobody approved within 15 minutes. |
| [`checkout_authorization.amount_mismatch`](/webhooks/checkout-authorizations/checkout_authorization-amount_mismatch) | Fires after `approved` for the same authorization when the charge disagreed with the approval. |
| [`checkout_authorization.settled`](/webhooks/checkout-authorizations/checkout_authorization-settled) | Fires after `approved` (or `expired` with `replay_attempted`) when Agentcard reads the payment back from the processor and it succeeded. Stripe PaymentIntent confirms only. |
| [`checkout_authorization.settlement_unconfirmed`](/webhooks/checkout-authorizations/checkout_authorization-settlement_unconfirmed) | Fires instead of `settled` when the read rests anywhere else: no charge was made (`not_settled`, with why), or the answer stayed unknown for a named reason and Agentcard stopped checking. |
| [`checkout_authorization.refused`](/webhooks/checkout-authorizations/checkout_authorization-refused) | One of your presets refused the purchase before anyone was asked to approve it. No authorization exists. |
| [`checkout_authorization.watched`](/webhooks/checkout-authorizations/checkout_authorization-watched) | Fires after `approved` for the same authorization when the purchase broke a rule one of your presets watches. Nothing is blocked. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.