Skip to content
v0.3

read.internal.products_admin

The tenant’s WHOLE catalog — drafts, archived products and rows no store publishes included — with the same category/collection/option/price/custom-field filters, sort and opt-in facets as the public list, and no store to scope by. status is the lifecycle cut the admin’s tab strip uses (draft / active / archived). Internal face only.

  • Surface: GET /v1/read/internal/products_admin · MCP tool read.internal.products_admin
  • Auth: ★ Internal read (operator) — a tenant credential is REQUIRED; requires the catalog.admin.read scope. The tenant is resolved from the CALLER’s identity, never from store. Personal fields come back MASKED for an actor without pii.read (the shape is unchanged).
{
"additionalProperties": {
"type": "string"
},
"properties": {
"category": {
"pattern": "^[A-Za-z0-9_]+(\\.[A-Za-z0-9_]+)*$",
"type": "string"
},
"collection": {
"minLength": 1,
"type": "string"
},
"limit": {
"default": 24,
"maximum": 100,
"minimum": 1,
"type": "integer"
},
"page": {
"default": 1,
"maximum": 9007199254740991,
"minimum": 1,
"type": "integer"
},
"projection": {
"description": "Named projection of the result. Declared: full, feed. Absent = full.",
"type": "string"
},
"status": {
"enum": [
"draft",
"active",
"archived"
],
"type": "string"
}
},
"type": "object"
}

Open (unknown) — this capability does not declare an output schema.

invalid_params (400) · not_found (404) · unauthorized (401) · forbidden (403)