ShipHero
Create Integration Instance
Create a new ShipHero integration instance.
Show Integration Instance
Retrieve a ShipHero integration instance by ID.
Update Integration Instance
Update a ShipHero integration instance.
Delete Integration Instance
Delete a ShipHero integration instance.
Show Dashboard Metrics
Aggregated dashboard metrics for the ShipHero integration instance: order counts grouped by fulfillment status, total orders, mapped warehouse count, last sync timestamps, sync cadence, and webhook health.
List Warehouses
List all ShipHero warehouses alongside local SKU.io warehouses.
Download Warehouses from ShipHero
Fetch and cache warehouses from the ShipHero API.
Map Warehouses
Map ShipHero warehouses to SKU.io local warehouses.
Refresh Inventory
Trigger a full inventory sync from ShipHero API.
Get Inventory Discrepancies
Get inventory discrepancies between SKU.io and ShipHero.
Get Items Without SKU Products
List ShipHero inventory items that do not have a matching SKU.io product.
Get SKU Products Without ShipHero Inventory
List SKU.io products that do not have corresponding inventory records in ShipHero.
Get Last Synced At
Get the timestamp of the most recent successful inventory sync from ShipHero.
Create Stock Take From Discrepancies
Create a SKU.io stock take from the selected ShipHero inventory discrepancies. The stock take counts each product at its ShipHero on-hand quantity.
Get Product Inventory Movements
Get recent inventory movements for a specific product in ShipHero-mapped warehouses.
List Orders
List ShipHero orders for the integration instance, newest first. Canonical list view endpoint (Spatie QueryBuilder); returns a paginated list of lightweight order rows.
Show Order
Get a single ShipHero order by its ShipHero id (the `shiphero_id`, not the local row id).
Get Order Detail
Get the full decoded ShipHero JSON object for an order (by local row id via route-model binding). `has_detailed_data` is false when no raw payload has been cached yet.
Sync Orders
Queue a tracked background job that re-syncs every open order for the integration instance and applies any new tracking. Returns the tracked job log id so the frontend can poll progress.
Get Order Sync Progress
Fetch the progress of a queued order sync job by its tracked job log id.
Import Orders
Queue a tracked background job that **imports** orders from ShipHero within a date window — treating ShipHero as an order *source*, not just a fulfillment target. Each imported order is FK-linked to its matching SKU entity by `order_number` (writing the real `sku_fulfillment_order_id` / `sku_fulfillment_id`); true orphans are imported unlinked.
Get Order Import Info
Import UI metadata for the shared Refresh Orders modal:
Search Orders by Number
Search ShipHero live for an order by its order number and return whether it already exists locally. Use this to pull a specific order the incremental import misses — e.g. a manual or backdated order created earlier than the last synced order (which 'fetch new since latest' can never reach). Requires a Bearer token.
Import Single Order
Import (or update) a single ShipHero order by its ShipHero id — the `id` returned by Search Orders by Number. Fetches the order live and persists it locally, linking it to a matching sales-order fulfillment when the order number lines up. Requires a Bearer token.
Sync Single Order Detail
Re-fetch a single order from ShipHero and apply any new tracking. Orders linked to a SalesOrderFulfillment refresh their tracking; FO-first orders (the deferred-shipment path — linked only to a FulfillmentOrder, not yet to a fulfillment) get their thin order_create stub enriched with the full order GET. Returns 422 OrderNotLinked only when the order is linked to neither a fulfillment nor a fulfillment order.
Update Order From Fulfillment (Power User)
Re-push a sales order fulfillment to ShipHero. Requires Power User role.
Get Order Activity Log
Paginated Spatie activity-log entries for a single ShipHero order (by local row id) — the order detail page's Activity Log section. Each entry: id, description, event (created/updated/deleted), subject_type, subject_id, properties (changed attributes), causer_name, created_at. Ordered newest first.
List Shipments
Server-side paginated + filterable ShipHero shipments. Filters: carrier (exact), shipping_method (exact), has_order_link (true/false), search (tracking_number / order_number / shiphero_shipment_id / carrier). Sortable: id, order_number, tracking_number, carrier, shipping_method, cost, created_date, created_at, updated_at (default -created_date).
Get Shipment
Single ShipHero shipment by local row id. Append include_json=1 for the raw payload.
Sync Shipments
Queue a tracked job that syncs shipments from ShipHero's GraphQL `shipments` query (cursor-paginated). Job name: `Sync Shiphero Shipments: {instance}`.
Get Shipments Sync Info
Latest synced shipment + total count, for the sync UI.
List Products
Paginated list of ShipHero products — one row per SKU with on-hand/available/allocated/backorder summed across warehouses, plus the number of stocking warehouses and the mapped local product, plus the ShipHero product id (shiphero_product_legacy_id). Filters: kit (true/false), mapped (mapped/unmapped), search. Sortable: sku, name, on_hand, available, allocated, backorder, warehouse_count, value, last_synced_at. Requires a Bearer token.
Get Product
Full detail for one ShipHero product: per-warehouse inventory breakdown, summed totals, richer product fields (barcode, dimensions, value, country, tariff, tags, images, kit) and the mapped local SKU product. The sku path segment is URL-encoded. Requires a Bearer token.
Set Product SKU Mapping
Sets or clears the SKU.io product mapping for a ShipHero product. Pass `sku_product_id` to map this ShipHero SKU to a SKU.io product, or `null` to unmap. Use this when a fulfillment provider holds stock under a SKU that differs from your own (a SKU they will not rename): once mapped, the ShipHero SKU resolves to the mapped product across the products list, inventory reconciliation, and fulfillment submission. Requires a Bearer token.
List Inventory Changes
Server-side paginated, filterable audit trail of ShipHero inventory movements. Each row is one inventory change with the signed delta, human-readable reason, category, and who/where/when. Filters: category (comma-separated), warehouse_id, shiphero_warehouse_id, cycle_counted (true/false), search. Also searchable/sortable by id and shiphero_change_id. Sortable: id, changed_at, sku, change_in_on_hand, new_on_hand, previous_on_hand, category, created_at. Requires a Bearer token.
Get Inventory Audit KPI Stats
Summary KPIs for the inventory audit trail — total changes, net change, increases, decreases, adjustments, cycle counts, and a per-category breakdown. Honors the same filters as the list endpoint (pass the same filter[...] query params). Requires a Bearer token.
Get Inventory Audit Sync Info
Metadata for the inventory audit sync UI — the most recent recorded movement time and the total number of changes stored. Requires a Bearer token.
Export Inventory Audit
Download the inventory audit trail as an Excel (.xlsx) or CSV file. The export honors the active filters (scope=filtered) or can export all, the current page, or a selected set of ids. Returns a binary file download, not JSON. Requires a Bearer token.
Sync Inventory Audit
Queue a background job that pulls ShipHero inventory changes into the audit ledger. mode: since_latest (incremental from the latest recorded change, pass date_from), date_range (pass date_from + date_to), or all (full history). Returns the tracked job id. Returns 409 if a sync is already running for this integration. Requires a Bearer token.
Get Inventory Change
Get a single inventory change by its local id, with the resolved product and warehouse. Requires a Bearer token.