# Webhook message schema (https://sellersheetai.com/help/app/settings/webhooks-schema)

> Every field of a SellerSheet Webhooks HTTPS delivery, schemaVersion 1 — the headers, the delivery, each message, its store, Amazon's notification and the typed summary of every notification delivered today.



What an [HTTPS webhook](/help/app/settings/webhooks#https-body) receives, field by field. The same is published as a JSON Schema (draft 2020-12) at [sellersheetai.com/schemas/webhooks-v1.json](https://sellersheetai.com/schemas/webhooks-v1.json), with one sample delivery per notification at [sellersheetai.com/schemas/webhooks-v1-samples.json](https://sellersheetai.com/schemas/webhooks-v1-samples.json). Every value on this page is made up.

Rules that hold everywhere:

* Keys are camelCase, except inside [`amazon`](#amazon), which keeps Amazon's own spelling.
* Every key is always sent. "Required" below is what the schema requires; a key that is not required is sent as `null` (or `[]`, `{}`) when it has no value.
* Objects are not closed: a key you do not know may appear later within `schemaVersion` 1 — ignore it.
* Times are ISO 8601 date-times in UTC (`2026-10-27T09:28:33Z`), except inside `amazon`, which keeps Amazon's text.

## Headers [#headers]

| Header                      | Example                                | What it is                                                                                                                                                                  |
| --------------------------- | -------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `Content-Type`              | `application/json`                     | Always JSON.                                                                                                                                                                |
| `X-SellerSheet-Webhook-Id`  | `0c6f2a8e-4d1b-4e7a-9b35-6e8d2f1a4c90` | The webhook — equal to `webhookId`.                                                                                                                                         |
| `X-SellerSheet-Delivery-Id` | `dlv_8f3a1c9e2b7d4e6fa0b1c2d3e4f5a6b7` | The delivery — equal to `deliveryId`, the same on every try.                                                                                                                |
| `X-SellerSheet-Timestamp`   | `1793092113`                           | Unix seconds when this try was sent.                                                                                                                                        |
| `X-SellerSheet-Signature`   | `sha256=2225d8c4…`                     | `sha256=` and the hex HMAC-SHA256, keyed with your signing secret, of the timestamp, a `.` and the raw body. [How to verify](/help/app/settings/webhooks#verify-signature). |
| `X-SellerSheet-Test`        | `false`                                | `true` on a **Send test**: the messages are samples for the made-up store `SampleStore`.                                                                                    |

## The delivery [#delivery]

The body of one request: up to 100 messages, at most 1 MB.

| Field            | Type                         | Required | What it is                                            | Example                                |
| ---------------- | ---------------------------- | -------- | ----------------------------------------------------- | -------------------------------------- |
| `deliveryId`     | string                       | yes      | This delivery. The same on every try of it.           | `dlv_8f3a1c9e2b7d4e6fa0b1c2d3e4f5a6b7` |
| `webhookId`      | string                       | yes      | The webhook it was sent to.                           | `0c6f2a8e-4d1b-4e7a-9b35-6e8d2f1a4c90` |
| `organizationId` | string                       | yes      | Your workspace.                                       | `7b2e9c41-0d3a-4f6b-8e15-9c2a4d6f8b30` |
| `sentAt`         | date-time                    | yes      | When this try was sent.                               | `2026-10-27T09:28:33Z`                 |
| `attempt`        | integer ≥ 1                  | yes      | Which try this is: 1, 2 or 3.                         | `1`                                    |
| `schemaVersion`  | integer, `1`                 | no       | This format's version — always `1`.                   | `1`                                    |
| `messages`       | array of [message](#message) | yes      | The messages, in the order SellerSheet received them. |                                        |

## A message [#message]

One Amazon notification.

| Field         | Type                    | Required | What it is                                                                                                                   | Example                                |
| ------------- | ----------------------- | -------- | ---------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| `messageId`   | string                  | yes      | Amazon's NotificationId. Drop one you already handled.                                                                       | `5c0e8f4a-2b7d-4e91-a3c6-000000000001` |
| `messageType` | string                  | yes      | Amazon's notification type; it decides the shape of [`summary`](#summary). More types may be added within `schemaVersion` 1. | `LISTINGS_ITEM_ISSUES_CHANGE`          |
| `fingerprint` | string or null          | no       | `sha256:` and 64 hex characters, the same for the same change published again by Amazon under a new `messageId`.             | `sha256:af6e358a…`                     |
| `store`       | [store](#store) or null | no       | Your store and the marketplace the message is about. A delivered message always names one of your stores.                    |                                        |
| `eventTime`   | date-time or null       | no       | When the change happened (Amazon's EventTime).                                                                               | `2026-10-27T09:14:03Z`                 |
| `publishTime` | date-time or null       | no       | When Amazon sent it.                                                                                                         | `2026-10-27T09:28:30Z`                 |
| `receivedAt`  | date-time               | yes      | When SellerSheet received it.                                                                                                | `2026-10-27T09:28:32Z`                 |
| `summary`     | [summary](#summary)     | yes      | SellerSheet's reading of the message, typed by `messageType`.                                                                |                                        |
| `amazon`      | [amazon](#amazon)       | yes      | Amazon's notification, every value as Amazon sent it.                                                                        |                                        |

## store [#store]

| Field           | Type           | Required | What it is                                                                                                                | Example                                |
| --------------- | -------------- | -------- | ------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| `storeId`       | string         | yes      | SellerSheet's ID of the store.                                                                                            | `3f6c2a9e-5b1d-4c8e-9a7f-2d4e6b8c0a11` |
| `ref`           | string         | yes      | The store ref `<store>-<CC>`: the store name and the message's marketplace.                                               | `myStore-US`                           |
| `sellerId`      | string or null | no       | Amazon's seller ID.                                                                                                       | `A1EXAMPLESELLER`                      |
| `marketplaceId` | string or null | no       | Amazon's marketplace ID — `null` when Amazon names none (account health, reports, feeds and other account-wide messages). | `ATVPDKIKX0DER`                        |
| `countryCode`   | string or null | no       | The marketplace's country code.                                                                                           | `US`                                   |
| `connected`     | boolean        | yes      | `false` when the store has not connected this marketplace in SellerSheet.                                                 | `true`                                 |

## amazon [#amazon]

Amazon's notification — the source of truth. The top-level names are fixed; every value is exactly what Amazon sent, in Amazon's own casing (PascalCase for some notifications, camelCase for others): read a key in either casing.

| Field                  | Type           | Required | What it is                                                                                 | Example                       |
| ---------------------- | -------------- | -------- | ------------------------------------------------------------------------------------------ | ----------------------------- |
| `notificationType`     | string         | yes      | Amazon's NotificationType.                                                                 | `LISTINGS_ITEM_ISSUES_CHANGE` |
| `notificationVersion`  | string or null | no       | Amazon's NotificationVersion.                                                              | `1.0`                         |
| `payloadVersion`       | string or null | no       | Amazon's PayloadVersion — the shape of `payload`.                                          | `2023-12-13`                  |
| `eventTime`            | string or null | no       | Amazon's EventTime, as Amazon wrote it.                                                    | `2026-10-27T09:14:03.000Z`    |
| `notificationMetadata` | object         | no       | Amazon's NotificationMetadata: ApplicationId, SubscriptionId, PublishTime, NotificationId. |                               |
| `payload`              | object         | no       | Amazon's Payload, unchanged.                                                               |                               |

The `payload` of each notification is documented by Amazon in the Selling Partner API's notification type reference.

## summary [#summary]

Every summary has these four fields:

| Field      | Type                                         | Required | What it is                                                                                                          | Example                                                                                                                               |
| ---------- | -------------------------------------------- | -------- | ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
| `text`     | string                                       | yes      | One readable line: the item and marketplace, plain words, then Amazon's field names and values.                     | `SKU SKU-EXAMPLE-01 (B0EXAMPLE01) on US: Listing not buyable (suppressed) · Severities=ERROR · EnforcementActions=LISTING_SUPPRESSED` |
| `severity` | `critical` · `warning` · `info` · `recovery` | yes      | How bad it is — red, orange, blue, green on a chat card. [When each applies](/help/app/settings/webhooks#severity). | `critical`                                                                                                                            |
| `sku`      | string or null                               | no       | The SKU, when Amazon sent one.                                                                                      | `SKU-EXAMPLE-01`                                                                                                                      |
| `asin`     | string or null                               | no       | The ASIN, when Amazon sent one.                                                                                     | `B0EXAMPLE01`                                                                                                                         |

Then the fields of its `messageType`, below, in the order of the Webhooks page. A type this page does not list carries the four fields only. A full sample delivery of each type, valid against the schema: [webhooks-v1-samples.json](https://sellersheetai.com/schemas/webhooks-v1-samples.json).

| `messageType`                                 | Notification                                            |
| --------------------------------------------- | ------------------------------------------------------- |
| `LISTINGS_ITEM_ISSUES_CHANGE`                 | [Listing issues](#listing-issues)                       |
| `LISTINGS_ITEM_STATUS_CHANGE`                 | [Listing status](#listing-status)                       |
| `BRANDED_ITEM_CONTENT_CHANGE`                 | [Brand content](#brand-content)                         |
| `ITEM_PRODUCT_TYPE_CHANGE`                    | [Product type change](#product-type-change)             |
| `LISTINGS_ITEM_MFN_QUANTITY_CHANGE`           | [Self-fulfilled quantity](#self-fulfilled-quantity)     |
| `PRODUCT_TYPE_DEFINITIONS_CHANGE`             | [Product type definitions](#product-type-definitions)   |
| `PRICING_HEALTH`                              | [Pricing health](#pricing-health)                       |
| `ANY_OFFER_CHANGED`                           | [Competing offers](#competing-offers)                   |
| `B2B_ANY_OFFER_CHANGED`                       | [Business offers (B2B)](#business-offers)               |
| `FEE_PROMOTION`                               | [Fee promotions](#fee-promotions)                       |
| `ORDER_CHANGE`                                | [Order changes](#order-changes)                         |
| `FULFILLMENT_ORDER_STATUS`                    | [Multi-Channel Fulfillment orders](#mcf-orders)         |
| `FBA_OUTBOUND_SHIPMENT_STATUS`                | [FBA Onsite shipments (Brazil)](#fba-onsite-shipments)  |
| `EXTERNAL_FULFILLMENT_SHIPMENT_STATUS_CHANGE` | [External fulfillment shipments](#external-shipments)   |
| `FBA_INVENTORY_AVAILABILITY_CHANGES`          | [FBA inventory](#fba-inventory)                         |
| `ITEM_INVENTORY_EVENT_CHANGE`                 | [Hourly inventory](#hourly-inventory)                   |
| `ITEM_SALES_EVENT_CHANGE`                     | [Hourly sales](#hourly-sales)                           |
| `DETAIL_PAGE_TRAFFIC_EVENT`                   | [Hourly page views](#hourly-page-views)                 |
| `TRANSACTION_UPDATE`                          | [Transactions](#transactions)                           |
| `ACCOUNT_STATUS_CHANGED`                      | [Account health](#account-health)                       |
| `REPORT_PROCESSING_FINISHED`                  | [Report finished](#report-finished)                     |
| `FEED_PROCESSING_FINISHED`                    | [Feed finished](#feed-finished)                         |
| `DATA_KIOSK_QUERY_PROCESSING_FINISHED`        | [Data Kiosk query finished](#data-kiosk-query-finished) |

### Listing issues [#listing-issues]

`LISTINGS_ITEM_ISSUES_CHANGE` — the issues now in force on a listing. Amazon never sends the issue text: open the SKU in Seller Central to read it.

| Field                | Type            | What it is                                                                                                                                                                                                                                       |
| -------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| `severities`         | array of string | Amazon's Severities: `ERROR`, `WARNING` (`NONE` is left out).                                                                                                                                                                                    |
| `enforcementActions` | array of string | Amazon's EnforcementActions: `LISTING_SUPPRESSED` (not buyable), `ATTRIBUTE_SUPPRESSED` (an attribute value rejected), `CATALOG_ITEM_REMOVED` (the catalog item is inactive, every offer non-buyable), `SEARCH_SUPPRESSED` (hidden from search). |
| `cleared`            | boolean or null | `true` when no issue remains.                                                                                                                                                                                                                    |

```json
{
  "text": "SKU SKU-EXAMPLE-01 (B0EXAMPLE01) on US: Listing not buyable (suppressed) · Severities=ERROR · EnforcementActions=LISTING_SUPPRESSED",
  "severity": "critical",
  "sku": "SKU-EXAMPLE-01",
  "asin": "B0EXAMPLE01",
  "severities": ["ERROR"],
  "enforcementActions": ["LISTING_SUPPRESSED"],
  "cleared": false
}
```

### Listing status [#listing-status]

`LISTINGS_ITEM_STATUS_CHANGE` — the listing's current status set. A status that is missing is its opposite: no `BUYABLE` means not buyable, no `DISCOVERABLE` means not in search results.

| Field          | Type            | What it is                                             |
| -------------- | --------------- | ------------------------------------------------------ |
| `status`       | array of string | Amazon's Status: `BUYABLE`, `DISCOVERABLE`, `DELETED`. |
| `buyable`      | boolean or null | `BUYABLE` is in the set.                               |
| `discoverable` | boolean or null | `DISCOVERABLE` is in the set.                          |
| `deleted`      | boolean or null | `DELETED` is in the set.                               |

```json
{
  "text": "SKU SKU-EXAMPLE-02 (B0EXAMPLE02) on US: Buyable · Status=BUYABLE,DISCOVERABLE",
  "severity": "recovery",
  "sku": "SKU-EXAMPLE-02",
  "asin": "B0EXAMPLE02",
  "status": ["BUYABLE", "DISCOVERABLE"],
  "buyable": true,
  "discoverable": true,
  "deleted": false
}
```

### Brand content [#brand-content]

`BRANDED_ITEM_CONTENT_CHANGE` — which attributes of a catalog item of your brand changed. No SKU. Amazon sends one copy per brand-owner store the webhook takes.

| Field               | Type            | What it is                                                          |
| ------------------- | --------------- | ------------------------------------------------------------------- |
| `brandName`         | string or null  | Amazon's BrandName.                                                 |
| `attributesChanged` | array of string | Amazon's AttributesChanged — attribute names as Amazon spells them. |

```json
{
  "text": "ASIN B0EXAMPLE04 on US: Changed: item_name, bullet_point · AttributesChanged=item_name,bullet_point · BrandName=MyBrand",
  "severity": "info",
  "sku": null,
  "asin": "B0EXAMPLE04",
  "brandName": "MyBrand",
  "attributesChanged": ["item_name", "bullet_point"]
}
```

### Product type change [#product-type-change]

`ITEM_PRODUCT_TYPE_CHANGE` — an ASIN's product type, before and now. What its listings must say may have changed with it. No SKU.

| Field                 | Type           | What it is                                   |
| --------------------- | -------------- | -------------------------------------------- |
| `previousProductType` | string or null | The product type before, as Amazon names it. |
| `currentProductType`  | string or null | The product type now.                        |

### Self-fulfilled quantity [#self-fulfilled-quantity]

`LISTINGS_ITEM_MFN_QUANTITY_CHANGE` — a SKU's self-fulfilled quantity now. No ASIN, and no marketplace: the quantity is the seller account's.

| Field                    | Type            | What it is                                                                                              |
| ------------------------ | --------------- | ------------------------------------------------------------------------------------------------------- |
| `quantity`               | integer or null | The quantity now; `0` is out of stock.                                                                  |
| `fulfillmentChannelCode` | string or null  | Amazon's FulfillmentChannelCode: `DEFAULT` is your own fulfillment; another code names a supply source. |

### Product type definitions [#product-type-definitions]

`PRODUCT_TYPE_DEFINITIONS_CHANGE` — a new version of a marketplace's product type definitions. No SKU or ASIN. Amazon sends one copy per store the webhook takes.

| Field                | Type            | What it is                           |
| -------------------- | --------------- | ------------------------------------ |
| `productTypeVersion` | string or null  | Amazon's ProductTypeVersion.         |
| `newProductTypes`    | array of string | The product types this version adds. |

### Pricing health [#pricing-health]

`PRICING_HEALTH` — why your offer cannot be the featured offer, against Amazon's reference prices. No SKU: Amazon sends the ASIN only.

| Field                       | Type                      | What it is                                                                                                                                     |
| --------------------------- | ------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| `issueType`                 | string or null            | Amazon's issueType, for example `BuyBoxDisqualification`.                                                                                      |
| `yourPrice`                 | [money](#money) or null   | Your landed price: listing plus shipping.                                                                                                      |
| `fulfillmentType`           | string or null            | `AFN` (FBA) or `MFN` (FBM).                                                                                                                    |
| `competitivePriceThreshold` | [money](#money) or null   | Amazon's competitive price threshold.                                                                                                          |
| `referencePrices`           | object of [money](#money) | Every reference price Amazon sent, under Amazon's name: `competitivePriceThreshold`, `averageSellingPrice`, `retailOfferPrice`, `msrpPrice`, … |

```json
{
  "text": "ASIN B0EXAMPLE03 on US: Not eligible for the featured offer · issueType=BuyBoxDisqualification · yours 29.99 USD, FBA (fulfillmentType=AFN) · competitivePriceThreshold=24.99 USD · averageSellingPrice=26.50 USD",
  "severity": "warning",
  "sku": null,
  "asin": "B0EXAMPLE03",
  "issueType": "BuyBoxDisqualification",
  "yourPrice": { "amount": 29.99, "currencyCode": "USD" },
  "fulfillmentType": "AFN",
  "competitivePriceThreshold": { "amount": 24.99, "currencyCode": "USD" },
  "referencePrices": {
    "competitivePriceThreshold": { "amount": 24.99, "currencyCode": "USD" },
    "averageSellingPrice": { "amount": 26.5, "currencyCode": "USD" }
  }
}
```

### Competing offers [#competing-offers]

`ANY_OFFER_CHANGED` — the Buy Box, your offer and up to five other sellers' offers on an ASIN another seller is on. Amazon gives seller IDs, never names, and no SKU.

| Field                 | Type                                | What it is                                                                                      |
| --------------------- | ----------------------------------- | ----------------------------------------------------------------------------------------------- |
| `changeType`          | string or null                      | Amazon's OfferChangeType, for example `External`.                                               |
| `buyBox`              | [buy box](#buy-box) or null         | The Buy Box price and who holds it.                                                             |
| `yourOffer`           | [offer](#offer) or null             | Your own offer, when it is among Amazon's offers.                                               |
| `competitors`         | array of [offer](#offer), at most 5 | The other sellers' offers, in Amazon's order.                                                   |
| `numberOfOffers`      | integer or null                     | Every offer on the ASIN, all conditions and channels.                                           |
| `sellersChanged`      | boolean or null                     | The sellers on the ASIN differ from the previous message about it. `true` on the first message. |
| `buyBoxWinnerChanged` | boolean or null                     | The Buy Box winner differs from the previous message about it. `true` on the first message.     |

```json
{
  "text": "ASIN B0EXAMPLE05 on US: 1 other seller: A2EXAMPLEOTHER 19.99 USD FBM, Buy Box, 95% of 120 · you 21.49 USD FBA, 99% of 812 · OfferChangeType=External · BuyBoxPrice=19.99 USD · NumberOfOffers=new Merchant 1,new Amazon 1",
  "severity": "warning",
  "sku": null,
  "asin": "B0EXAMPLE05",
  "changeType": "External",
  "buyBox": {
    "price": { "amount": 19.99, "currencyCode": "USD" },
    "sellerId": "A2EXAMPLEOTHER",
    "isYours": false
  },
  "yourOffer": {
    "sellerId": "A1EXAMPLESELLER",
    "price": { "amount": 21.49, "currencyCode": "USD" },
    "shipping": { "amount": 0.0, "currencyCode": "USD" },
    "fulfillment": "FBA",
    "isBuyBoxWinner": false,
    "feedbackRating": 99,
    "feedbackCount": 812
  },
  "competitors": [
    {
      "sellerId": "A2EXAMPLEOTHER",
      "price": { "amount": 19.99, "currencyCode": "USD" },
      "shipping": { "amount": 0.0, "currencyCode": "USD" },
      "fulfillment": "FBM",
      "isBuyBoxWinner": true,
      "feedbackRating": 95,
      "feedbackCount": 120
    }
  ],
  "numberOfOffers": 2,
  "sellersChanged": true,
  "buyBoxWinnerChanged": true
}
```

### Business offers (B2B) [#business-offers]

`B2B_ANY_OFFER_CHANGED` — as [Competing offers](#competing-offers), over the business (B2B) offers on the ASIN. No `changeType`, `sellersChanged` or `buyBoxWinnerChanged`.

| Field            | Type                                | What it is                                            |
| ---------------- | ----------------------------------- | ----------------------------------------------------- |
| `buyBox`         | [buy box](#buy-box) or null         | The B2B Buy Box price and who holds it.               |
| `yourOffer`      | [offer](#offer) or null             | Your own B2B offer, when it is among Amazon's offers. |
| `competitors`    | array of [offer](#offer), at most 5 | The other sellers' B2B offers, in Amazon's order.     |
| `numberOfOffers` | integer or null                     | Every B2B offer on the ASIN.                          |

### Fee promotions [#fee-promotions]

`FEE_PROMOTION` — a fee promotion Amazon offers you: what it is, when it runs, and its first discount. `sku` or `asin` is set when it names exactly one item.

| Field              | Type                    | What it is                                                           |
| ------------------ | ----------------------- | -------------------------------------------------------------------- |
| `promotionType`    | string or null          | Amazon's FeePromotionType.                                           |
| `description`      | string or null          | Amazon's description of the promotion (FeePromotionTypeDescription). |
| `effectiveFrom`    | date-time or null       | When it starts.                                                      |
| `effectiveThrough` | date-time or null       | When it ends.                                                        |
| `feeType`          | string or null          | The fee it discounts, for example `ReferralFee`.                     |
| `discountType`     | string or null          | Amazon's FeeDiscountType, for example `PERCENTAGE`.                  |
| `discountValue`    | number or null          | Amazon's FeeDiscountValue.                                           |
| `discountAmount`   | [money](#money) or null | The discount as an amount, when Amazon gives one.                    |

### Order changes [#order-changes]

`ORDER_CHANGE` — the order's status now and what changed. `sku` is set when the order holds one SKU.

| Field                  | Type            | What it is                                                                                  |
| ---------------------- | --------------- | ------------------------------------------------------------------------------------------- |
| `amazonOrderId`        | string or null  | The order.                                                                                  |
| `changeType`           | string or null  | Amazon's OrderChangeType: `BuyerRequestedChange`, `OrderStatusChange`, `DeliveryTipChange`. |
| `changeReason`         | string or null  | Amazon's ChangeReason, for example `Buyer Requested Cancel`.                                |
| `orderStatus`          | string or null  | The order's status now, for example `Unshipped`.                                            |
| `fulfillmentType`      | string or null  | `AFN` (FBA) or `MFN` (FBM).                                                                 |
| `buyerRequestedCancel` | boolean or null | An item of the order says the buyer asked to cancel.                                        |
| `sellerSkus`           | array of string | The order's SKUs.                                                                           |

### Multi-Channel Fulfillment orders [#mcf-orders]

`FULFILLMENT_ORDER_STATUS` — a Multi-Channel Fulfillment order, its packages and tracking. Amazon names no marketplace. `sku` is set when the order holds one SKU.

| Field        | Type                                     | What it is                                                                             |
| ------------ | ---------------------------------------- | -------------------------------------------------------------------------------------- |
| `orderId`    | string or null                           | The fulfillment order.                                                                 |
| `eventType`  | string or null                           | Amazon's eventType, for example `ORDER_STATUS_CHANGED`.                                |
| `status`     | string or null                           | `PROCESSING`, `COMPLETE`, `COMPLETE_PARTIAL`, `CANCELLED`, `UNFULFILLABLE`, `INVALID`. |
| `sellerSkus` | array of string                          | The order's SKUs.                                                                      |
| `packages`   | array of [package](#package), at most 20 | The packages of its shipments, with the carrier's tracking.                            |

### FBA Onsite shipments (Brazil) [#fba-onsite-shipments]

`FBA_OUTBOUND_SHIPMENT_STATUS` — a shipment Amazon created or cancelled for an order. Brazil only.

| Field              | Type           | What it is                                         |
| ------------------ | -------------- | -------------------------------------------------- |
| `amazonOrderId`    | string or null | The order.                                         |
| `amazonShipmentId` | string or null | The shipment.                                      |
| `shipmentStatus`   | string or null | Amazon's ShipmentStatus: `Created` or `Cancelled`. |

### External fulfillment shipments [#external-shipments]

`EXTERNAL_FULFILLMENT_SHIPMENT_STATUS_CHANGE` — a shipment of your own fulfillment location changed status. Amazon names no marketplace.

| Field            | Type           | What it is                                            |
| ---------------- | -------------- | ----------------------------------------------------- |
| `shipmentId`     | string or null | The shipment.                                         |
| `shipmentStatus` | string or null | Its status now, for example `CREATED` or `CANCELLED`. |
| `channelName`    | string or null | Amazon's channelName.                                 |
| `locationId`     | string or null | Your fulfillment location.                            |

### FBA inventory [#fba-inventory]

`FBA_INVENTORY_AVAILABILITY_CHANGES` — a SKU's FBA quantities, summed over every marketplace Amazon lists, and per marketplace. The message's marketplace is the first one listed.

| Field           | Type                                                     | What it is                                     |
| --------------- | -------------------------------------------------------- | ---------------------------------------------- |
| `fnsku`         | string or null                                           | Amazon's FNSKU.                                |
| `fulfillable`   | integer or null                                          | Fulfillable units; `0` is out of stock at FBA. |
| `inbound`       | integer or null                                          | Working + shipped + receiving.                 |
| `reserved`      | integer or null                                          | Every reserved quantity.                       |
| `unfulfillable` | integer or null                                          | Unfulfillable units.                           |
| `marketplaces`  | array of [marketplace inventory](#marketplace-inventory) | The same counts per marketplace.               |

### Hourly inventory [#hourly-inventory]

`ITEM_INVENTORY_EVENT_CHANGE` — one hour's highly available inventory, summed over every ASIN Amazon lists. `asin` is set when it lists one.

| Field                      | Type              | What it is                            |
| -------------------------- | ----------------- | ------------------------------------- |
| `startTime`                | date-time or null | The start of the hour.                |
| `endTime`                  | date-time or null | The end of the hour.                  |
| `asinCount`                | integer or null   | How many ASINs Amazon listed.         |
| `highlyAvailableInventory` | integer or null   | Highly available inventory, in units. |

### Hourly sales [#hourly-sales]

`ITEM_SALES_EVENT_CHANGE` — one hour's ordered units and revenue, summed over every ASIN Amazon lists. `asin` is set when it lists one.

| Field            | Type                     | What it is                               |
| ---------------- | ------------------------ | ---------------------------------------- |
| `startTime`      | date-time or null        | The start of the hour.                   |
| `endTime`        | date-time or null        | The end of the hour.                     |
| `asinCount`      | integer or null          | How many ASINs Amazon listed.            |
| `orderedUnits`   | integer or null          | Units ordered.                           |
| `orderedRevenue` | array of [money](#money) | Revenue ordered, one entry per currency. |

### Hourly page views [#hourly-page-views]

`DETAIL_PAGE_TRAFFIC_EVENT` — one hour's detail page views, summed over every ASIN Amazon lists. `asin` is set when it lists one.

| Field         | Type              | What it is                                |
| ------------- | ----------------- | ----------------------------------------- |
| `startTime`   | date-time or null | The start of the hour.                    |
| `endTime`     | date-time or null | The end of the hour.                      |
| `asinCount`   | integer or null   | How many ASINs Amazon listed.             |
| `glanceViews` | integer or null   | Detail page views (Amazon's GlanceViews). |

### Transactions [#transactions]

`TRANSACTION_UPDATE` — a transaction posted to your account.

| Field                | Type                    | What it is                                                |
| -------------------- | ----------------------- | --------------------------------------------------------- |
| `transactionType`    | string or null          | Amazon's TransactionType, for example `Shipment`.         |
| `postedDate`         | date-time or null       | When it was posted.                                       |
| `totalAmount`        | [money](#money) or null | Its total.                                                |
| `accountType`        | string or null          | Amazon's AccountType, for example `PAYABLE`.              |
| `relatedIdentifiers` | object of string        | Amazon's RelatedIdentifiers, name → value (`OrderId`, …). |

### Account health [#account-health]

`ACCOUNT_STATUS_CHANGED` — the seller account's status. No item; the message's `store` is your store in its first marketplace.

| Field            | Type           | What it is                            |
| ---------------- | -------------- | ------------------------------------- |
| `previousStatus` | string or null | `NORMAL`, `AT_RISK` or `DEACTIVATED`. |
| `currentStatus`  | string or null | `NORMAL`, `AT_RISK` or `DEACTIVATED`. |

```json
{
  "text": "Account at risk · PreviousAccountStatus=NORMAL · CurrentAccountStatus=AT_RISK",
  "severity": "warning",
  "sku": null,
  "asin": null,
  "previousStatus": "NORMAL",
  "currentStatus": "AT_RISK"
}
```

### Report finished [#report-finished]

`REPORT_PROCESSING_FINISHED` — a report request finished. It includes the reports SellerSheet requests to keep your store's data in sync. Amazon names no marketplace.

| Field              | Type           | What it is                                                                         |
| ------------------ | -------------- | ---------------------------------------------------------------------------------- |
| `reportId`         | string or null | The report.                                                                        |
| `reportType`       | string or null | Amazon's reportType.                                                               |
| `processingStatus` | string or null | `DONE`, `CANCELLED` (Amazon had no data, or the request was cancelled) or `FATAL`. |
| `reportDocumentId` | string or null | The document to download, on `DONE`.                                               |

### Feed finished [#feed-finished]

`FEED_PROCESSING_FINISHED` — a feed finished. Amazon names no marketplace.

| Field                  | Type           | What it is                                           |
| ---------------------- | -------------- | ---------------------------------------------------- |
| `feedId`               | string or null | The feed.                                            |
| `feedType`             | string or null | Amazon's feedType, for example `JSON_LISTINGS_FEED`. |
| `processingStatus`     | string or null | `DONE`, `CANCELLED` or `FATAL`.                      |
| `resultFeedDocumentId` | string or null | The processing report's document, on `DONE`.         |

### Data Kiosk query finished [#data-kiosk-query-finished]

`DATA_KIOSK_QUERY_PROCESSING_FINISHED` — a Data Kiosk query finished. Amazon names no marketplace.

| Field              | Type           | What it is                                                |
| ------------------ | -------------- | --------------------------------------------------------- |
| `queryId`          | string or null | The query.                                                |
| `processingStatus` | string or null | `DONE`, `CANCELLED` or `FATAL`.                           |
| `dataDocumentId`   | string or null | The data document; `null` when the query matched no data. |
| `errorDocumentId`  | string or null | The error document, on `FATAL`.                           |
| `nextToken`        | string or null | Set when the result has more pages.                       |

## Objects [#objects]

### money [#money]

| Field          | Type           | Required | What it is                       |
| -------------- | -------------- | -------- | -------------------------------- |
| `amount`       | number         | yes      | The amount.                      |
| `currencyCode` | string or null | no       | The currency, for example `USD`. |

### offer [#offer]

| Field            | Type                    | Required             | What it is                    |
| ---------------- | ----------------------- | -------------------- | ----------------------------- |
| `sellerId`       | string                  | yes                  | Amazon's seller ID.           |
| `price`          | [money](#money) or null | no                   | The listing price.            |
| `shipping`       | [money](#money) or null | no                   | The shipping price.           |
| `fulfillment`    | `FBA` · `FBM` or null   | no                   | Who ships it.                 |
| `isBuyBoxWinner` | boolean                 | no (default `false`) | This offer holds the Buy Box. |
| `feedbackRating` | integer or null         | no                   | Positive feedback, percent.   |
| `feedbackCount`  | integer or null         | no                   | Number of ratings.            |

### buy box [#buy-box]

| Field      | Type                    | Required | What it is                                                        |
| ---------- | ----------------------- | -------- | ----------------------------------------------------------------- |
| `price`    | [money](#money) or null | no       | The Buy Box landed price.                                         |
| `sellerId` | string or null          | no       | The seller holding it, when one of the offers Amazon listed does. |
| `isYours`  | boolean or null         | no       | You hold the Buy Box.                                             |

### package [#package]

| Field            | Type           | Required | What it is                           |
| ---------------- | -------------- | -------- | ------------------------------------ |
| `packageId`      | string or null | no       | The package.                         |
| `status`         | string or null | no       | Its status, for example `DELIVERED`. |
| `carrierCode`    | string or null | no       | The carrier, for example `FEDEX`.    |
| `trackingNumber` | string or null | no       | The carrier's tracking number.       |

### marketplace inventory [#marketplace-inventory]

| Field           | Type           | Required         | What it is                      |
| --------------- | -------------- | ---------------- | ------------------------------- |
| `marketplaceId` | string or null | no               | Amazon's marketplace ID.        |
| `countryCode`   | string or null | no               | The marketplace's country code. |
| `fulfillable`   | integer        | no (default `0`) | Fulfillable units.              |
| `inbound`       | integer        | no (default `0`) | Working + shipped + receiving.  |
| `reserved`      | integer        | no (default `0`) | Every reserved quantity.        |
| `unfulfillable` | integer        | no (default `0`) | Unfulfillable units.            |

## Validating [#validating]

Any JSON Schema draft 2020-12 validator can check a body against [webhooks-v1.json](https://sellersheetai.com/schemas/webhooks-v1.json). The schema types `summary` by `messageType` (one "if `messageType` is this type, then `summary` is this shape" rule per notification), so a validator checks each message's summary against its own type.
