Product Listings
List Channel Inventory
Returns paginated channel inventory, aggregated to one row per listing across all of that listing's channel locations. Each row compares the quantity calculated by SKU.io (total_sku_quantity) against the quantity last reported by the sales channel (total_channel_quantity) and exposes the variance between them. Archived listings are excluded.
Export Channel Inventory
Streams a CSV file download of channel inventory records (one row per listing location, not aggregated per listing). Archived listings are excluded.
Get Channel Inventory Summary
Returns channel inventory counts grouped by integration, the list of connected channel accounts (integration instances) that have at least one active listing, and a breakdown of inventory records by sync status.
Export Listings
Streams a CSV file download of all non-archived listings across every connected sales channel. This endpoint does not accept filters — it always exports the full active listing set, ordered by most recently created first.
Download Inventory Settings Import Template
Downloads an XLSX import template for bulk-editing listing inventory settings via spreadsheet import.
List Listing Inventory Caches
Returns the per-location channel inventory records for a single listing, ordered by channel location ID. Each record compares the quantity calculated by SKU.io (sku_quantity) against the quantity last reported by the sales channel (sales_channel_quantity) and includes the variance.
Preview Bulk Listing Inventory Settings Update
Dry run for Bulk Update Listing Inventory Settings. Computes exactly which listings would change and what each field's old and new values would be, without applying anything. Use it to validate a bulk update before committing it.
Bulk Update Listing Inventory Settings
Applies inventory settings to many listings at once. Runs synchronously — the response reports the number of listings updated.
Trigger Channel Inventory Recalculation
Flags channel inventory records for quantity recalculation. This is asynchronous: the request only marks the records; the quantities are recalculated by a scheduled background process on its next cycle, not immediately within this request.
Get Product Listing
Returns a single product listing with its sales channel, integration, pricing tier, inventory cache, and document relations loaded. The integration-specific resource class is used based on the sales channel.
Update Product Listing
Updates a product listing. If master_of_price or product_pricing_tier_id change, the price is pushed to the sales channel.
List Drafts
Paginated listing drafts for the drafts list. Slim payload — the heavy `fields[]` array is only served by show/update/validate.
Create Draft
Create a listing draft.
List Mappable Product Fields
Product columns you can use as a `product_field` mapping source in listing-draft field overrides and template field defaults. The list is served from the same definition the value resolver reads, so a picker can never offer a column that won't resolve.
Get Draft
Show a draft with the full per-field payload.
Update Draft (overrides, images, structure)
Update a draft — saves `field_overrides`, `image_urls`, and structural changes (`sales_channel_category_id`, `sales_channel_product_template_id`, `sales_channel_listing_profile_id`), then re-resolves and re-validates. The draft transitions to `ready` when no validation errors remain.
Validate Draft
Re-resolve the draft's values against current product data + mappings and re-run validation. Mapped overrides (`{source_type, source_value}`) are re-evaluated against the product on every call. State transitions to `ready` when validation passes, back to `draft` when errors appear. A draft without a category records a `missing_category` validation error.
Preview Draft Against Product
Resolve this draft's mappings (its template + field overrides) against a DIFFERENT product, returning the value each channel field would receive for that product — with no persistence. Useful for a 'preview against another product' control: mapped fields (`product_field` / `product_attribute` / `expression`) re-evaluate against the given product, while typed literal values stay as-is.
Get Draft Publish Attempts
Publish-attempt history for a listing draft: one entry per publish/update attempt, oldest first. A retried publish appends a new attempt rather than overwriting the last error, so you can see each transient retry (retryable = true) and the final terminal failure (retryable = false).
Export Draft Template Fields
Download the draft category's field requirements as a styled Excel (.xlsx) workbook. The workbook has one row per channel field with its priority (required / recommended / optional), type, allowed values, plain-language guidance, what SKU.io currently maps into it, and the resolved sample value — so the still-empty fields can be collected from a supplier. Required fields lead the sheet; fixed-option fields get a dropdown of the allowed values on the sample cell.
Get Draft Variation Matrix
The variation matrix for a draft: the variation theme (e.g. 'Color-Size'), its axes, and the per-child grid (each child SKU with its axis values). Empty axes/children for a single-variation product.
Validate Draft Variation Matrix
Validate a draft's variation matrix locally (before publishing): theme completeness, duplicate combinations, per-channel variation caps, and axis consistency. Returns whether the matrix is valid plus any errors keyed to a child/axis.
List Channels for Products
List the sales channels the given products are currently listed on, with how many of the selected products are listed vs not listed on each channel, and whether the channel supports bulk archive / recover / delete.
Get Channel Action Eligibility
Return the per-state breakdown of the selected products on a single sales channel plus, for each action, how many products are eligible and whether the channel supports it.
Run Bulk Channel Action
Run a bulk channel action (archive, recover or delete) against the eligible listings of the selected products on a sales channel. The action runs in the background and the response returns a `tracked_job_log_id` you can poll for progress and a per-product success/failure summary.
Get Content Sync Settings
Get the ongoing content-sync configuration for a sales-channel integration instance: whether sync is enabled, the reconcile cadence, per field-group / per-field ownership and auto-apply defaults, and the governance gate.
Update Content Sync Settings
Update the instance-level content-sync configuration. Partial updates are merged onto the current settings, so only the keys you send change — but enabled is required on every request. Enabling sync for the first time starts a background baseline job over every mapped listing on the instance, so pre-existing differences are not flagged as drift on day one; poll the jobs API to watch it complete.
Get Channel Attribute Mappings
List the channel-native attributes this integration instance has actually synced, together with the SKU product fields they can be mapped onto, so channel content can be governed by content sync like any other field.
Update Channel Attribute Mappings
Replace the instance's channel attribute mappings. The payload is authoritative: any code not present in mappings is unmapped, so send the full set you want kept, not just the changes.
List Content Changes for Listing
Open (pending, conflict, or error) content changes detected on one listing, plus the listing's cached content-sync status. Each change carries the current catalog value and the channel value side by side so the difference can be reviewed field by field.
Get Content Change History
Full audit trail of content changes for a listing, newest first — including applied, auto-applied, ignored, superseded, rolled-back, and resolved-conflict entries. Every filter is optional; the unfiltered call returns the most recent entries (default 200, max 500).
Roll Back Content Change
Restore the catalog value that an applied change replaced. Nothing is deleted: the original entry is marked rolled_back and a new audit entry records the restore, so the history stays complete.
Apply Content Changes
Apply open channel changes to the catalog product. Scope by change_ids or by fields; omit both to apply every open change on the listing. Conflict rows are skipped unless conflict_resolution is provided (mine keeps the catalog value, theirs applies the channel value, both applies the channel value while preserving the catalog value for outbound re-push).
Ignore Content Changes
Dismiss open changes without touching the catalog. The suggestion stays dismissed until the channel value changes again — the same channel state is never re-flagged. Scope by change_ids or fields; omit both to ignore everything open on the listing.
Reconcile Listing Content
Re-compare this listing's channel content against the catalog right now and return the fresh set of open changes. Useful after editing the product on the channel when you don't want to wait for the scheduled reconcile.
Get Listing Content Rules
Get the content ownership rules in force for a single product listing, and where each one comes from.
Update Listing Content Rules
Customise the content ownership rules for a single product listing, overriding what its sales channel says.
List Content Drift
Paginated feed of detected content changes across every listing and channel — the review inbox for channel edits awaiting a decision. Defaults to open changes (pending, conflict, error); pass filter[status] to browse history.
Get Content Sync Summary
Open-change counts for badges and summary cards: totals by status (pending, conflict, error), the number of listings affected, and a breakdown by field group.
List Drift Groups
Pre-bucketed view of the same drift feed, so a templated update such as a weight change across 120 listings can be reviewed as one row instead of 120. Buckets honour every filter the feed accepts, so a bucket's counts always match what listing the same filters returns. has_risky marks buckets containing high-impact fields that must be reviewed one listing at a time.
Apply Content Change Group
Applies every open change in one bucket in the background, without listing ids. The bucket is described by the same filters used to list it, so a bucket of several thousand listings needs no enumeration by the caller. Send the filters in the QUERY STRING — filters in the request body are ignored, which would silently widen the apply. The apply must be scoped by at least one of filter[field], filter[field_group], or filter[integration_instance_ids]; an unscoped call returns 422. High-impact fields such as product name are rejected with 422 and must be applied one listing at a time. Very large buckets are applied in passes: listings_queued below listings_total means the call should be repeated to continue. Follow progress with the returned tracked_job_log_id.
Bulk Apply Content Changes
Apply pending changes across many listings as a background job. High-impact fields (for example product name) are excluded unless include_risky is true. Optionally narrow to specific fields.
Bulk Ignore Content Changes
Dismiss pending changes across many listings in one call. Runs inline (no background job) since only change statuses are updated — the catalog is untouched.
Reconcile Content Drift
Start an on-demand reconcile as a background job: re-pull channel content and re-compare against the catalog for every enabled instance, or a scoped set of instances or listings. This is the same sweep that runs on the configured schedule — it catches channels without update webhooks and any missed webhook deliveries.
List Content Conflicts
Paginated conflicts: fields owned two-way where both the catalog and the channel changed since the last known synced state. Each row carries both values so a side can be chosen. Supports the same filters, sorts, and pagination as List Content Drift.
Resolve Content Conflict
Resolve one two-way conflict.
Get Inventory for Product Listing
Returns the available inventory for a product listing across all warehouses / sales channel inventory locations.
Link to Subscription Offering
Links a product listing to a subscription offering. Used for subscription-based sales channels.
Unlink from Subscription Offering
Unlinks a product listing from a subscription offering.
Show Product Listing
Returns a single product listing with its sales channel, integration, pricing tier, inventory cache, and document relations loaded. The integration-specific resource class is used based on the sales channel.
Update Product Listing
Updates a product listing. If master_of_price or product_pricing_tier_id change, the price is pushed to the sales channel. If inventoryLocations is provided, inventory is synced to the channel.
Get Publish-Readiness Snapshot
Per-product, multi-channel publish readiness snapshot. Returns one entry per publish-capable, connected sales channel, grouped by bucket (live / ready / warn / idle / publishing / scheduled / draft) so the publish dialog can render confidence groups without orchestrating N parallel calls.
Get Publish Matrix
Catalog-wide publish matrix. Returns a paginated list of products with per-channel publish state (bucket) for each publish-capable connected channel. Returns catalog-wide publish state per product across channels.
Get Listing Health Rollup
Per-channel listing-health rollup: how many listings on each sales channel are live, archived, removed (no longer on the channel), drifted (channel quantity/price differs from SKU.io), or stale (not verified against the channel in the last 24 hours). Also returns catalog-wide totals. Counts are driven by the last reconciliation of each listing.
Reconcile Listing Status
Start a reconciliation that fetches the true state of each listing directly from its sales channel and updates the stored status, quantity and price. With no body it reconciles every channel that supports status reporting; pass sales_channel_ids to limit it to specific channels, or product_listing_ids to recheck a specific set of listings. Runs asynchronously and returns the id of the background job doing the work.
Recover Listing on Channel
Recover an archived or removed listing back to live on its sales channel — the inverse of ending a listing. Depending on the channel this re-publishes, un-hides, restores from trash or restores stock for the same listing. Only applies to listings whose remote_status is archived or missing. On success the listing's remote_status returns to live.
Push to Fix Listing Drift
Fix a drifted listing: re-push SKU.io's stock to the channel (flags the listing for the next outbound inventory sync) and recheck its channel-side state so the drift flag refreshes. Runs asynchronously; returns the background job id.
Validate Requirements
Dry-run a set of products against a template on a sales-channel instance and report, per product, required and recommended field coverage (present vs missing) plus any validation issues. Nothing is created or published.