> ## Documentation Index
> Fetch the complete documentation index at: https://docs.omnicommerce.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Changelog

> Product and API updates for OmniCommerce.

Product updates for the OmniCommerce developer platform. API contract changes are also reflected in the [OpenAPI spec](https://docs.omnicommerce.ai/openapi.json).

## 2026

### October — Reply to one review, with optional AI drafting

* **Breaking:** Use `POST /api/v1/reviews/{reviewId}/reply` to target exactly one review in the URL. Supply `reply`, or set `generateWithAi: true`. This replaces the public `draft-reply` endpoint and the short-lived batch `/api/v1/reviews/reply` endpoint. `submit: false` returns AI drafts; `submit: true` sends replies to the marketplace. Optional `instructions` guide AI writing. `data.submitted` reports confirmed submission for that review
* SDKs expose `reviews.reply`; the separate `draftReply` / `draft_reply` methods and CLI `reviews draft-reply` command are removed. The CLI uses `omni reviews reply`. Guide: [Reviews](https://docs.omnicommerce.ai/guides/reviews.md)
* Available in TypeScript SDK `0.12.0`, Python SDK `0.9.0`, and CLI `0.9.0`

### October — Review actions stay in the workspace

* **Breaking:** Removed `POST /api/v1/reviews/actions`, the SDK method `reviews.actions`, and the CLI command `omni reviews actions`. Read reviews and draft replies through the API; review and send replies from the workspace Reviews page
* Released TypeScript SDK `0.10.0`, Python SDK `0.7.0`, and CLI `0.7.0` with the updated review API

### October — File uploads

* Added `POST /api/v1/documents` to upload a file to the knowledge base as multipart/form-data, and `GET /api/v1/documents/{documentId}` to read it and its indexing status. New OAuth scope: `documents:write`. Guide: [Knowledge base uploads](https://docs.omnicommerce.ai/guides/knowledge-base.md)
* Added `POST /api/v1/products/{productId}/images` to upload an image file into a product's or variant's gallery. Guide: [Product image uploads](https://docs.omnicommerce.ai/guides/product-images.md)
* SDK multipart methods (`documents.upload`, `products.uploadImage`) accept a `File` or `Blob`; the CLI takes `--file <path>`

### October — Retry promotion delivery

* **Breaking:** `POST /api/v1/promotions/{promotionId}/sync` is now `POST /api/v1/promotions/{promotionId}/retry`, with the same body and response. The SDK method `promotions.sync` is now `promotions.retry`
* Promotions are delivered automatically when created or activated, edited while live, or given products, and removed when paused, ended, or archived. Use retry only after a failed delivery. Guide: [Promotions](https://docs.omnicommerce.ai/guides/promotions.md#marketplace-delivery)

### October — One analytics route per dashboard

* Added `GET /api/v1/analytics/overview`, `traffic`, `products`, `pricing`, `ads`, `orders`, `content`, `profit`, `ai-traffic`, `stores`, and `reports`, one for each workspace analytics dashboard. All use `analytics:read`; `profit` also needs finance access for session members. Guide: [Analytics](https://docs.omnicommerce.ai/guides/analytics.md)
* **Breaking:** `GET /api/v1/analytics/sales` is now `GET /api/v1/analytics/orders` with the same response. The SDK method `analytics.getSales` is now `analytics.getOrders`

### October — Removed the API root endpoints

* Removed `GET /api` and `GET /api/v1`. They only returned `{ ok, resource, service }`. The SDK methods `client.api.root()` and `client.api.v1()` and their CLI commands go with them in the next SDK release

### October — Reviews, sales analytics, order actions, listings, and variants

* Added `GET /api/v1/reviews`, `GET /api/v1/reviews/{reviewId}`, and `POST /api/v1/reviews/{reviewId}/draft-reply`. Buyer names are omitted. Guide: [Reviews](https://docs.omnicommerce.ai/guides/reviews.md)
* Added `GET /api/v1/analytics/sales` for sales KPIs, a daily trend, channel and status mix, and top products. Guide: [Analytics](https://docs.omnicommerce.ai/guides/analytics.md)
* Added `GET /api/v1/orders/{orderId}/action-options`, `POST /api/v1/orders/{orderId}/actions`, and `GET /api/v1/orders/{orderId}/actions` to ship, cancel, generate shipping labels, and update tracking. Guide: [Order fulfillment](https://docs.omnicommerce.ai/guides/order-fulfillment.md)
* Added `GET /api/v1/products/{productId}/listings` for each marketplace listing's state, URL, and latest publish attempt, including rejection details
* `GET /api/v1/products/{productId}` now returns the product's variants in `variants`
* New OAuth scopes: `reviews:read`, `reviews:write`, `analytics:read`
* **Breaking:** `GET /api/v1/products` rows no longer include `hasVariants`. Use `variantCount`, which is above 0 when a product has variants

### October — Omni agent API

* Added `POST /api/v1/agents/general/invoke` to wait for the general Omni agent
* Added `POST /api/v1/agents/general/runs` and `GET /api/v1/agents/general/runs/{runId}` to start a run and poll it. Starting returns `202` with the queued run, a `Location` header, and `Retry-After`
* New OAuth scope: `agents:invoke`
* The latest user message accepts `{ "type": "image", "url" }` parts for uploaded HTTP(S) images
* Guide: [Omni agent API](https://docs.omnicommerce.ai/guides/agent.md)

### October — Campaigns API

* Added list, read, create, and revise endpoints under `/api/v1/campaigns`
* Added plan actions, archive/restore, and permanent delete for archived campaigns
* Added `GET /api/v1/campaigns/options` for the members and connected stores a plan can name
* Uses `promotions:read` and `promotions:write`, the same permissions as the workspace Campaigns pages
* Guide: [Campaigns](https://docs.omnicommerce.ai/guides/campaigns.md)

### September — Product delisted webhook

* Added `product.delisted`
* Emitted after a marketplace delist is saved, including
  `POST /api/v1/products/{productId}/delist`
* `changedFields` names each removed channel, such as `marketplaces.shopee`
* The OmniCommerce product is not deleted

### September — Delist a product

* Added `POST /api/v1/products/{productId}/delist`
* Uses the same `catalog:sync` scope as publish
* Omitting `marketplaces` delists every existing listing. Naming marketplaces
  limits the delist; each named marketplace must already have a listing
* Covers Shopee, Lazada, TikTok Shop, Shopify, WhatsApp, Zalora, Amazon, and
  eBay
* Returns `202` with a `jobId` to poll at `GET /api/v1/jobs/{jobId}`
* Does not delete the OmniCommerce product

### September — Exact product SKU list filter

* `GET /api/v1/products` accepts `sku` for exact catalog SKU equality (trimmed).
  This is not the fuzzy `q` name/SKU search. Repeat `sku` or comma-separate up
  to 50 values.

### September — Catalog cost API

* Added `POST /api/v1/products/cost` (1–200 updates) and
  `PATCH /api/v1/products/{productId}/cost`
* Cost is Omni-only: source amount and currency are stored on the product; the
  amount is not converted to the selling currency
* When cost currency differs from selling currency and `costPriceFxRate` is
  omitted, Omni quotes FX and stores the rate on the product
* Documented listing by marketplace (`GET /api/v1/products`) then batch cost
  write in [Catalog updates](https://docs.omnicommerce.ai/guides/catalog-updates.md)

### September — Public AOP API

* Added public AOP REST endpoints under `/api/v1/aop/*`
* `POST /api/v1/aop/{aopId}/execute` starts a run and returns `thread_id`
* `GET /api/v1/threads/{thread_id}/status` polls execution
* JSON responses use `aop_id`
* Added create, config read/overwrite, and retry
* New OAuth scopes: `aops:read`, `aops:write`

### August — Catalog export and commerce outcome APIs

* Added a cursor-paged JSON catalog export and optional CSV intake shape
* Added PII-free SKU-level order outcomes and product pricing guardrail fields
* Added versioned return webhooks plus return list/detail APIs
* Added settlement list/detail APIs for normalized finance reconciliation
* Added an immutable webhook-event pull API for missed-delivery recovery
* Documented the complete bootstrap, webhook, price/inventory write, job, and
  reconciliation flow

### August — Versioned catalog price and inventory updates

* Added dedicated `PATCH /api/v1/products/{productId}/price` and
  `PATCH /api/v1/products/{productId}/inventory` endpoints for products and
  variants
* Added credential-derived organization scope, exact marketplace-account
  targets, durable sync jobs, and pollable per-target status
* Connected local changes to `product.price.changed` and
  `product.inventory.changed` webhooks

### August — Unified settlement webhooks

* Added `settlement.created`, `settlement.updated`, and
  `settlement.status.changed` as first-class subscription events
* Normalized marketplace fees, seller net, variance, evidence status, and payout
  references independently from order lifecycle updates
* Added versioned, currency-safe snapshots with duplicate suppression across
  marketplace finance retries
* Documented the settlement lifecycle and added API Reference pages for all
  three events

### August — Unified order webhooks

* Added the provider-neutral `2026-08-01` order webhook contract
* Standardized order lifecycle events across Shopee, Lazada, TikTok Shop,
  Shopify, Zalora, Amazon, and developer-created orders
* Added complete PII-free snapshots, canonical statuses, exact account
  provenance, decimal-string money, and per-order resource versions
* Documented subscription setup, signing, retries, idempotency, and marketplace
  mapping
* Added first-class API Reference sections for every supported product, order,
  and look webhook operation, plus an availability catalog for planned resources

### August — Public docs on Mintlify

* Migrated developer docs to Mintlify with interactive OpenAPI playground
* Documentation, API Reference, and Changelog tabs (Exa-style layout)
* Guides for orders, promotions, price books, bulk import, and ghost mannequin
* MCP reference for public catalog tools

### Earlier

See the live OpenAPI document for the current endpoint surface:

```bash theme={null}
curl https://omnicommerce.sg/openapi.json
```


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.