# Rebill status updated

> Sent when a rebill's status changes.

`eventType` is `shipment.rebill.status.updated`.

Sent on every change to a rebill's status, including the four that [`accepted`](https://docs.mothership.com/reference/shipment-rebill-accepted), [`finalized`](https://docs.mothership.com/reference/shipment-rebill-finalized), [`waived`](https://docs.mothership.com/reference/shipment-rebill-waived) and [`voided`](https://docs.mothership.com/reference/shipment-rebill-voided) report on their own. Subscribe to this one or to those, not both, or you handle those changes twice.

`rebill` and `dispute` are read when Mothership sends the event, usually seconds after the change, so they can already show a later step. `previousStatus` and `newStatus` are the change itself.

## Subscribing

Add `shipment.rebill.status.updated` to a configuration's `subscribedEvents`. The token needs permission to read rebills. Without it, creating or updating a webhook configuration so that it has this event answers `403 MISSING_PERMISSION`. Such a token can still remove the event from a configuration.

## Event data

- `shipmentId` (string): The shipment's reference number, such as `MS123456`. Pass it to Get shipment details.
- `previousStatus` (string): The status before the change. One of: `scheduled`, `disputed`, `finalized`, `processed`, `waived`, `voided`, `accepted`, `failed`.
- `newStatus` (string): The status after the change. One of: `scheduled`, `disputed`, `finalized`, `processed`, `waived`, `voided`, `accepted`, `failed`.
- `statusUpdatedAt` (string): When the change happened, as an ISO 8601 string in UTC. Order events by this, not by when they arrive.
- `rebill` (object): The rebill as it is when Mothership sends the event, named as Retrieve a rebill names it. Call that with `rebill.id` for what each charge means.
  - `id` (string): The rebill's ID. Pass it to Retrieve a rebill.
  - `referenceNumber` (string): The rebill's reference number, such as `MSSR123456`.
  - `status` (string): Where the rebill is in its review. One of: `scheduled`, `disputed`, `finalized`, `processed`, `waived`, `voided`, `accepted`, `failed`.
  - `proNumber` (string, nullable): The carrier's PRO number on the bill.
  - `amountCents` (integer): The total of the line items, in cents.
  - `processingFeeCents` (integer): The carrier bill processing fee in cents, or `0`.
  - `totalAmountCents` (integer): `amountCents` plus `processingFeeCents`.
  - `currency` (string): Always `usd`.
  - `disputableUntil` (string, nullable): When the review window ends, as an ISO 8601 string. Until then you can accept or dispute each line item.
  - `invoiceId` (string, nullable): The invoice that charges the rebill once its review is over. Pass it to Retrieve an invoice.
  - `lineItems` (array of objects): The charges the carrier billed.
    - `id` (string): The line item's ID. A dispute names it in `lineItemId`.
    - `type` (string): What the charge is for. One of: `bill-of-lading-correction`, `reconsignment`, `delivery-attempt`, `driver-labor`, `expedited-delivery`, `additional-freight`, `lumper-fee`, `pickup-address-change`, `pickup-attempt`, `reactivated-shipment`, `return-shipment`, `detention`, `incorrect-weight`, `liftgate-pickup`, `liftgate-delivery`, `incorrect-dimensions`, `appointment`, `residential-pickup`, `residential-delivery`, `inside-pickup`, `inside-delivery`, `excessive-length`, `commodity-class-up`, `tradeshow`, `blind-shipment`, `government-airport-gas-mine-or-refinery-delivery`, `container-freight-station-pickup`, `container-freight-station-delivery`, `storage-fee`, `amazon-distribution-center`, `call-before-delivery`, `carrier-or-service-upgrade`, `limited-truck-access-pickup`, `limited-truck-access-delivery`, `hazmat`, `toll-fee`, `freight-coverage`, `oversize-fee`, `scheduled-delivery`, `documentation`, `cancellation-fee`, `cargo-details-updated`.
    - `name` (string): The charge's display name, such as `Detention`.
    - `amountCents` (integer): The charge in cents.

## Envelope

Mothership sends a `POST` with this JSON body. The envelope is the same on every event, and `data` holds the keys above.

- `eventType` (string): The event. Always `shipment.rebill.status.updated` here. Route on it, and answer `2xx` to types you don't handle.
- `sentAt` (string): When Mothership queued the event to send, as an ISO 8601 string in UTC. Every retry and resend carries the same value, so it does not say when this attempt went out.
- `deliveryAttempt` (integer): Which send of this event this is, starting at `1`. Resends from the dashboard count too.
- `pendingRetries` (integer): How many automatic attempts are left if this one fails. `0` on the last one.

## Example request

```json Example body
{
  "eventType": "shipment.rebill.status.updated",
  "data": {
    "shipmentId": "MS123456",
    "previousStatus": "scheduled",
    "newStatus": "disputed",
    "statusUpdatedAt": "2026-10-09T18:22:10.000Z",
    "rebill": {
      "id": "0c9a3f6e-2b7d-4e18-9a5c-7f1d2e4b8a63",
      "referenceNumber": "MSSR123456",
      "status": "disputed",
      "proNumber": "7012345678",
      "amountCents": 8500,
      "processingFeeCents": 1500,
      "totalAmountCents": 10000,
      "currency": "usd",
      "disputableUntil": "2026-10-22T15:04:05.000Z",
      "invoiceId": null,
      "lineItems": [
        {
          "id": "5b0e7c1a-9f4d-4c8e-a2b6-3d1f8e7a6c40",
          "type": "detention",
          "name": "Detention",
          "amountCents": 8500
        }
      ]
    }
  },
  "sentAt": "2026-10-08T15:04:05.000Z",
  "deliveryAttempt": 1,
  "pendingRetries": 16
}
```