# fbaInbound_generateShipmentContentUpdatePreviews (https://sellersheetai.com/docs/mcp-api/tools/fbaInbound_generateShipmentContentUpdatePreviews)

> Generate content update previews for revised box content (write, async).

Access: **WRITE** · toolset amazon_sp · family sp.fulfillmentInbound_2024-03-20

Amazon SP-API · generateShipmentContentUpdatePreviews · POST /inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/contentUpdatePreviews Gate: approve — interactive: show the change (Amazon's preview first where one exists), wait for an explicit approve; autopilot: only when the seller's own words asked for this change; otherwise ask. Use to change box contents after a shipment is created — Amazon returns previews with the resulting transportation cost change. Both lists describe the shipment AFTER the update, in full — they are not deltas, and Amazon requires both. Timing window (live rules): allowed after fbaInbound_confirmTransportationOptions and BEFORE tracking details are set — once updateShipmentTrackingDetails has run (or the void window ends), Amazon refuses with FBA_INB_0262 "Cannot add boxes because the void window has ended or the shipment is in a status that does not allow edits", even while status is WORKING. Quantity changes are capped at 5% or 6 units per SKU, whichever is greater; a SKU can be removed only if its original quantity is ≤6; the shipment cannot be emptied.

## Call it

MCP tool call:

```json
{
  "name": "fbaInbound_generateShipmentContentUpdatePreviews",
  "arguments": {
    "store": "myStore-US",
    "plan_id": "<plan_id>",
    "shipment_id": "<shipment_id>",
    "boxes": [],
    "items": []
  }
}
```

Tool API (early access — contact us):

```bash
curl -X POST https://api.sellersheetai.com/api/v1/tools/fbaInbound_generateShipmentContentUpdatePreviews \
  -H "Authorization: Bearer $SELLERSHEET_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"store":"myStore-US","plan_id":"<plan_id>","shipment_id":"<shipment_id>","boxes":[],"items":[]}'
```

## Arguments

| Name | Type | Required | Description |
|---|---|---|---|
| `store` | string | yes | the store ref `<store>-<CC>` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
| `plan_id` | string | yes | the inboundPlanId (from fbaInbound_createInboundPlan or fbaInbound_listInboundPlans). |
| `shipment_id` | string | yes | the shipmentId (from the placement option's shipmentIds in fbaInbound_listPlacementOptions, or fbaInbound_getInboundPlan once a placement is confirmed). |
| `boxes` | object[] | yes | every box the shipment will contain after the update (1–5000), shaped as the Body block below; quantity = how many identical boxes. BOX_CONTENT_PROVIDED boxes carry their items; MANUAL_PROCESS and BARCODE_2D boxes carry none. packageId: REQUIRED to keep an existing box (from fbaInbound_listShipmentBoxes); a new box has none, and every existing box whose packageId you omit is removed. |
| `items` | object[] | yes | every item the shipment will contain after the update (1–2000), shaped as the Body block below. |

## Result

- `data.operationId` — poll until SUCCESS, then fbaInbound_listShipmentContentUpdatePreviews.

## Body (Amazon schema)

- boxes*: [{contentInformationSource*, dimensions*: {height*, length*, unitOfMeasurement*, width*}, items: [{expiration, labelOwner*, manufacturingLotCode, msku*, prepOwner*, quantity*}], packageId (38–38 chars), quantity* (1–10000), weight*: {unit*, value*}}] (1–5000) boxes.contentInformationSource: BOX_CONTENT_PROVIDED | MANUAL_PROCESS | BARCODE_2D boxes.dimensions.unitOfMeasurement: IN | CM boxes.items.labelOwner: AMAZON | SELLER | NONE boxes.items.prepOwner: AMAZON | SELLER | NONE boxes.weight.unit: LB | KG items*: [{expiration, labelOwner*: AMAZON | SELLER | NONE, manufacturingLotCode (max 256 chars), msku* (max 255 chars), prepOwner*: AMAZON | SELLER | NONE, quantity* (1–500000)}] (1–2000)