AACSearch / guide
Publishing and support
The storefront preview and embed snippets, the hosted search-and-chat page with custom domains, webhooks, and the support inbox.
Storefront
/dashboard/storefront renders the packaged search-and-chat experience live
over one collection and hands you the snippet to put it on a real site. The
collection is chosen from a header picker and kept in ?collection=, so a
preview is a shareable link. The
preview runs on a short-lived search-only key minted by the console
(keys.preview), refreshed before it expires — the organization's full key
never reaches the browser.
The Embed this on your site panel has three tabs:
- Web component — a
<script type="module" src="https://cdn.aacsearch.com/aac-search.js">tag plus an<aac-search>element with the API URL, collection, query fields and facets. Replace theYOUR_SEARCH_KEYplaceholder with a search-scoped key. - React — an
aacsearch-uiconfig.json(generated from the live preview configuration, with the key replaced by a placeholder) and the component usage. - Hosted page — shown only when a hosted page exists: its URL, a copy action, a link to open it, and an iframe snippet.
The page also lists what the preview uses — query fields, facets, sort labels and the assistant — and warns when no assistant exists, so the chat is simply absent from the preview. The intro links to the hosted-page editor, and the Web-component and React tabs link to API keys for a search-scoped key.
Hosted page
/dashboard/hosting configures the organization's public
search-and-chat page. Until it is enabled, the screen is a short pitch with an
Enable hosting action; once enabled it is a seven-tab editor with a live
preview and a sticky save bar that distinguishes "unsaved changes — visitors
still see the last saved version" from "everything is published".
| Tab | What it configures |
|---|---|
| General | The page title, the slug (lowercase, shown under origin/a/{slug}), a logo URL and a welcome message, plus up to four example questions for the chat. |
| Search | Whether search is on, the collection, the fields to search (query by) and up to four example queries. Facets become the page's filters. |
| Chat | The assistant to embed, or No chat — search only. |
| Access | Whether the page is public or protected, and the allowed email addresses (up to 200) and domains (up to 50, subdomains included). Protecting the page with both lists empty leaves it open to organization members only. |
| Sharing | The social title (70 characters), description (200) and image URL (1200×630, falling back to the logo). |
| Embed | A share link, an iframe snippet and the widget snippet — the widget only once a collection and query field are chosen. |
| Domain | A custom domain, with the DNS records to create. |
The status bar shows whether the page is live or not configured, its public URL, and jump-chips for chat, search, access and domain state. The page ships its own search-scoped key, shown read-only with a copy action; AI calls made with it are throttled per visitor session and billed to the wallet. Turn the page off stops the URL answering and revokes the key; the settings are not kept and turning it back on issues a new key.
For a custom domain, the screen shows the CNAME and TXT records to create, with
copy buttons, and re-checks the status every 20 seconds until it is valid. The
possible states are valid, pending (TXT verified, waiting for the CNAME),
missing, conflict (with the records to remove) and error. DNS changes can
take a while to propagate. Serving TLS for arbitrary hostnames needs a
Cloudflare-for-SaaS-style layer in front of the console.
The public page
With hosting enabled, /a/{slug} is the public page:
company.aacsearch.com/a/{slug} by default, or the verified custom domain. It
reads its configuration and resolves the visitor's access, re-resolving when the
session changes. A private page asks the visitor to sign in (returning them to
the page afterwards), a visitor who is not on the allowlist sees a refusal with
their signed-in address and a Sign out action, and any other failure shows a
generic error card; the page loads behind skeletons. The owner's logo and title
form the header, the browser title and social preview come from the sharing
settings (with the title and logo as fallbacks), and the footer reads "Search
and answers by AACSearch". Deleted or unknown slugs answer 404.
The Chat tab leads with the welcome message (or the title) and the fixed line "Ask about the catalogue — answers cite the products they are based on." Up to four example questions are one-tap buttons that send the question immediately, and the answer renders as a single inline conversation with no thread list. Without an assistant the tab explains that the page has no chat yet and offers the search tab (or that the page is not set up yet).
The Search tab renders the experience without chat, with the collection's filters and shareable query URLs. Up to four example-query chips are shown while the URL carries no query, each writing the search state into the query string. When search is off, or a collection or query field is missing, the tab explains which — "Search is off on this page" or "Search is not set up yet" — and offers Back to chat.
The console's proxy maps a verified custom domain to the hosted page, so the address bar keeps the custom domain.
Webhooks
/dashboard/webhooks delivers platform events to your own endpoints as signed
HTTP requests. Any member can read the list and send a test; creating, editing,
toggling, rotating a secret and deleting require an owner or admin. Without an
active organization the screen asks you to pick one.
- List — each endpoint shows its name, enabled state, URL, subscribed events (at most four badges, then "+N more"; a wildcard reads "All events"), and the last delivery's status and relative time (with the exact timestamp on hover) or "No deliveries yet". The enable switch updates optimistically and rolls back on failure. An empty list is explained by what webhooks are; a failed first load shows "Webhooks unavailable" with Retry, and a failed refresh keeps the list with an inline error.
- Create / edit — a name (120 characters), an endpoint URL (2048
characters, HTTP or HTTPS) and an events picker. All events subscribes to
everything, including events added later, and each group has its own
select/clear checkbox with an indeterminate state. The picker lists the
events that belong to a group (support, assistant, experiments, hosting,
media, API keys, alerts); three newer events —
experiment.winner_detected,quality.regressionandevent.replayed— have no group, so they can only be chosen through All events and appear under their raw name in badges. - Screens — "New webhook" and "Edit name" carry a back link to the list, a skeleton while the role resolves, a no-organization empty state and a "Not authorized" state for members. Creating replaces the form with a "Webhook created" card that summarises the events, shows the secret once and links to the endpoint; a Cancel escape returns to the form.
- Signing secret — shown once at creation and on rotation. Deliveries carry
X-AACSearch-Event,X-AACSearch-Deliveryand an HMAC-SHA256X-AACSearch-Signatureheader of the formt=<unix>,v1=<hex>over{t}.{body}. Rotating the secret takes effect immediately, so update the receiver before doing it. - Detail — the endpoint's name (with an enabled/disabled badge), its own admin-only enable switch, a configuration card (endpoint URL, signing-secret preview with Rotate, event badges, created and updated timestamps) and an actions menu: Copy webhook ID for any member, and Edit, Rotate secret and Delete for admins. Delete redirects back to the list.
- Deliveries — the 100 most recent, with event, status, HTTP code, attempt count and time, and a Refresh. A row opens the delivery's status, HTTP code, attempts, created and finished times, error, and the exact JSON request body with a copy action. Send test creates a real delivery for any member and highlights it at the top; failed attempts are retried up to five times (six attempts in total), with backoff spaced up to 15 minutes apart. "No deliveries yet" and "Deliveries unavailable" with Retry cover the empty and failed states.
- Deleting an endpoint takes its delivery history with it and cannot be undone.
Support inbox
/dashboard/support is the organization side of the live chat that visitors
open from the embedded widget, alongside the AI assistant. Threads are listed
newest first and polled every five seconds.
A thread shows its subject, whether it is open or closed, when it was opened, the message history (visitor messages on the left, yours on the right) and a reply box — Enter sends, Shift+Enter adds a line. Close thread is available while a thread is open; a closed thread explains that a new visitor message starts a new thread. Threads are visible to any member of the organization.
Next
Insights and quality
Analytics, search issues, analytics rules, experiments, campaigns, the quality lab, autopilot, the observability trio and alerts with SLOs.
Organization and billing
Team and roles, usage, plans and credits, API keys and restrictions, security, SSO, SCIM, the audit log, and your own profile.