AVAILABLE

E-commerce

Product Catalog Diff & Drift Guard

Hash and compare caller-supplied catalog snapshots, isolate price and inventory drift, create a non-executing patch review plan, and apply explicit change-budget policy.

CONTRACT

Predictable for agents. Legible for reviewers.

REST
POST /v1/catalog-diff/policy-check
MCP tool
check_catalog_change_policy
Inputs
Two caller-supplied snapshots of up to 1,000 flat items each, with unique keys, up to 50 scalar fields per item, and optional comparison, tolerance, price, inventory, and change-budget policy.
Returns
CLEAR, REVIEW_REQUIRED, or BLOCKED with deterministic snapshot hashes, added/removed/changed keys, field-level before/after evidence, numeric and percentage deltas, a non-executing patch plan, policy findings, and a next action.
Latency
Synchronous
Usage unit
Catalog comparison

The suite also exposes /v1/catalog-diff/snapshot, /v1/catalog-diff/diff, /v1/catalog-diff/prices, /v1/catalog-diff/inventory, and /v1/catalog-diff/patch-plan plus /mcp/catalog-diff. It never connects to a store, marketplace, ERP, PIM, or inventory system; fetches a product page; mutates a catalog; submits a feed; or proves either snapshot is authoritative.

AGENT-READABLE EXCEPTIONS

CATALOG_DUPLICATE_KEYCATALOG_SNAPSHOT_CHANGEDCATALOG_PRICE_CHANGE_BLOCKEDCATALOG_PRICE_CHANGE_REVIEWCATALOG_INVENTORY_DRIFTCATALOG_PATCH_REVIEW_REQUIREDCATALOG_ADDITIONS_BLOCKEDCATALOG_REMOVALS_BLOCKEDCATALOG_CHANGE_BUDGET_EXCEEDEDCATALOG_PROTECTED_FIELD_CHANGED
HTTP request
POST /v1/catalog-diff/policy-check
Authorization: Bearer apc_...
Content-Type: application/json

{
  "before": [
    {
      "key": "SKU-1",
      "fields": {
        "sku": "SKU-1",
        "title": "Blue Tee",
        "price": 25,
        "currency": "USD",
        "quantity": 8,
        "availability": "in_stock"
      }
    }
  ],
  "after": [
    {
      "key": "SKU-1",
      "fields": {
        "sku": "SKU-1",
        "title": "Blue Tee",
        "price": 29,
        "currency": "USD",
        "quantity": 3,
        "availability": "in_stock"
      }
    },
    {
      "key": "SKU-2",
      "fields": {
        "sku": "SKU-2",
        "title": "Red Tee",
        "price": 25,
        "currency": "USD"
      }
    }
  ],
  "allow_additions": true,
  "allow_removals": false,
  "max_changed_items": 100,
  "max_changed_ratio": 0.25,
  "protected_fields": [
    "sku",
    "gtin",
    "currency"
  ]
}
cURL (bash)
curl --request POST \
  --url 'https://api-production-9502.up.railway.app/v1/catalog-diff/policy-check' \
  --header 'Authorization: Bearer ${AP_CONTROL_API_KEY}' \
  --header 'Content-Type: application/json' \
  --data '{
  "before": [
    {
      "key": "SKU-1",
      "fields": {
        "sku": "SKU-1",
        "title": "Blue Tee",
        "price": 25,
        "currency": "USD",
        "quantity": 8,
        "availability": "in_stock"
      }
    }
  ],
  "after": [
    {
      "key": "SKU-1",
      "fields": {
        "sku": "SKU-1",
        "title": "Blue Tee",
        "price": 29,
        "currency": "USD",
        "quantity": 3,
        "availability": "in_stock"
      }
    },
    {
      "key": "SKU-2",
      "fields": {
        "sku": "SKU-2",
        "title": "Red Tee",
        "price": 25,
        "currency": "USD"
      }
    }
  ],
  "allow_additions": true,
  "allow_removals": false,
  "max_changed_items": 100,
  "max_changed_ratio": 0.25,
  "protected_fields": [
    "sku",
    "gtin",
    "currency"
  ]
}'
Representative response
{
  "status": "COMPLETED",
  "decision": "BLOCKED",
  "changed_item_count": 1,
  "changed_ratio": 2,
  "added_count": 1,
  "removed_count": 0,
  "protected_field_changes": [],
  "findings": [
    {
      "code": "CATALOG_CHANGE_BUDGET_EXCEEDED",
      "severity": "HIGH",
      "message": "The snapshot change exceeds the caller's item or ratio budget.",
      "evidence": {
        "changed_items": 1,
        "ratio": 2
      },
      "next_action": "Split the change or require a broader authorized review."
    }
  ],
  "ruleset_version": "2026-08-11",
  "scope": "CALLER_SUPPLIED_SNAPSHOTS_ONLY",
  "external_system_queried": false,
  "catalog_mutated": false,
  "authority_verified": false,
  "payload_stored": false,
  "next_action": "Split the change or require a broader authorized review."
}
Caller-supplied snapshots onlyThe API compares bounded flat records supplied in the request and never decides which source is authoritative.
Patch plan cannot executeEvery operation is marked non-executable and must be translated into a target system's native, authorized mutation after review.
No store or marketplace accessThe service never connects to Shopify, Amazon, Google, an ERP, PIM, inventory system, landing page, or feed destination.

Use Product Catalog Diff & Drift Guard through RapidAPI.

Choose a capped marketplace plan, copy the generated request, and route the structured result through your own authorized workflow.