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
Latest Changes
Added the warehouse_create mutation to create an active physical warehouse with the default profile in the authenticated account. Supply invoice and shipping-label addresses and an optional warehouse name through identifier (defaults to Primary). The mutation does not copy settings from another warehouse, and rejects an identifier already used by a physical warehouse, including an inactive one. Requires change:accounts and the warehouses.manage.create permission. To add a named profile to an existing warehouse instead, use warehouse_profile_create.
Added shipper_account_id and warehouse_id to the Generate Label webhook request. API Carrier partners can identify the account shipping an order separately from the account that owns it, and use the origin warehouse when available. warehouse_id may be null when the origin warehouse is unavailable.
Added 12 wholesale tables to full and delta Data Exports. Use the WHOLESALE module filter to retrieve wholesale exports. See the Wholesale table list.
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.