Skip to content
Merchant guide
HTTPS · Signed events

shift.closed — V2 event (envelope + data)

It reaches you the moment a shift is closed with its full cash count: cash, card and other sales, refunds, and the variance.

Reviewed against implementation
YOUR INTEGRATION, AT A GLANCE
shift.closed — full payload example
{
  "id": "mwh:shift-closed:9e8d7c6b-5a4f-4e3d-2c1b-0a9f8e7d6c5b:5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
  "type": "shift.closed",
  "api_version": "v2",
  "tenant_id": "9e8d7c6b-5a4f-4e3d-2c1b-0a9f8e7d6c5b",
  "data": {
    "shift_id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
    "cashier_name": "Mona Abdullah",
    "staff_id": "6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d",
    "branch_id": "4d5e6f7a-8b9c-4d0e-9f1a-2b3c4d5e6f7a",
    "opened_at": "2026-10-20T09:00:12.442018+00:00",
    "closed_at": "2026-10-20T17:05:40.990214+00:00",
    "starting_float": 500,
    "closing_cash_counted": 3145.25,
    "cash_sales": 2870.25,
    "card_sales": 1240,
    "other_sales": 90,
    "total_refunds": 225,
    "expected_cash": 3145.25,
    "variance": 0,
    "notes": "Normal close"
  }
}
See the implementation
On this page

01When does it fire?

  • When a cashier shift is closed (the CLOSED status) — once per shift.
  • Opening and internal updates generate no events — the close is the event.

02Full payload example

shift.closed — full payload example
{
  "id": "mwh:shift-closed:9e8d7c6b-5a4f-4e3d-2c1b-0a9f8e7d6c5b:5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
  "type": "shift.closed",
  "api_version": "v2",
  "tenant_id": "9e8d7c6b-5a4f-4e3d-2c1b-0a9f8e7d6c5b",
  "data": {
    "shift_id": "5e6f7a8b-9c0d-4e1f-8a2b-3c4d5e6f7a8b",
    "cashier_name": "Mona Abdullah",
    "staff_id": "6a7b8c9d-0e1f-4a2b-9c3d-4e5f6a7b8c9d",
    "branch_id": "4d5e6f7a-8b9c-4d0e-9f1a-2b3c4d5e6f7a",
    "opened_at": "2026-10-20T09:00:12.442018+00:00",
    "closed_at": "2026-10-20T17:05:40.990214+00:00",
    "starting_float": 500,
    "closing_cash_counted": 3145.25,
    "cash_sales": 2870.25,
    "card_sales": 1240,
    "other_sales": 90,
    "total_refunds": 225,
    "expected_cash": 3145.25,
    "variance": 0,
    "notes": "Normal close"
  }
}

03data fields

FieldMeaning
shift_idThe shift id (UUID).
cashier_name / staff_idThe cashier name and id (UUID).
branch_idThe branch id (UUID).
opened_at / closed_atThe open and close times, ISO 8601.
starting_floatThe starting float in the store currency.
closing_cash_countedThe cash counted at close.
cash_sales / card_sales / other_salesCash, card and other-method sales.
total_refundsTotal refunds during the shift.
expected_cashThe arithmetically expected cash.
varianceThe difference between counted and expected.
notesThe free-form close notes.

04Event identity

Pattern: mwh:shift-closed:<tenant_id>:<shift_id> — once per shift.