Overview
The Monitor API returns the same data your watchlists display on the dashboard — your product's stats, each competitor's stats, top queries, live prices, and category baselines — as JSON. Use it to feed BI tools, alerting workflows, or custom reporting.
Base URL: https://biasque.com/api
Authentication
All requests use a bearer token. Each signed-in user has a single API key, automatically created on first access.
- Sign in and open the Dashboard.
- Find the API Access card and copy your key. Keys begin with
ask_. - Send it as a bearer token on every request:
Authorization: Bearer ask_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxKeep keys secret. If a key leaks, regenerate it from the dashboard — the old one stops working immediately.
GET /api/monitor
Returns the full watchlist payload for a single watchlist.
Query parameters
setId(required) — the watchlist ID. You can copy it from the watchlist URL on the dashboard.since(optional) — Unix timestamp in milliseconds. Restricts appearances and selections to events at or after this time.
Example request
curl -s "https://biasque.com/api/monitor?setId=ws_abc123&since=1714521600000" \
-H "Authorization: Bearer ask_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"Example response (truncated)
{
"setId": "ws_abc123",
"setName": "Hand-poured candles",
"ownStore": {
"shopDomain": "example-candles.myshopify.com",
"products": [
{
"productId": "gid://shopify/Product/123",
"title": "Cedar & Smoke 8oz",
"imageUrl": "https://...",
"category": "Home & Living",
"latestPrice": 28,
"currency": "USD",
"hitCount": 142,
"selectedCount": 41,
"viewCount": 18,
"checkoutCount": 3,
"latestReason": "Warm, masculine scent profile fits the user's gift brief...",
"livePrice": 28,
"liveCurrency": "USD",
"liveInStock": true,
"liveDataStatus": "fresh",
"categoryAvgSelectionRate": 22
}
],
"queries": [
{
"query": "thoughtful birthday gift for a coffee lover under $60",
"appearances": 12,
"selections": 5,
"selectionRate": 42,
"lastSeenAt": 1714600000000
}
]
},
"competitors": [
{
"shopDomain": "rival-candle-co.myshopify.com",
"products": [
{
"productId": "gid://shopify/Product/456",
"title": "Smoked Oak Candle",
"hitCount": 211,
"selectedCount": 88,
"selectionRate": 41,
"livePrice": 32,
"liveDataStatus": "fresh",
"queries": [
{
"query": "gift candle for him",
"appearances": 18,
"selections": 9,
"selectionRate": 50,
"lastSeenAt": 1714590000000
}
]
}
]
}
]
}Field reference
The most relevant fields, with the conventions used across the response:
hitCount— number of searches in which the product was considered.selectedCount— number of those searches in which the product was recommended.selectionRate— percentage, integer 0–100 (per query in thequeriesarrays).viewCount/checkoutCount— click-through events recorded on the product link.livePrice/liveInStock— fetched at request time from the merchant's MCP endpoint when available.liveDataStatus— one offresh,no_mcp_endpoint,no_variant_gid,mcp_error.latestReason— the agent's most recent written explanation for why the product was picked.categoryAvgSelectionRate— average selection rate across all products in the same category over the selected window.lastSeenAt— Unix timestamp in milliseconds.
See Store Performance for guidance on interpreting these numbers.
Rate limits
Biasque is currently in beta. Access is provided on an experimental basis and limits are applied accordingly. Each API key is subject to a daily request limit that resets at midnight UTC. When the limit is reached, the API returns HTTP 429 with a JSON body:
{
"error": "Daily API limit reached",
"code": "DAILY_API_LIMIT_EXCEEDED",
"used": 1,
"limit": 1,
"resetAt": 1716508800
}resetAt is a Unix timestamp in seconds. Use it to schedule your next request rather than polling. Limits may be adjusted over time as the service scales — check the dashboard for the current values.
Errors
The API returns standard HTTP status codes:
- 400 — missing or invalid parameter (for example, no
setId, or a non-numericsince). - 401 — missing or invalid bearer token.
- 404 — the watchlist does not exist or does not belong to your account.
- 422 — the watchlist is incomplete (no own product, or no competitors).
- 429 — daily request limit exceeded. See the Rate limits section above.
Versioning and stability
The Monitor API is in active development. Additive changes (new fields, new endpoints) can ship at any time without notice. Breaking changes will be announced through the dashboard and via email to API key holders. Pin to field names you actually consume rather than asserting the shape of the full response.