Headless probes
This composition has no headless surface. But the platform Delivery API is live, and it is the cheapest read-only probe an agent has. Say which is which.
What the baseline guarantees
NOT present: the `surface-headless` layer is not in this edition. There are no `Headless_*`
item types, no headless repository, no headless Delivery-API content tree. `headless-demo` is
a DIFFERENT edition (base + surface-headless + sample-data) with zero Swift design-package
dependency.
Present anyway, because it is platform: the `/dwapi/` Delivery API answers on this host for
the content and commerce this composition DOES have. It is the authoritative read surface for
a Swift solution's own structure (dw-swift-page-design/SKILL.md:127-134):
/dwapi/api.json the live OpenAPI schema — fetch it, do not assume
/dwapi/content/areas
/dwapi/content/pages?AreaId=<id>
/dwapi/content/rows/<pageId>/Desktop -> row.Columns[].Paragraph (SINGULAR),
row.Definition.Name; array order IS render order
/dwapi/frontend/navigations/<areaId>?ExpandMode=all&StartLevel=1&StopLevel=3
/dwapi/ecommerce/products/search?RepositoryName=&QueryName=&LanguageId=ENU&ShopId=SHOP1
/dwapi/ecommerce/products/{id}
/dwapi/users/authenticate (JSON only — a form-encoded POST answers 415)
/dwapi/ecommerce/favorites/lists
/dwapi/feeds/VerifyConnection the health ping
Two auth facts worth carrying: an ADMIN token on /dwapi/ecommerce/products answers 401 while
ANONYMOUS answers 200 — the two token types are not interchangeable, and the failure is a
non-401 shape rather than a fixed code, so detect it by shape. Product count is
`totalProductsCount`, not `products.length` (which is one page).
Use /dwapi as a READ probe on this site. Do not present it as a headless demo: nothing here
was built for a decoupled frontend. Which skill covers it
dw-headless-delivery (dynamo: false, mcp: none) — references/endpoint-reference.md is the full endpoint catalogue (510 lines) and the only file. dw-demo-headless (dynamo: false) — references/headless-baseline.md, references/headless-backend.md, references/headless-frontend.md — only if the customer wants the headless edition, which is a different composition.
Which MCP tools brand it
No MCP tool writes the Delivery API — it is a read surface over what the other tools wrote. The MCP equivalents for the same reads: get_areas, get_pages_by_area_id, get_grid_rows_by_page_id, get_paragraphs_by_page_id, get_item_field_values. get_frontend_health is the liveness probe.
Verify
The backend gate, in order (dw-demo-headless/references/headless-backend.md:181-195):
GET /dwapi/api.json -> 200
GET /dwapi/ecommerce/products/{knownId} -> 200 with a full model
admin token on /dwapi/ecommerce/products -> 401
anonymous on /dwapi/ecommerce/products -> 200
GET /dwapi/ecommerce/products/search?...&LanguageId=ENU&ShopId=SHOP1
-> 200, totalProductsCount>0
GET /dwapi/content/rows/<home page id>/Desktop returns the 8 Home grid rows in render order.
MCP: get_frontend_health returns healthy.
Negative assert that proves this is NOT a headless build: get_item_types returns no name
starting `Headless_`.