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

# Webhook Topics

> The ERP event topics a Cloud App can subscribe to in its manifest.

## Topic Format

Each topic identifies a specific event for a specific entity using a reverse-DNS format:

```
com.jtl.erp.workflow.v1.item.changed
└─────────────────────┘ └──┘ └─────┘
     namespace          entity  event
```

For example:

`com.jtl.erp.workflow.v1.item.changed`

represents a `changed` event for the `item` entity.

The topic you declare in `capabilities.erp.webhooks.subscriptions[].topics` is delivered as-is in the event payload. The topic matches the event's `type` and `subject` fields, so you can use these fields to identify and route events without maintaining a separate lookup table.

Topics are matched exactly. If your app needs to receive multiple events, declare each topic separately.

## Payload

All ERP topics use the same event envelope and `data` structure.

The `data` object contains:

* `objectKey`: the key of the entity that triggered the event
* a timestamp for when the event occurred
* information about the user who triggered the event

The payload does not contain the entity's fields or current state. Use `objectKey` to retrieve the entity through the GraphQL API when you need its details.

See [Handling Webhooks](/cloud/guides/cloud-apps/handling-webhooks) for the full envelope and a worked example.

## Items

Topics that fire on changes to items in the item catalog.

| Topic                                  | Fires when           |
| -------------------------------------- | -------------------- |
| `com.jtl.erp.workflow.v1.item.created` | An item is created.  |
| `com.jtl.erp.workflow.v1.item.changed` | An item is modified. |
| `com.jtl.erp.workflow.v1.item.deleted` | An item is deleted.  |

## Customers

Topics that fire on changes to customer records.

| Topic                                      | Fires when              |
| ------------------------------------------ | ----------------------- |
| `com.jtl.erp.workflow.v1.customer.created` | A customer is created.  |
| `com.jtl.erp.workflow.v1.customer.changed` | A customer is modified. |

## Orders

Topics that cover the sales order lifecycle, including payment and fulfilment milestones.

| Topic                                                      | Fires when                                                            |
| ---------------------------------------------------------- | --------------------------------------------------------------------- |
| `com.jtl.erp.workflow.v1.order.created`                    | An order is created.                                                  |
| `com.jtl.erp.workflow.v1.order.changed`                    | An order is modified.                                                 |
| `com.jtl.erp.workflow.v1.order.deleted`                    | An order is deleted.                                                  |
| `com.jtl.erp.workflow.v1.order.cancelled`                  | An order is cancelled.                                                |
| `com.jtl.erp.workflow.v1.order.delivered`                  | An order is marked as delivered.                                      |
| `com.jtl.erp.workflow.v1.order.merged`                     | An order is merged into another order.                                |
| `com.jtl.erp.workflow.v1.order.split.source`               | An order is split. Carries the key of the original order.             |
| `com.jtl.erp.workflow.v1.order.split.new`                  | An order is split. Carries the key of the order created by the split. |
| `com.jtl.erp.workflow.v1.order.completed.without-shipment` | An order is completed without a shipment.                             |
| `com.jtl.erp.workflow.v1.order.payment.changed`            | The payment status of an order changes.                               |
| `com.jtl.erp.workflow.v1.order.payment.fully-paid`         | An order is fully paid.                                               |

## Invoices

Topics that cover outgoing invoices and their payment status.

| Topic                                                | Fires when                |
| ---------------------------------------------------- | ------------------------- |
| `com.jtl.erp.workflow.v1.invoice.created`            | An invoice is created.    |
| `com.jtl.erp.workflow.v1.invoice.changed`            | An invoice is modified.   |
| `com.jtl.erp.workflow.v1.invoice.deleted`            | An invoice is deleted.    |
| `com.jtl.erp.workflow.v1.invoice.cancelled`          | An invoice is cancelled.  |
| `com.jtl.erp.workflow.v1.invoice.payment.fully-paid` | An invoice is fully paid. |

## Credit Notes

Topics that fire on changes to credit notes.

| Topic                                           | Fires when                  |
| ----------------------------------------------- | --------------------------- |
| `com.jtl.erp.workflow.v1.credit-note.created`   | A credit note is created.   |
| `com.jtl.erp.workflow.v1.credit-note.changed`   | A credit note is modified.  |
| `com.jtl.erp.workflow.v1.credit-note.deleted`   | A credit note is deleted.   |
| `com.jtl.erp.workflow.v1.credit-note.cancelled` | A credit note is cancelled. |

## Delivery Notes

Topics that cover delivery note creation and dispatch.

| Topic                                           | Fires when                  |
| ----------------------------------------------- | --------------------------- |
| `com.jtl.erp.workflow.v1.delivery-note.created` | A delivery note is created. |
| `com.jtl.erp.workflow.v1.delivery-note.deleted` | A delivery note is deleted. |
| `com.jtl.erp.workflow.v1.delivery-note.shipped` | A delivery note is shipped. |

## Returns

Topics that cover returns and the status transitions of individual return positions.

| Topic                                    | Fires when            |
| ---------------------------------------- | --------------------- |
| `com.jtl.erp.workflow.v1.return.created` | A return is created.  |
| `com.jtl.erp.workflow.v1.return.changed` | A return is modified. |
| `com.jtl.erp.workflow.v1.return.deleted` | A return is deleted.  |

## Payments

Topics that cover payment records and bank reconciliation.

| Topic                                                     | Fires when                                             |
| --------------------------------------------------------- | ------------------------------------------------------ |
| `com.jtl.erp.workflow.v1.payment.created`                 | A payment is created.                                  |
| `com.jtl.erp.workflow.v1.payment.changed`                 | A payment is modified.                                 |
| `com.jtl.erp.workflow.v1.payment.deleted`                 | A payment is deleted.                                  |
| `com.jtl.erp.workflow.v1.payment-reconciliation.imported` | A transaction is imported into payment reconciliation. |
| `com.jtl.erp.workflow.v1.payment-reconciliation.created`  | A payment reconciliation record is created.            |
| `com.jtl.erp.workflow.v1.payment-reconciliation.assigned` | A payment reconciliation record is assigned.           |

## Picking

Topics that cover pick lists and pick confirmations.

| Topic                                        | Fires when                |
| -------------------------------------------- | ------------------------- |
| `com.jtl.erp.workflow.v1.picklist.created`   | A pick list is created.   |
| `com.jtl.erp.workflow.v1.picklist.changed`   | A pick list is modified.  |
| `com.jtl.erp.workflow.v1.picklist.picked`    | A pick list is picked.    |
| `com.jtl.erp.workflow.v1.picklist.completed` | A pick list is completed. |

## Warehouse Movements

Topics that fire on stock bookings into and out of the warehouse.

| Topic                                                          | Fires when                                      |
| -------------------------------------------------------------- | ----------------------------------------------- |
| `com.jtl.erp.workflow.v1.warehouse-incoming.stock.booked.in`   | Stock is booked into the warehouse.             |
| `com.jtl.erp.workflow.v1.warehouse-outgoing.stock.booked.out`  | Stock is booked out of the warehouse.           |
| `com.jtl.erp.workflow.v1.warehouse-outgoing.shortage.reported` | A shortage is reported on an outgoing movement. |

## Stock Transfers

Topics that cover transfers of stock between warehouses.

| Topic                                              | Fires when                     |
| -------------------------------------------------- | ------------------------------ |
| `com.jtl.erp.workflow.v1.stock-transfer.created`   | A stock transfer is created.   |
| `com.jtl.erp.workflow.v1.stock-transfer.changed`   | A stock transfer is modified.  |
| `com.jtl.erp.workflow.v1.stock-transfer.deleted`   | A stock transfer is deleted.   |
| `com.jtl.erp.workflow.v1.stock-transfer.cancelled` | A stock transfer is cancelled. |
| `com.jtl.erp.workflow.v1.stock-transfer.delivered` | A stock transfer is delivered. |
| `com.jtl.erp.workflow.v1.stock-transfer.completed` | A stock transfer is completed. |

## Shipments

Topics that cover packages, tracking, and carrier export.

| Topic                                               | Fires when                                  |
| --------------------------------------------------- | ------------------------------------------- |
| `com.jtl.erp.workflow.v1.shipment.package.created`  | A package is created for a shipment.        |
| `com.jtl.erp.workflow.v1.shipment.tracking.changed` | Tracking information on a shipment changes. |
| `com.jtl.erp.workflow.v1.shipment.export.failed`    | Export of a shipment to the carrier fails.  |

## Fulfillment Network

Topics that cover fulfillment orders and the fulfiller's processing status.

| Topic                                                       | Fires when                                 |
| ----------------------------------------------------------- | ------------------------------------------ |
| `com.jtl.erp.workflow.v1.ffn.created`                       | A fulfillment order is created.            |
| `com.jtl.erp.workflow.v1.ffn.deleted`                       | A fulfillment order is deleted.            |
| `com.jtl.erp.workflow.v1.ffn.failed`                        | A fulfillment order fails.                 |
| `com.jtl.erp.workflow.v1.ffn.fulfiller.confirmed`           | The fulfiller confirms the order.          |
| `com.jtl.erp.workflow.v1.ffn.fulfiller.processing.started`  | The fulfiller starts processing the order. |
| `com.jtl.erp.workflow.v1.ffn.fulfiller.completed`           | The fulfiller completes the order.         |
| `com.jtl.erp.workflow.v1.ffn.fulfiller.cancelled`           | The fulfiller cancels the order.           |
| `com.jtl.erp.workflow.v1.ffn.fulfiller.partially-cancelled` | The fulfiller cancels part of the order.   |

***

## What's Next?

<CardGroup cols={2}>
  <Card title="Handling Webhooks" icon="webhook" href="/cloud/guides/cloud-apps/handling-webhooks">
    Declare subscriptions, receive deliveries, and fetch the changed entity.
  </Card>

  <Card title="Webhooks & Events" icon="bell" href="/cloud/guides/essentials/common-patterns/webhooks">
    How ERP webhooks compare to AppBridge events and SCX polling.
  </Card>

  <Card title="Best Practices" icon="star" href="/cloud/guides/cloud-apps/best-practices">
    Production patterns for error handling, security, and performance.
  </Card>
</CardGroup>
