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

# Garnishment Event

> POSTs garnishment lifecycle and payroll-scoped events to your garnishment webhook URL.

Zeal POSTs to your **Garnishment webhook** whenever a garnishment order changes or withholding is applied/reversed on a check or contractor payment. Configure the URL on the Partner Dashboard **API** page.

Use top-level `event_type` to distinguish events. Money fields are in **dollars**. Snapshot fields match the public garnishment API shape and always reflect **post-event** garnishment state. Optional fields are omitted when unset.

Event-specific fields:

* `satisfied` — includes `satisfied_reason`
* `applied` — includes exactly one payment identity (`employeeCheckID` + `check_date`, or `contractorPaymentID` + `payment_date`), plus `amount_withheld`, `cap_reason`, and `amount_before_cap`
* `reversed` — same payment identity + `amount_withheld` (no cap fields)

## Event types

| `event_type` | When it fires                                               |
| ------------ | ----------------------------------------------------------- |
| `created`    | Garnishment order created                                   |
| `modified`   | Order superseded by a new record                            |
| `vacated`    | Court/order withdrawn                                       |
| `canceled`   | Canceled (mistake/duplicate/non-legal)                      |
| `satisfied`  | Fully done (balance withheld or end date reached)           |
| `applied`    | Withholding applied on a check/payment (includes cap audit) |
| `reversed`   | Prior apply undone (check/payment void/correction)          |

There is no separate `capped` event — cap audit lives on `applied` via `cap_reason` and `amount_before_cap` (including `$0` starved applications).

When a void reverses an apply that had satisfied the order, Zeal sends `reversed` with the updated snapshot (`status` often returns to `active` when the end date has not passed).

## Returns

Doesn't return anything but rather POSTs a request with garnishment details.

***

## Raw Content Example

```json Created theme={null}
{
  "test": true,
  "event_type": "created",
  "companyID": "108e4a2f1e16487eb56d446077f5454d",
  "garnishmentID": "fadd40898dd146c8b27b9ba02230edc7",
  "workerID": "6964ba87007540ce4c2f5d39",
  "workerType": "employee",
  "status": "active",
  "garnishment_type": "child_support",
  "priority": 1,
  "total_amount_owed": 500,
  "total_amount_withheld": 0,
  "effective_start_date": "2026-01-01",
  "agency_name": "Example Agency",
  "agency_address": "123 Main St",
  "cap_amount": 100,
  "garnishment_state": "CA",
  "case_id": "CASE-123",
  "order_number": "ORD-456",
  "created_at": "2026-07-29T17:00:00.000Z",
  "updated_at": "2026-07-29T17:00:00.000Z",
  "timestamp": "2026-07-29T17:00:00.000Z"
}
```

```json Applied theme={null}
{
  "test": true,
  "event_type": "applied",
  "companyID": "108e4a2f1e16487eb56d446077f5454d",
  "garnishmentID": "fadd40898dd146c8b27b9ba02230edc7",
  "workerID": "6964ba87007540ce4c2f5d39",
  "workerType": "employee",
  "status": "active",
  "garnishment_type": "child_support",
  "priority": 1,
  "total_amount_owed": 500,
  "total_amount_withheld": 75,
  "effective_start_date": "2026-01-01",
  "agency_name": "Example Agency",
  "agency_address": "123 Main St",
  "cap_amount": 100,
  "garnishment_state": "CA",
  "case_id": "CASE-123",
  "order_number": "ORD-456",
  "employeeCheckID": "check_abc123",
  "check_date": "2026-07-29",
  "amount_withheld": 75,
  "cap_reason": "percentage",
  "amount_before_cap": 120,
  "created_at": "2026-07-01T17:00:00.000Z",
  "updated_at": "2026-07-29T17:00:00.000Z",
  "timestamp": "2026-07-29T17:00:00.000Z"
}
```
