The Monday Brief Every week: what your customers asked for, what they couldn't find, and the one fix worth making first. See a brief →
ProblemHow it worksSafe to go liveIntelligenceFree auditPricingBlogDocs

Endpoint reference Enterprise

EndpointMethodPurpose
/api/searchPOSTGet AI answers with sources/products.
/api/ingestPOSTCreate crawl jobs (simple/sitemap/advanced modes).
/api/crawlsGETList crawl history and statuses.
/api/documentsPOST/GET/DELETEManage uploaded knowledge files.
/api/widget-configGET/POSTRead/save widget visual config. GET also returns availability: {"available": false, "reason": "quota_exceeded"} when the widget should stay hidden.
/api/quotaGETMonthly question usage for a site: state (ok, warning, grace, blocked), used, limit, graceLimit, resetDate and suppressedLoads (page views without the assistant).
/api/widget-suppressedPOSTCalled by the widget when it stays hidden, to count page views without the assistant.
/api/configGET/POSTRead/save workspace behavior config.
/api/analyticsGETRetrieve KPIs, question topics, gaps and trends.
/api/notify-mePOSTSave a visitor's "Notify me" request for a product the site doesn't carry. Called by the widget.
/api/notify-me/settingsGET/PUTRead or change whether the widget offers "Notify me" (owner only for changes).
/api/notify-me/requestsGETExport "Notify me" requests with email addresses, as JSON or CSV (owner only).
/api/brief/settingsGET/PUTRead or change Monday Brief recipients and timing (owner only for changes, Pro and above).
/api/gaps/statusPUTMark a gap as fixed, dismissed or open (label, kind: product or content).
/api/gaps/lifecycleGETFixed gaps with weekly volume before and since the fix, change in %, and status: measuring, verified, not_improved or insufficient_data.
/api/brief/send-testPOSTSend this week's Monday Brief to the saved recipients now (owner only).
/api/functionsGET/POSTManage function definitions.
/api/security-settingsGET/POSTControl token, rate, and abuse safeguards.
/api/allowlistGET/POSTManage authorized domains/origins.
/api/tokenGET/POSTView or rotate API token.

Authentication

/api/search accepts your API key in the x-api-key header (see API Key and Auth). The widget uses a short-lived initialization token instead. Settings and reporting endpoints (/api/analytics, /api/quota, /api/brief/*, /api/gaps/*, /api/notify-me/settings and /requests) require a signed-in dashboard user and check that they belong to the site.

POST /api/search: response fields

FieldDescription
answerThe reply to show the visitor.
sourcesPages and products used. Product sources also include name, image and price.
statussuccess or no_answer.
forcedNoAnswertrue when the assistant declined because retrieval confidence was below the threshold.
unmetProductShort, lowercase name of a product the visitor asked for that the site doesn't carry, or null.
questionTopicWhich of the site's own question topics the question belongs to, or null.
notifyOffer{ "product": "…" } when the site has "Notify me" turned on and unmetProduct is set; otherwise null. The widget uses it to show the "Notify me" form.
confidence, retrievalConfidenceThresholdRetrieval confidence of the best match, and the threshold in force.
actionRequestA Function the assistant suggests, or null.

When the site is over its monthly question limit, /api/search and /api/webmcp/query return 402 with {"error": "quota_exceeded", "status": "quota_exceeded", "message": "…"}.

POST /api/notify-me

curl -X POST https://askvio.web.app/api/notify-me \
  -H "Content-Type: application/json" \
  -d '{"clientId":"YOUR_CLIENT_ID","product":"gift cards","email":"visitor@example.com","conversationId":"…","pageUrl":"https://example.com/shop"}'

Returns {"ok": true, "duplicate": false}. The same email for the same product is stored once (duplicate: true on repeats). Returns 403 when "Notify me" is off for the site or the origin isn't allowlisted, 400 for an invalid email, and 429 after 5 requests per minute from one IP.

GET /api/notify-me/requests

Query: websiteId, optional format=csv. Each row has gap (the Unmet demand group the product belongs to), product, email, requestedAt and pageUrl. Only the site owner can call it, because it contains email addresses.

GET /api/analytics: intelligence fields

FieldDescription
questionClustersWhat visitors asked, grouped by meaning: label, total, daily counts, examples and up to 20 questions. Group names come from the site's own vocabulary and stay stable over time.
demandGapsProducts visitors asked for that aren't in the catalog: query, count (asks), notifyCount ("Notify me" requests), alsoUnanswered, lastSeen.
failedSearchesQuestions the site couldn't answer: query, count, samples, lastSeen and gapType (product when the fix is a product decision, content when it's a missing answer). Labels match demandGaps for the same concept.
gapStatusesGaps marked fixed or dismissed: label, kind, status, fixedAt. demandGaps and failedSearches also carry daily counts.
notifyRequestsNumber of "Notify me" requests in the period.
failedIntentRateShare of conversations the site couldn't answer. The dashboard derives "answered confidently" from it everywhere.
termsMost frequent single words and word pairs (kept for compatibility; prefer questionClusters).