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

# Expiry, release, and handoff

> What happens when a Commitment expires, is released, is handed off, or is completed.

A commitment ends in one of four ways: it is confirmed through a handoff, it is confirmed through a deposit, it expires, or the owner releases it. After confirmation, what happens downstream belongs to your operating systems.

## The commitment lifecycle

```text theme={null}
Held (provisional)
  → Confirmed (deposit paid or external handoff)
  → Or expired (hold lapsed)
  → Or released (owner let it go)
```

Confirmed is terminal at this boundary. Expired and released are also terminal — a closed record cannot be reopened.

## Expiry

When a hold duration is set at commitment creation, the hold expires automatically after that period. An expiry sweep runs against live holds past their deadline and moves them from `held` to `expired`.

| Condition                             | What happens                                                                                                             |
| ------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ |
| Hold with a deadline, deadline passed | The sweep moves the commitment to `expired`. The status becomes **released**. The boundary summary shows "Hold expired". |
| Hold with no deadline                 | The hold does not auto-expire. The owner must release it manually.                                                       |
| Already confirmed or released         | The sweep is a no-op. It never errors on a closed record.                                                                |

The expiry sweep is safe to run repeatedly. A lapsed hold is expired once; subsequent sweeps find nothing to do.

## Release

The owner can release a held commitment at any time before it is confirmed. The **Release hold** action appears on the Commitments page for commitments in the `held` state.

Releasing moves the commitment from `held` to `released`. The boundary summary shows "Released". The status becomes **released**.

<Note>
  Releasing a hold does not refund a deposit. If a deposit was paid and the commitment was already confirmed, the commitment is terminal — releasing is not available. A refund after confirmation updates the deposit cell to "Refunded \$X" and the status to **released**, but the commitment record itself remains `confirmed`.
</Note>

### What release does not do

* It does not delete the commitment record. The record remains visible and immutable.
* It does not delete the quote. The quote receipt remains available with its full derivation.
* It does not affect the book. No pricing rules change.

## Handoff

When the boundary is crossed through an external system — for example, the business records the booking in its own calendar or work order system — the owner confirms the commitment with an external reference.

Confirming with a handoff:

1. Moves the commitment from `held` to `confirmed`.
2. Records the external booking or order reference.
3. Sets the boundary summary to "Handed off · \[reference]".
4. Sets the status to **booked**.

The external reference is the bridge to downstream systems. It tells you where to look for the booking, scheduling, or fulfillment in your own tools.

<Warning>
  Kordless does not schedule, dispatch, or fulfill after handoff. The external reference is the handoff point — what happens next is your operating system's responsibility.
</Warning>

## Completed

When the work is done, the quote state moves to `completed`. This is a post-boundary fact read from the quote, not a commitment state change. The commitment status becomes **completed**.

Completion is the highest priority in the status derivation — a completed quote overrides every other commitment state. The boundary summary continues to show the handoff reference or deposit record from when the commitment was confirmed.

## Downstream integration state

Each commitment records which surface created it:

| Source      | What it means                            |
| ----------- | ---------------------------------------- |
| HQ          | Created from the workspace console       |
| Hosted      | Created from a hosted quote path         |
| Embed       | Created from an embedded quote component |
| API         | Created through the public API           |
| Integration | Created by a downstream integration      |

The commitment event spine emits lifecycle events that downstream integrations can subscribe to:

* **commitment.created** — A new held commitment was created.
* **commitment.confirmed** — The commitment was confirmed, via deposit or handoff.
* **commitment.hold\_expired** — A lapsed hold was expired by the sweep.
* **commitment.released** — The owner released the hold.

Each event carries the commitment ID, quote ID, book pins, and the relevant boundary facts.

## What is preserved

Pausing Live use or a billing interruption does not delete commitments. The commitment record, the quote receipt, and the book version pins all remain visible and immutable. When Live use resumes, the Commitments page returns to its normal state.

## Related

<CardGroup cols={2}>
  <Card title="Product boundary" icon="circle-slash" href="/product/product-boundary">
    What Kordless handles and what happens after commitment.
  </Card>

  <Card title="Holds, booking, and deposits" icon="credit-card" href="/product/commitments/holds-booking-and-deposits">
    How deposits, holds, and booking work at commitment.
  </Card>
</CardGroup>
