> For the complete documentation index, see [llms.txt](https://docs.partssource.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.partssource.com/webhooks-customer/preview/event-catalog.md).

# Event Catalog

Complete reference of webhook event types in the upcoming release

{% hint style="warning" %}
**Preview** — this page describes the upcoming release (early September). Content is subject to change until announced in the changelog. Build against the **Current** variant for today's behavior.
{% endhint %}

This page lists every webhook event type published by PartsSource as of the upcoming release. Each event links to its payload schema, documented in the [Payload Reference](/webhooks-customer/preview/payload-reference.md).

## Event Envelope

Every webhook delivery is wrapped in a standard envelope. Your endpoint receives this structure on every POST request, regardless of event type. Event-specific detail lives in `payload`.

| Field         | JSON Key         | Type           | Presence       | Description                                                                                 |
| ------------- | ---------------- | -------------- | -------------- | ------------------------------------------------------------------------------------------- |
| EventType     | `event_type`     | string         | Always         | The event type identifier                                                                   |
| CompanyId     | `company_id`     | long           | Always         | Company ID for multi-tenant isolation                                                       |
| OrderId       | `order_id`       | long           | Always         | Unique identifier for the order                                                             |
| LineItemId    | `line_item_id`   | long           | When available | Line item identifier. Present on line-level events, omitted on order-level events           |
| LineItemType  | `line_item_type` | string         | Always         | One of `part`, `depot_flat_rate`, `depot_quoted`, `service`                                 |
| OccurredAt    | `occurred_at`    | DateTimeOffset | Always         | Timestamp when the event occurred                                                           |
| Payload       | `payload`        | object         | Always         | The event-specific payload ([see objects](/webhooks-customer/preview/payload-reference.md)) |
| CorrelationId | `correlation_id` | string         | When available | Correlation ID for tracing across services                                                  |
| Source        | `source`         | string         | When available | Name of the publishing service                                                              |
| Metadata      | `metadata`       | object         | When available | Additional key/value metadata                                                               |

```json
{
  "event_type": "customer.shipment.shipped",
  "company_id": 12345,
  "order_id": 50001,
  "line_item_id": 67890,
  "line_item_type": "part",
  "occurred_at": "2024-01-18T15:30:00Z",
  "correlation_id": "corr-abc123",
  "source": "order-service",
  "payload": { }
}
```

{% hint style="info" %}
`order_id`, `line_item_id`, and `line_item_type` are envelope fields. Most payload objects do **not** repeat them — read them from the envelope.
{% endhint %}

Delivery remains at-least-once; the composite deduplication key (`event_type:order_id:line_item_id:occurred_at`) is unchanged and works for all new events.

***

## Active Events

| #  | Event                                           | Status                    |
| -- | ----------------------------------------------- | ------------------------- |
| 1  | `customer.order.line.created`                   | Existing — payload grows  |
| 2  | `customer.order.line.processed`                 | **New**                   |
| 3  | `customer.order.line.split`                     | **New**                   |
| 4  | `customer.order.line.approval.requested`        | Existing                  |
| 5  | `customer.order.line.approval.approved`         | Existing — behavior fix   |
| 6  | `customer.order.line.approval.completed`        | Existing — payload grows  |
| 7  | `customer.order.line.approval.rejected`         | Existing — behavior fix   |
| 8  | `customer.order.line.backorder.created`         | Existing                  |
| 9  | `customer.order.line.backorder.updated`         | Existing                  |
| 10 | `customer.order.line.cancelled`                 | Existing                  |
| 11 | `customer.shipment.shipped`                     | Existing                  |
| 12 | `customer.shipment.tracking.assigned`           | Existing — timing changes |
| 13 | `customer.shipment.tracking.updated`            | **New**                   |
| 14 | `customer.shipment.delivered`                   | **New**                   |
| 15 | `customer.shipment.estimated_ship_date.created` | Existing                  |
| 16 | `customer.shipment.estimated_ship_date.updated` | Existing                  |
| 17 | `customer.return.requested`                     | **New**                   |

{% hint style="warning" %}
`order.line.estimated_ship_date.created` and `.updated` are retired in this release. If you consume them, migrate to the `customer.shipment.estimated_ship_date.*` pair before the release; their current payloads remain documented in the Current variant until retirement.
{% endhint %}

***

## Event Details

### `customer.order.line.created`

Triggered when a line item is created on an order. This is the richest payload — it carries the full ordered-item detail.

**Payload:** [Order](/webhooks-customer/preview/payload-reference.md#order) | **Key fields:** `description`, `unit_price`, `quantity`, `estimated_ship_date`

```json
{
  "event_type": "customer.order.line.created",
  "company_id": 12345,
  "order_id": 50001,
  "line_item_id": 67890,
  "line_item_type": "part",
  "occurred_at": "2024-01-15T10:30:00Z",
  "payload": {
    "customer_po_number": "PO-2024-001",
    "requested_part_number": "HYD-3400-PUMP",
    "description": "Hydraulic Pump - 3400 Series",
    "manufacturer": "Acme Parts Co",
    "manufacturer_id": 100,
    "condition": "New",
    "unit_price": 49.99,
    "quantity": 1,
    "planned_carrier": "UPS",
    "planned_ship_method": "Ground",
    "use_shipping_account": false,
    "is_critical_hard_down": false,
    "estimated_ship_date": "2024-01-20T00:00:00Z"
  }
}
```

### `customer.order.line.processed`

Triggered once per line when it has met all prerequisites and is released for fulfillment. Consolidates the legacy Ordered and Completed messages into a single event.

**Payload:** see the `OrderLineProcessed` entry in the [Payload Reference](/webhooks-customer/preview/payload-reference.md).

### `customer.order.line.split`

Triggered when a shipment order is split into two lines.

**Payload:** see the `OrderLineSplit` entry in the [Payload Reference](/webhooks-customer/preview/payload-reference.md).

### `customer.order.line.approval.requested`

Triggered when a line item enters an approval workflow and is awaiting a decision.

**Payload:** [OrderApproval](/webhooks-customer/preview/payload-reference.md#orderapproval) | **Key fields:** `submitted_by`, `approval_level`, `total_amount`

```json
{
  "event_type": "customer.order.line.approval.requested",
  "company_id": 12345,
  "order_id": 50001,
  "line_item_id": 67890,
  "line_item_type": "part",
  "occurred_at": "2024-01-15T14:30:00Z",
  "payload": {
    "approval_id": 555,
    "submitted_by": "jsmith@hospital.org",
    "submitted_by_id": 4471,
    "submitted_at": "2024-01-15T14:30:00Z",
    "approval_level": 1,
    "approval_type": "Price Override",
    "total_amount": 1250.00
  }
}
```

### `customer.order.line.approval.approved`

Triggered when an approver approves the line item at a given approval level. On multi-level workflows this fires once per level.

**Payload:** [OrderLineApprovalApproved](/webhooks-customer/preview/payload-reference.md#orderlineapprovalapproved) | **Key fields:** `approved_by`, `approval_level`, `total_amount`

```json
{
  "event_type": "customer.order.line.approval.approved",
  "company_id": 12345,
  "order_id": 50001,
  "line_item_id": 67890,
  "line_item_type": "part",
  "occurred_at": "2024-01-15T16:05:00Z",
  "payload": {
    "approved_by": "mjones@hospital.org",
    "approved_by_id": 8812,
    "approved_at": "2024-01-15T16:05:00Z",
    "approval_level": 1,
    "total_amount": 1250.00
  }
}
```

### `customer.order.line.approval.completed`

Triggered when the approval process finishes and the line item proceeds. This is the event to key on if you only care about the final outcome, not each level.

**Payload:** [OrderLineApprovalCompleted](/webhooks-customer/preview/payload-reference.md#orderlineapprovalcompleted) | **Key fields:** `approved_by`, `total_amount`, `customer_po_number`

```json
{
  "event_type": "customer.order.line.approval.completed",
  "company_id": 12345,
  "order_id": 50001,
  "line_item_id": 67890,
  "line_item_type": "part",
  "occurred_at": "2024-01-15T16:30:00Z",
  "payload": {
    "approved_by": "mjones@hospital.org",
    "approved_by_id": 8812,
    "approved_at": "2024-01-15T16:30:00Z",
    "total_amount": 1250.00,
    "customer_po_number": "PO-2024-001"
  }
}
```

### `customer.order.line.approval.rejected`

Triggered when an approver rejects the line item.

**Payload:** [OrderLineApprovalRejected](/webhooks-customer/preview/payload-reference.md#orderlineapprovalrejected) | **Key fields:** `rejected_by`, `rejection_reason`, `total_amount`

```json
{
  "event_type": "customer.order.line.approval.rejected",
  "company_id": 12345,
  "order_id": 50001,
  "line_item_id": 67890,
  "line_item_type": "part",
  "occurred_at": "2024-01-15T16:20:00Z",
  "payload": {
    "rejected_by": "mjones@hospital.org",
    "rejected_by_id": 8812,
    "rejected_at": "2024-01-15T16:20:00Z",
    "approval_level": 1,
    "rejection_reason": "Exceeds departmental budget for this quarter",
    "total_amount": 1250.00
  }
}
```

### `customer.order.line.backorder.created`

Triggered when a line item is placed on backorder.

**Payload:** [OrderLineBackordered](/webhooks-customer/preview/payload-reference.md#orderlinebackordered) | **Key fields:** `backorder_reason`, `backorder_eta`

```json
{
  "event_type": "customer.order.line.backorder.created",
  "company_id": 12345,
  "order_id": 50001,
  "line_item_id": 67890,
  "line_item_type": "part",
  "occurred_at": "2024-01-16T09:00:00Z",
  "payload": {
    "backordered_at": "2024-01-16T09:00:00Z",
    "backorder_reason": "Out of stock - expected restock in 2 weeks",
    "backorder_eta": "2024-01-29T00:00:00Z"
  }
}
```

### `customer.order.line.backorder.updated`

Triggered when backorder details change — most commonly a revised ETA.

**Payload:** [BackorderUpdated](/webhooks-customer/preview/payload-reference.md#backorderupdated) | **Key fields:** `backorder_eta`, `previous_backorder_eta`

```json
{
  "event_type": "customer.order.line.backorder.updated",
  "company_id": 12345,
  "order_id": 50001,
  "line_item_id": 67890,
  "line_item_type": "part",
  "occurred_at": "2024-01-22T11:15:00Z",
  "payload": {
    "backorder_eta": "2024-02-05T00:00:00Z",
    "previous_backorder_eta": "2024-01-29T00:00:00Z",
    "backorder_reason": "Manufacturer delay",
    "updated_at": "2024-01-22T11:15:00Z"
  }
}
```

### `customer.order.line.cancelled`

Triggered when a line item will not be fulfilled and will not ship. This is a terminal state.

**Payload:** [OrderLineCancelled](/webhooks-customer/preview/payload-reference.md#orderlinecancelled) | **Key fields:** `cancellation_reason`, `cancellation_code`, `is_requote`

```json
{
  "event_type": "customer.order.line.cancelled",
  "company_id": 12345,
  "order_id": 50001,
  "line_item_id": 67890,
  "line_item_type": "part",
  "occurred_at": "2024-01-16T10:00:00Z",
  "payload": {
    "line_item_id": 67890,
    "cancellation_reason": "Customer Cancelled",
    "cancellation_code": "CUST_CANCEL",
    "cancelled_by": "jsmith@hospital.org",
    "cancelled_by_id": 4471,
    "cancelled_at": "2024-01-16T10:00:00Z",
    "is_requote": false
  }
}
```

{% hint style="info" %}
When `is_requote` is `true`, the line was cancelled as part of a requote rather than abandoned — expect a replacement line item to follow.
{% endhint %}

### `customer.shipment.shipped`

Triggered when a shipment is dispatched.

**Payload:** [Shipment](/webhooks-customer/preview/payload-reference.md#shipment) | **Key fields:** `tracking_number`, `carrier`, `estimated_delivery_date`

```json
{
  "event_type": "customer.shipment.shipped",
  "company_id": 12345,
  "order_id": 50001,
  "line_item_id": 67890,
  "line_item_type": "part",
  "occurred_at": "2024-01-18T15:30:00Z",
  "payload": {
    "shipment_type": "order_fulfillment",
    "direction": "to_customer",
    "occurred_at": "2024-01-18T15:30:00Z",
    "tracking_number": "1Z999AA10123456784",
    "carrier": "UPS",
    "ship_method": "Ground",
    "shipped_at": "2024-01-18T15:30:00Z",
    "estimated_delivery_date": "2024-01-20"
  }
}
```

### `customer.shipment.tracking.assigned`

Triggered when a tracking number is assigned to a shipment. In this release, assignment can fire when the shipping label is generated — potentially minutes to days before `customer.shipment.shipped`, instead of at the same time.

**Payload:** [ShipmentTrackingAssigned](/webhooks-customer/preview/payload-reference.md#shipmenttrackingassigned) | **Key fields:** `tracking_number`, `carrier`, `assigned_at`

```json
{
  "event_type": "customer.shipment.tracking.assigned",
  "company_id": 12345,
  "order_id": 50001,
  "line_item_id": 67890,
  "line_item_type": "part",
  "occurred_at": "2024-01-18T14:00:00Z",
  "payload": {
    "shipment_type": "order_fulfillment",
    "direction": "to_customer",
    "tracking_number": "1Z999AA10123456784",
    "carrier": "UPS",
    "assigned_at": "2024-01-18T14:00:00Z"
  }
}
```

### `customer.shipment.tracking.updated`

Triggered when a tracking number changes after initial assignment.

**Payload:** see the `ShipmentTrackingUpdated` entry in the [Payload Reference](/webhooks-customer/preview/payload-reference.md).

### `customer.shipment.delivered`

Triggered when the customer confirms they accepted delivery.

**Payload:** see the `ShipmentDelivered` entry in the [Payload Reference](/webhooks-customer/preview/payload-reference.md).

### `customer.shipment.estimated_ship_date.created`

Triggered when a ship date is first committed for a shipment.

**Payload:** [ShipmentEstimatedShipDateCreated](/webhooks-customer/preview/payload-reference.md#shipmentestimatedshipdatecreated) | **Key fields:** `estimated_ship_date`, `committed_at`

```json
{
  "event_type": "customer.shipment.estimated_ship_date.created",
  "company_id": 12345,
  "order_id": 50001,
  "line_item_id": 67890,
  "line_item_type": "part",
  "occurred_at": "2024-01-15T14:00:00Z",
  "payload": {
    "shipment_type": "order_fulfillment",
    "direction": "to_customer",
    "estimated_ship_date": "2024-01-18T00:00:00Z",
    "reason_description": "Standard processing time",
    "committed_at": "2024-01-15T14:00:00Z"
  }
}
```

### `customer.shipment.estimated_ship_date.updated`

Triggered when a previously committed shipment ship date changes.

**Payload:** [ShipmentEstimatedShipDateUpdated](/webhooks-customer/preview/payload-reference.md#shipmentestimatedshipdateupdated) | **Key fields:** `estimated_ship_date`, `previous_estimated_ship_date`

```json
{
  "event_type": "customer.shipment.estimated_ship_date.updated",
  "company_id": 12345,
  "order_id": 50001,
  "line_item_id": 67890,
  "line_item_type": "part",
  "occurred_at": "2024-01-17T09:00:00Z",
  "payload": {
    "shipment_type": "order_fulfillment",
    "direction": "to_customer",
    "estimated_ship_date": "2024-01-20T00:00:00Z",
    "previous_estimated_ship_date": "2024-01-18T00:00:00Z",
    "reason_description": "Vendor reported shipping delay",
    "updated_at": "2024-01-17T09:00:00Z"
  }
}
```

### `customer.return.requested`

Triggered when a return (RGA) is created for a customer return.

**Payload:** see the `ReturnRequested` entry in the [Payload Reference](/webhooks-customer/preview/payload-reference.md).


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.partssource.com/webhooks-customer/preview/event-catalog.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
