> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://developer-stage.shipbob.dev/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://developer-stage.shipbob.dev/_mcp/server.

# Upgrade to 2026-07

> Migration guide for upgrading from version 2026-01 to 2026-07

### 1. New Endpoints Introduced

**Products:**

* `GET /allergens` – Returns the list of supported allergens that can be associated with a product variant.

**Receiving:**

* `GET /unidentified-receiving-order` – Returns a list of unidentified receiving orders (UROs) for the merchant. Use `isCompleted` to filter to UROs not yet linked to a WRO (`false`, default) or linked (`true`). Up to 50 records per page.
* `GET /unidentified-receiving-order/{uroId}` – Returns a single unidentified receiving order owned by the merchant, including its attachments. Responds `404` if it does not exist or belongs to another merchant.
* `POST /unidentified-receiving-order/{uroId}:associateWRO` – Links an unidentified receiving order to a warehouse receiving order owned by the merchant.

### 2. Request Body Changes

`POST /receiving`

* Added request fields:
  * `freight`, `freight.carrier`, `freight.bol_number`, `freight.container_number`, `freight.vessel_name`, `freight.freight_forwarder`, `freight.notes`
  * `final_destination_fulfillment_center_id`
  * `boxes[].box_items[].sku`
* `boxes[].box_items[].inventory_id` is now optional (was required). It is now also nullable.
* Nullability cleanup: `boxes`, `boxes[].box_items`, and `boxes[].tracking_number` are no longer explicitly nullable.

`POST /product`, `POST /product/{productId}/variants`, `PATCH /product/{productId}`, `PATCH /product/{productId}/variants`

* `customs.value` on variants changed type from integer (int32) to number (double), allowing decimal customs values.

### 3. Response Body Changes

`POST /receiving`

* Response code `400` removed; `422` added for validation errors.
* (201) Added fields: `freight`, `freight.carrier`, `freight.bol_number`, `freight.container_number`, `freight.vessel_name`, `freight.freight_forwarder`, `freight.notes`
* (404) Removed field: `errors`

`GET /receiving/{id}`

* (200) Added fields: `freight`, `freight.carrier`, `freight.bol_number`, `freight.container_number`, `freight.vessel_name`, `freight.freight_forwarder`, `freight.notes`
* (404) Removed field: `errors`

`GET /receiving/{id}/distributions`

* (400, 404, 500) These error responses now use the ProblemDetails shape - added fields: `type`, `title`, `status`, `detail`, `instance`

`GET /product` (200)

* `items[].variants[].customs.value` changed type from integer (int32) to number (double).

`GET /product/{productId}` (200), `PATCH /product/{productId}` (200)

* `variants[].customs.value` changed type from integer (int32) to number (double).

`GET /product/{productId}/variants` (200), `PATCH /product/{productId}/variants` (200)

* `[].customs.value` changed type from integer (int32) to number (double).

`POST /product` (201), `POST /product/{productId}/variants` (201)

* `variants[].customs.value` changed type from integer (int32) to number (double).

***

## Support

If you have questions, please email our Developer Support Team at [support@shipbob.com](mailto:support@shipbob.com). This will create a ticket with a 1-business day first response time.