DocsAPI and MCP
Store Intelligence

API and MCP

Your weekly store briefs in Claude, ChatGPT or your own code: what the stores you follow changed in prices, sales, products, promotions, ads and social, and what to do about it. Separate from the other Alertedly APIs: their keys don't work here, and ours don't work there.

Access and plans

  • MCP (Claude, ChatGPT, Cursor, any MCP client) is on every plan. People connect by signing in with their Alertedly account and see the workspaces they belong to.
  • REST is on Pro. Integrations use an API key (alys_live_…) that an admin creates under Integrations → API keys. A key belongs to one workspace and acts with its creator's access: read, or read and write.
  • Send keys as X-API-Key: alys_live_… or Authorization: Bearer alys_live_…. People in several workspaces pick one with X-Workspace-Id (REST) or the tools' workspace argument (MCP); otherwise it's their first (a key always uses its own). An unknown workspace is 404 NO_WORKSPACE.
  • Without a plan (or REST on Starter) the answer is 402 PLAN_REQUIRED with an upgrade_url, your workspace's Plan page.

MCP server

MCP server URL
https://store.alertedly.com/mcp

Streamable HTTP. In Claude: Settings → Connectors → Add custom connector, paste the URL and sign in. In ChatGPT: Open chatgpt.com/plugins, then + → Add custom MCP server: paste the server URL, choose OAuth, and sign in with your Alertedly account when asked. In Cursor: add this to ~/.cursor/mcp.json (or a project's .cursor/mcp.json) and sign in when Cursor asks. Name a store by its id, website or name.

Cursor: mcp.json
{
  "mcpServers": {
    "alertedly-store": {
      "url": "https://store.alertedly.com/mcp"
    }
  }
}
ToolAccessWhat it does
list_storesreadThe stores you track (competitor or admired), your own store, your plan's limit and which stores get the weekly brief.
add_storewriteTrack a store as a competitor or a brand you admire. Its first brief is queued as soon as it's added (once setup is finished), then it's in every weekly brief.
remove_storewriteStop tracking a store. Past briefs stay.
tag_storewriteMark a store competitor or admired.
get_overviewreadThis week across your stores: headlines, key numbers, the top signal and Your moves.
get_briefreadThe latest weekly brief (markdown), of one store or the newest.
list_reportsreadPast briefs, newest first in whole weeks, with whether each has an audio summary; next_cursor pages back.
get_reportreadOne brief: markdown, headline, week and the audio summary's link.
get_catalogreadOn sale and how deep, markdowns, new products, sold out and back in stock.
get_promotionsreadHomepage banners, announcement bar, codes, free-shipping threshold.
get_adsreadMeta ads (every plan) and Google ads (Pro): counts, markets, top creatives.
get_socialreadInstagram, TikTok, YouTube, Facebook and Pinterest; Reddit on Pro.
get_tiktok_shopreadTikTok Shop products, prices and units.
get_reviewsreadGoogle reviews (Pro): rating, count, praise and complaints.
get_sales_calendarreadWho was on sale, week by week, and how deep.
get_price_changesreadMarkdowns and price moves in a week, per product, a page at a time, with totals for every store.
compare_storesreadKey numbers side by side, with who's highest and lowest (or all equal).
request_free_reportwriteThe one-off free report on any store, to your email (one a week per email).
get_usagereadYour plan, stores against the limit and how many get the weekly brief, what the plan opens, calls this month and billing.
list_teamreadMembers and pending invites.
invitewriteInvite a teammate by email (admins). Signed in, we email them; with a key you get the link.
remove_memberwriteRemove a teammate by email or id (admins; never the last admin).
revoke_invitewriteRevoke a pending invite by email or id (admins); its link stops working.

Try: “What did my competitors change this week?”, “Who's discounting the most?”, “Compare us with Allbirds and Mejuri”, “Track glossier.com as a brand I admire”.

REST API

Base URL
https://store.alertedly.com/api/v1
Example
curl "https://store.alertedly.com/api/v1/overview" -H "X-API-Key: alys_live_…"
MethodPathScopeWhat
GET/usagereadPlan, limits, access, calls this month
GET/overviewreadThis week across your stores
GET/storesreadTracked stores
POST/storeswrite{"url", "name"?, "tag"?}: track a store (201)
GET/stores/{id}readOne store: latest report, every channel this week, 12 weeks of key numbers
PATCH/stores/{id}write{"tag": "competitor" | "admired"}
DELETE/stores/{id}writeStop tracking
GET/stores/{id}/catalogreadCatalog and prices
GET/stores/{id}/promotionsreadPromotions
GET/stores/{id}/socialreadSocial channels
GET/stores/{id}/tiktok-shopreadTikTok Shop
GET/stores/{id}/reviewsreadGoogle reviews (Pro)
GET/adsread?store=…: ads, every store or one
GET/briefread?store=…: the latest brief (markdown and HTML)
GET/reportsread?store=…&limit=…&cursor=…: past briefs, whole weeks
GET/reports/{id}readOne brief (markdown and HTML)
GET/sales-calendarread?weeks=1–26: the sales calendar
GET/price-changesread?week=YYYY-MM-DD&store=…&kind=…&limit=…&cursor=…: price changes and totals
GET/compareread?stores=a.com,b.com: compare stores
POST/free-reportswrite{"url"}: the free report, to your email (202). Idempotency-Key honoured
GET/teamreadMembers and invites
POST/team/inviteswrite{"email", "role"?}: invite (201, with invite_url)
DELETE/team/members/{member_id}writeRemove a member (admins; never the last admin)
DELETE/team/invites/{invite_id}writeRevoke a pending invite (admins)

Limits and errors

  • 60 requests a minute per key or person; over it, 429 with Retry-After.
  • Errors are { error: { message, error_code }, request_id }: UNAUTHORIZED, PLAN_REQUIRED, INSUFFICIENT_SCOPE, NOT_FOUND, NO_BRIEF_YET, REFUSED (with the reason), RATE_LIMITED.
  • Numbers are from the latest weekly run. Google ads, Google reviews, Reddit and press are on Pro.
  • Price changes come a page at a time: pass next_cursor back as cursor with the same filters. If the week was read again while you paged, the next page is 409 CURSOR_STALE: start over.

Changes

  • 2026-10-21: get_price_changes and GET /price-changes answer a page at a time: the default page is 50 rows (it was every row up to 200), limit 1-200, and next_cursor (opaque; pass it back as cursor) gives the next page. Each answer adds total (the rows your filters match) and totals (every change counted per store); store and kind filter on the server. list_reports pages in whole weeks with next_cursor.