Skip to the catalogue
Northwind Supply

Field notes · Autumn 2026

Tools for the long way round.

A small catalogue of things that survive weather, luggage and use. Questions about sizing or shipping? The chat button in the corner is live — it is the real ANCSP widget, running against the real gateway.

Browse the kit

The catalogue

Canvas field tote

Waxed cotton, riveted handles, and a pocket for the things you always lose.

€68

Enamel camp mug

Speckled enamel over steel. Holds 400 ml and one very long morning.

€24

Merino trail sock

A cushioned sole and a ribbed cuff that stays where you put it.

€19

Widget lab

Not published — the widget will say so instead of guessing.

The controls below call the mounted SDK instance directly — the same public API an external developer uses. For the request/response of every endpoint and Node, .NET and PHP examples, read the developer guide.

This page loads /widget.js with a data-ancsp-widget attribute, the same snippet the widget editor copies. Config is fetched directly from the gateway with an ETag; session and conversation calls go through the same-origin relay at /api/gw, because the gateway does not send CORS headers on /conversations.

Profile
wgt_demo
Config
Not published — the widget will say so instead of guessing.
Realtime
https://ancspapi.umutyanik.net/hubs/chat — if the hub refuses a Guest token, the panel falls back to a 15-second poll.
Identity
guest by default · signed assertion upgrades it

The lab waits for a published widget profile. Publish one in the console; until then there is no config document and no session to drive.

Why guest by default. Upgrading a visitor to a customer needs a short-lived assertion minted by a backend that holds a tenant service key (POST /api/v1/auth/sdk/widget-assertion). A static storefront cannot mint one, so conversations started here stay anonymous visitors unless you paste an assertion into the lab above. That is a security boundary, not a missing feature.

That id exists but has no published version, or does not exist. Open the profile in /app/settings/widget and publish it; the public endpoint returns errors.widget.not_found until then.