---
title: "Checkout Session Updated"
method: POST
path: "checkout.session.updated"
tags: ["checkout"]
---

# Checkout Session Updated

`POST checkout.session.updated` (webhook)

## Payload

- ClientFacingCheckoutSessionUpdated
  - `event_type` 'checkout.session.updated', required
  - `team_id` string, uuid, required
  - `data` CheckoutSession, required — The checkout session snapshot. One schema is shared by the REST endpoints and the `checkout.session.*` webhook bodies. Invariant on `payment_resource_url` / `payment_resource_client_secret`: they are populated only on responses served from live workflow state over the authenticated API while the session is unpaid, and are always `None` everywhere else. In particular they are never populated in a webhook body — the todo row, the logbook and the delivery pipeline all retain what they are handed, so payment material must not enter any of them. Two things hold that: `from_row` never sets the pair, and `PublishCheckoutSessionEventTodoContext` strips it on validation, before the event is persisted or recorded. Once the session leaves `unpaid` they are `None` on every response, because the material is no longer actionable.
    - `checkout_session_id` string, uuid, required
    - `status` 'unpaid' | 'paid' | 'expired' | 'cancelled', required — ℹ️ This enum is non-exhaustive.
    - `pay_before` string, date-time, required
    - `payment_resource_id` string, nullable, required
    - `order_id` string, uuid, nullable, required
    - `order_transaction_id` string, uuid, nullable, required
    - `appointment_hold_status` 'pending' | 'held' | 'failed', required — Public view of the checkout's PSC appointment hold. `None` on the snapshot means no appointment was requested. `held` covers both a live vendor hold and the attached appointment (`appointment_id` set); `failed` covers every way the hold ended without one (slot gone, PSC unreachable, released on expiry, cancellation, or operator request). ℹ️ This enum is non-exhaustive.
    - `appointment_id` string, uuid, nullable, required
    - `payment_resource_url` string, nullable
    - `payment_resource_client_secret` string, nullable

## Acknowledgement `200`

Successful Response

- unknown

## Other responses

- `422` — Validation Error

---

[API](https://skmtc.dev/tryvital/apis/junction-api.md) · [All operations](https://skmtc.dev/tryvital/apis/junction-api/llms.txt) · [OpenAPI document](https://skmtc.dev/tryvital/apis/junction-api/revisions/33e3f1721367?raw)
