fbaInbound_orchestrate_packing
Create an FBA inbound plan through to PLACEMENT OPTIONS and stop: setPrepDetails → createInboundPlan → generate and confirm the packing option → setPackingInformation → generatePla
writeAmazon Seller (SP-API)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
In an AI client (MCP)
{
"name": "fbaInbound_orchestrate_packing",
"arguments": {
"store": "myStore-US",
"plan_name": "<plan_name>",
"source_address": {},
"items": [],
"boxes": []
}
}From code (Tool API)
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 | Description |
|---|---|---|
storerequired | string | the store ref `<store>-<CC>` (name-country, e.g. 'myStore-US') — one of get_user_context's store_refs, verbatim. |
plan_namerequired | string | createInboundPlan name, ≤40 chars. |
source_addressrequired | object | {name, addressLine1, city, countryCode (ISO 3166-1 alpha-2), postalCode, phoneNumber} required; addressLine2, companyName, districtOrCounty, email, stateOrProvinceCode optional. |
itemsrequired | object[] | 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. |
boxesrequired | object[] | 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.Default: "" |
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.Default: "" |
Result
Every tool answers {notification, data, human_action}; data carries:
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.