api.platformdtc.com) with a
real scoped sq_agt_* service-account key. This is not a test-suite summary — it is what the
production API actually returned. The keys used were minted for the sweep and revoked
immediately afterwards; revocation was itself verified (a revoked key returns
AUTHENTICATION_ERROR).
Last verified: 2026-07-21.
Only read endpoints were exercised. Writes were deliberately not run against live
merchant data — creating or mutating products, orders or customers in a real store is not an
acceptable test. Write paths are covered by the unit and db-e2e suites, not by this sweep.
Agent Gateway — /api/v1/agent/v1
Scope enforcement was confirmed negatively as well: a key without
ads:read got 403 FORBIDDEN_SCOPE on /ads/accounts, and a key without agent:admin got 403 on /audit
and /webhooks. The gate is real, not decorative.
Commerce resource APIs — /api/v1
These are the endpoints whose scopes were, until recently, impossible to mint — they were
enforced by the Go services but missing from the scope registry, so no sq_agt_* key could
carry them. All now verified reachable with a scoped key.
MCP surface
Verified against the runningmcp-platformdtc server (reachable only from the OpenClaw
runtime and localhost — it is IP-locked, so this was exercised on the host):
tools/list→ 25 tools advertisedtools/calldtc_list_orders→ returned live order data through the Gateway
Known broken
Not yet available
-
/api/v1/productsdoes not acceptX-Agent-Key— with two exceptions. The listing, variant, image and bulk routes still return401 Missing or invalid authorization headerfor agent keys and serve the dashboard user JWT only; that cutover is the pending work described in Products. Until it lands, use the Gateway’s/productsroutes, which are agent-accessible but narrower. The exceptions arePOST /api/v1/products/import/shopifyand.../import/shopify/preview(recipe), which do acceptX-Agent-Keyand backdtc_import_shopify_product/dtc_preview_shopify_product. They are served by the Go binary rather than Python, which is why their auth differs from their path neighbours. Scope iswrite_products(legacycatalog:writekeys are equivalent). -
The offer-optimize surface is not deployed to production. Its routes and service are
absent from the deployed build, so the
offers:*scopes can be granted but have nothing to authorize yet.