Developer Resources
ShipHero GraphQL Public API
ShipHero’s public API provides access to platform data and operations for custom integrations. It is built on GraphQL, allowing clients to request exactly the fields they need for each workflow.
Quick Access
Need help with your integration? Visit our Troubleshooting guide for common issues and solutions.
Latest Changes
Added total_count to the orders query connection, returning the number of distinct orders that match the filters before pagination, not the size of the page. It is only computed when you select it. See the request and response example.
Updated wholesale_order_import_packing_layout for orders containing build kits that were already broken into their components. Those parent kit line items have nothing allocated, so packing_data no longer has to account for them, and referencing one now fails the import instead of failing later at mark-as-packed. Pack the component line items instead; their quantities are still validated. See the Import Packing Layout flow.
Added manage_inventory to ProductStore in the product_stores query to read a SKU’s inventory push preference on each connected store. It is true when inventory push is enabled for every listing of the SKU in that store or store group, false when it is disabled for all of them, and null when they differ. The value is independent of the store’s global inventory push setting and of eligible_for_inventory_management.
Added manage_inventory and optional manage_inventory_stores inputs to product_update to enable or disable inventory push for a SKU on its connected stores. Provide store IDs to update selected stores, or omit the list to apply the preference to all eligible stores. This changes the SKU-level preference, not the store’s global inventory push setting.
Added the product_stores query to discover a SKU’s connected stores, their IDs for manage_inventory_stores, and eligible_for_inventory_management status. 3PL accounts can use customer_account_id to query a customer’s stores. Explicitly selecting an ineligible store when disabling inventory push returns a validation error; ineligible stores are skipped when the store list is omitted. See the request and response example.
Restricted shipping_option on wholesale_order_update for wholesale orders that belong to a committed consolidation batch, including completed batches. Changing the value now rejects the update, while resending the value the order already has is accepted. Every other field on the input still updates normally. See the wholesale_order_update example.
Clarified ship_no_later_than_date on wholesale orders: when the date is set at creation it cannot be changed afterwards, and wholesale_order_update rejects it. Orders created without one accept the date on update, and it can be changed again from then on.
Deprecated dynamic_slotting on Account, Warehouse and WarehouseProfile. Dynamic Slotting is now always in effect, so the returned value no longer describes how an account or warehouse behaves. Stop branching on it: the replenishment and location fields it used to gate are available to every account.
Deprecated the recurring_data_export and lakehero_data_export queries in favor of data_exports. Both still return the previous flat file list, so existing integrations keep working, but new ones should use data_exports. See the migration guide.
Deprecated sku in the lot_update mutation input. A lot’s SKU is immutable after creation: the field is still accepted and the request still succeeds, but the value is ignored. See the lot_update example.
Updated validation for standard_manufacturer_product_id in product_create and product_update. New values must be a supported 8-, 12-, 13-, or 14-digit product identifier, or Y081 when no standardized identifier exists. Values are stored normalized, and a value that does not match is rejected as an invalid parameter instead of being stored. See the product_create and product_update examples.
