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

> Create an FBA inbound plan through to PLACEMENT OPTIONS and stop: setPrepDetails → createInboundPlan → generate and confirm the packing option → setPackingInformation → generatePla

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

cementOptions, each operation polled. Allow ~60 s. The human then picks a placement option for fbaInbound_generate_shipment_options. The marketplace comes from the store ref. Requires SP write access. Amazon SP-API · setPrepDetails · POST /inbound/fba/2024-03-20/items/prepDetails Amazon SP-API · createInboundPlan · POST /inbound/fba/2024-03-20/inboundPlans Amazon SP-API · getInboundOperationStatus · GET /inbound/fba/2024-03-20/operations/{operationId} Amazon SP-API · generatePackingOptions · POST /inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/packingOptions Amazon SP-API · listPackingOptions · GET /inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/packingOptions Amazon SP-API · confirmPackingOption · POST /inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/packingOptions/{packingOptionId}/confirmation Amazon SP-API · setPackingInformation · POST /inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/packingInformation Amazon SP-API · generatePlacementOptions · POST /inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/placementOptions Amazon SP-API · listPlacementOptions · GET /inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/placementOptions Amazon SP-API · getShipment · GET /inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId} Amazon SP-API · listShipmentBoxes · GET /inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/boxes Gate: approve, choice — interactive: show the change and the option (Amazon's preview first where one exists), wait for an explicit approve; autopilot: only when the seller's own words asked for this change, within named rule (one option, no tie); otherwise ask.

## Call it

MCP tool call:

```json
{
  "name": "fbaInbound_orchestrate_packing",
  "arguments": {
    "store": "myStore-US",
    "plan_name": "<plan_name>",
    "source_address": {},
    "items": [],
    "boxes": []
  }
}
```

Tool API (early access — contact us):

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

## 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_name` | string | yes | createInboundPlan name, ≤40 chars. |
| `source_address` | object | yes | {name, addressLine1, city, countryCode (ISO 3166-1 alpha-2), postalCode, phoneNumber} required; addressLine2, companyName, districtOrCounty, email, stateOrProvinceCode optional. |
| `items` | object[] | yes | 1–2000 plan-level totals (not per box): [{msku (≤255), quantity (1–500000), labelOwner, prepOwner, expiration (YYYY-MM-DD, optional), manufacturingLotCode (optional, ≤256)}]. labelOwner and prepOwner: AMAZON \| SELLER \| NONE. |
| `boxes` | object[] | yes | 1–5000 box specs: [{contentInformationSource, dimensions: {length, width, height, unitOfMeasurement IN \| CM}, weight: {value, unit LB \| KG}, quantity (1–10000 boxes of this spec), items: [{msku, quantity, labelOwner, prepOwner}]}]. contentInformationSource: BOX_CONTENT_PROVIDED (items required) \| MANUAL_PROCESS \| BARCODE_2D (both without items). |
| `msku_prep_details` | object[] |  | 1–100 of [{msku, prepCategory, prepTypes}], all three required — the prep the plan's MSKUs need (values in the setPrepDetails body below). |
| `selected_packing_option_id` | string |  | second call only — the human's packingOptionId from data.packingOptions, sent with plan_id and the same items and boxes; the plan is continued, never re-created. |
| `plan_id` | string |  | the inboundPlanId (from fbaInbound_createInboundPlan or fbaInbound_listInboundPlans). Second call: the first call's data.planId with selected_packing_option_id. Alone, it continues THAT plan from generatePackingOptions — a plan_id never creates a second plan. |
| `sta_spreadsheet_id` | string |  | the plan workbook's spreadsheet id (from fbaInbound_create_sta_sheet) — the server then renders the STA-Options tab (fee summary, one block per placement with every shipment's warehouse, status, Total QTY, Boxes, Weight and Volume); omit it and nothing touches a sheet. |

## Result

- `data.planId` — the inbound plan.
- `data.packingOptionId / data.packingGroupId` — the confirmed packing.
- `data.requiresHumanSelection` — true when several packing options need a human choice — data.packingOptions lists them and nothing further was done.
- `data.placementOptions` — [{placementOptionId, status, expiration, shipmentCount, shipmentIds, placementFee, currency, aiRank, aiRec, shipments: [{shipmentId, warehouseId}]}] ranked by fee.
- `data.totalQty / data.totalBoxes` — the plan's totals.

## Params (Amazon schema; getInboundOperationStatus)

- operationId*: string (max 38 chars)

## Params (Amazon schema; generatePackingOptions)

- inboundPlanId*: string (max 38 chars)

## Params (Amazon schema; listPackingOptions)

- inboundPlanId*: string (max 38 chars) pageSize: integer (1–20) paginationToken: string (max 1024 chars)

## Params (Amazon schema; confirmPackingOption)

- inboundPlanId*: string (max 38 chars) packingOptionId*: string (max 38 chars)

## Params (Amazon schema; setPackingInformation)

- inboundPlanId*: string (max 38 chars)

## Params (Amazon schema; generatePlacementOptions)

- inboundPlanId*: string (max 38 chars)

## Params (Amazon schema; listPlacementOptions)

- inboundPlanId*: string (max 38 chars) pageSize: integer (1–20) paginationToken: string (max 1024 chars) … (8 more lines; the Docs link above)

## Body (Amazon schema; setPrepDetails)

- marketplaceId*: string (max 20 chars) mskuPrepDetails*: [{msku* (max 255 chars), prepCategory*, prepTypes*}] (1–100) mskuPrepDetails.prepCategory: ADULT | BABY | FC_PROVIDED | FRAGILE | GRANULAR | HANGER | LIQUID | PERFORATED | SET | SHARP | SMALL | TEXTILE | UNKNOWN | NONE mskuPrepDetails.prepTypes: [ITEM_BLACK_SHRINKWRAP | ITEM_BLANKSTK | ITEM_BOXING | ITEM_BUBBLEWRAP | ITEM_CAP_SEALING | ITEM_DEBUNDLE | ITEM_HANG_GARMENT | ITEM_LABELING | ITEM_NO_PREP | ITEM_POLYBAGGING | ITEM_RMOVHANG | ITEM_SETCREAT | ITEM_SETSTK | ITEM_SIOC | ITEM_SUFFOSTK | ITEM_TAPING] Full schema: the Docs link above.

## Body (Amazon schema; createInboundPlan)

- destinationMarketplaces*: [string] (exactly 1) (max 20 chars) items*: [{expiration, labelOwner*: AMAZON | SELLER | NONE, manufacturingLotCode (max 256 chars), msku* (max 255 chars), prepOwner*: AMAZON | SELLER | NONE, quantity* (1–500000)}] (1–2000) sourceAddress*: {addressLine1* (max 180 chars), addressLine2 (max 60 chars), city* (max 30 chars), companyName (max 50 chars), countryCode* (2–2 chars), districtOrCounty (max 50 chars), email (max 1024 chars), name* (max 50 chars), phoneNumber* (max 20 chars), postalCode* (max 32 chars), stateOrProvinceCode (max 64 chars)} + 1 more: name Full schema: the Docs link above.

## Body (Amazon schema; setPackingInformation): {packageGroupings: [PackageGroupingInput]} (min 1), each item

- boxes*: [{contentInformationSource*, dimensions*: {height*, length*, unitOfMeasurement*, width*}, items: [{expiration, labelOwner*, manufacturingLotCode, msku*, prepOwner*, quantity*}], quantity* (1–10000), weight*: {unit*, value*}}] (1–5000) … (8 more lines; Full schema: the Docs link above.)

## Workflow

- With a plan workbook, read the item rows (row 14 on) by the row-1 machine keys — boxNo ("1", or "2~4" for boxes 2 to 4; several rows with one boxNo share a box), msku, qtyPerBox, boxDimensions ("LxWxH"), boxWeight, labelOwner, prepOwner, prepCategory, prepTypes — never by column letter, and build items (totals) and boxes from them. Afterwards show the placement options (placementFee, shipmentCount, warehouses; aiRank 1 = lowest fee) and let the HUMAN pick; the stepper, Manage Shipments and _state cells to write are in the fba-inbound skill.

## Gotchas

- A packing option with several packing groups is refused (the compound packs one group) — run fbaInbound_setPackingInformation per packingGroupId instead.