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

> Upload carrier tracking for one shipment to Amazon.

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

Amazon SP-API · updateShipmentTrackingDetails · PUT /inbound/fba/2024-03-20/inboundPlans/{inboundPlanId}/shipments/{shipmentId}/trackingDetails Amazon SP-API · getInboundOperationStatus · GET /inbound/fba/2024-03-20/operations/{operationId} 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. Async — the server polls the returned operationId to completion. This is the non-Amazon-partnered (USE_YOUR_OWN_CARRIER) flow. TrackingDetailsInput is a union of exactly two shapes — supply ONE. Small Parcel tracking is per BOX, so ONE call carries every box of the shipment; there is no carrier field on this operation at all.

## Call it

MCP tool call:

```json
{
  "name": "fbaInbound_updateShipmentTrackingDetails",
  "arguments": {
    "store": "myStore-US",
    "plan_id": "<plan_id>",
    "shipment_id": "<shipment_id>"
  }
}
```

Tool API (early access — contact us):

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

## 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). |
| `spd_tracking_items` | object[] |  | Small Parcel (SPD) tracking, one entry per box: [{boxId, trackingId}]. boxId is the FBAxxxxxxxx ID from fbaInbound_listShipmentBoxes / fbaInbound_create_packing_list (maxLength 1024); trackingId is the carrier's number (maxLength 64). Pass exactly one of spd_tracking_items / ltl_tracking_detail — both or neither is refused. boxIds exist only after the shipment's transportation is confirmed. |
| `ltl_tracking_detail` | object |  | LTL/FTL freight tracking, shipment-level: {freightBillNumber: [str] (required, exactly 1), billOfLadingNumber: str (optional, ≤1024)}. |

## Result

- `data.uploaded` — True once the operation reached SUCCESS.
- `data.operation` — the final getInboundOperationStatus payload.

## Workflow

- 1. fbaInbound_listShipmentBoxes — the boxId (FBAxxxxxxxx) of every box. 2. Call this tool once per shipment with all its boxes.

## Body (Amazon schema; updateShipmentTrackingDetails)

- trackingDetails*: {ltlTrackingDetail: {billOfLadingNumber, freightBillNumber*}, spdTrackingDetail: {spdTrackingItems*}}