APIWebsite alerts
Website alerts API. Every site event from the last 90 days in one feed.
Pull outages, SSL and https problems, SEO changes on pages and Core Web Vitals drops, plus a summary of what is open right now. You build your status board, client report or ticket script while we keep the scans and checks running. Every plan includes the REST endpoints and MCP tools at no extra cost.
Site uptime
Homepage outages after two failed 30-minute checks, including when the site came back up, and firewall blocks.
SSL and https
Certificates that are invalid or expire today or tomorrow, and missing http-to-https redirects.
SEO page changes
New and fixed scan findings per page, plus changed titles, H1s, meta descriptions or status codes.
Core Web Vitals
Real-user LCP, INP or CLS dropping from good to needs improvement, or to poor, on mobile or desktop.
Website alerts endpoints and MCP tools
Call the REST endpoints over HTTPS with POST and a JSON body, or GET with the same arguments in the query string. Send your personal API key from the MCP page in the app as an Authorization: Bearer header. The full REST schema is in the OpenAPI specification. In Claude Code or Cursor, the MCP server exposes the same data as two tools.
You get 60 calls per minute per key across the REST API and the MCP server together. Both endpoints only read data, so a key can never change a site or edit notification settings.
| REST endpoint | MCP tool | What it returns |
|---|---|---|
alerts.feed |
get_alerts_feed |
Every event on one site from the last 90 days, newest first. Filter by kind (uptime, sitecheck, seo, cwv), problems_only, search query q and lang (en or nl), and page through with cursor. |
alerts.summary |
get_alerts_summary |
Event counts per kind over the last 90 days, plus up to five active issues in open, newest first, with since. |
A real alerts.feed call and response
Pass site_id to alerts.feed, and add filters when you only want one slice. This call asks for the last two SEO changes on a site.
curl -s https://app.marketingtracer.com/rest/v1/alerts.feed \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"site_id": "65a1b2c3d4e5f60718293a4b",
"kind": "seo",
"limit": 2
}'
{
"data": [
{
"id": "6ae67516bf737c062606238a",
"at": "2026-10-31T23:00:00Z",
"kind": "seo",
"type": "seo",
"rule": "status_change",
"label": "changed",
"text": "Now returns 200 (was 403)",
"url": "https://www.example-site.nl/pregnancy/work/risk-assessment",
"open": false
},
{
"id": "6ae5fa7c532767cc8602b59b",
"at": "2026-10-30T23:00:00Z",
"kind": "seo",
"type": "seo",
"rule": "status_change",
"label": "problem",
"text": "Now returns 410 (was 403)",
"url": "https://www.example-site.nl/pregnancy/fun/spa-treatment",
"open": false
}
],
"meta": {
"site_id": "65a1b2c3d4e5f60718293a4b",
"next_cursor": "eyJwYyI6WzE3OTM0MDEyMDAwMDAs…",
"total": 2
}
}
Each row carries a ready-made sentence in text, in English by default or in Dutch with lang: "nl". You also get label (down, problem, worse, fixed or changed) to colour or filter rows right away. SEO events carry the page address in url and the scan key in rule, while site-wide events return null for both. Active outages, blocked checks and SSL or https problems keep open: true until they clear, and SEO rows always have open: false.
The feed reads the site's 90-day history directly, independent of who turned email or Slack alerts on or off in the app. Pass meta.next_cursor back as cursor to load the next page.
Catch open site problems before a client calls
Run a morning script across your client sites with alerts.summary to feed an office screen or your ticket queue. Sites with an empty open list need no work. Any site that is down, refusing our uptime check, running on an SSL certificate that expires tomorrow or missing its https redirect shows up right away with since.
When you want the individual failures to create tickets, call alerts.feed with problems_only: true. Normal title edits and fixed scan rules stay out of the list, so you only get down, problem and worse rows.
A 90-day site changelog in your client report
Clients push a template update on Friday afternoon and ask on Monday morning what changed on the site. Pull alerts.feed with kind: "seo" into your client portal or monthly report. It flags pages that turned non-indexable or started returning 404, alongside new and fixed scan issues. Any changed or removed title, H1 or meta description appears in the same list.
All 90 days of events stay in the log even if everyone on the site turned email and Slack notifications off. Pass lang: "nl" when your client reads Dutch.
Line up site changes with traffic drops in your AI
When organic clicks drop on a product folder, ask Claude Code or Cursor what happened there. With the MarketingTracer MCP connected, your assistant checks get_alerts_summary and get_alerts_feed (filtered by URL path with q) next to Search Console and scan data.
You see at once whether the dip lines up with a batch of 410 pages, a removed H1, a firewall blocking our bot or a mobile LCP drop.
Organic clicks on /shoes/ dropped this week. Check what changed on those pages and whether anything is still open on the site.
get_alerts_summary get_alerts_feed · q: "/shoes/"Endpoints, arguments and field descriptions
Every endpoint is a POST with a JSON body; reading endpoints also take a GET with the same arguments in the query string. Send your API key as Authorization: Bearer YOUR_API_KEY. Every answer is {"data": …, "meta": {…}}: meta.site_id always, meta.next_cursor and meta.total for a list, meta.period where the endpoint covers a period. An error is {"error": {"code", "message"}} with the HTTP status: 400 invalid_argument, unknown_argument or missing_argument; 401 not_authenticated; 403 no_access or tool_off; 404 not_found; 429 rate_limited. The machine-readable version is openapi.json.
alerts.feed
POST /rest/v1/alerts.feed · MCP tool get_alerts_feed
Returns everything that happened on one site in the last 90 days, newest first, one row per event: outages, SSL and https problems, Core Web Vitals that got worse, and every change the SEO scan found on a page (a new problem, a fixed one, a changed title, H1, meta description or status). The same rows as the Meldingen page, independent of who gets which alert by mail or Slack. Page through with cursor.
Arguments
| Argument | Type | What it does |
|---|---|---|
site_id (required) | string | The site: its id from list_sites, or the id in the app’s address. |
kind | one of uptime, sitecheck, seo, cwv | Only this kind: uptime, sitecheck, seo or cwv. Omit for all. |
problems_only | boolean, default | Only rows labelled problem, down or worse. |
q | string | Only rows whose page address (seo) or text (the other kinds) contains this. |
lang | one of en, nl | Language of text: en or nl. Defaults to en. |
limit | integer, 1 to 100, default 50 | Rows per page, 1-100. Defaults to 50. |
cursor | string | meta.next_cursor of the previous call, for the next page. |
Example request
curl -X POST https://app.marketingtracer.com/rest/v1/alerts.feed \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"site_id":"YOUR_SITE_ID","kind":"seo","limit":2}'
Example response · Two SEO rows; pages that came back after the firewall fix.
{
"data": [
{
"id": "6ae67516bf737c062606238a",
"at": "2026-10-31T23:00:00Z",
"kind": "seo",
"type": "seo",
"rule": "status_change",
"label": "changed",
"text": "Now returns 200 (was 403)",
"url": "https://www.example-site.nl/pregnancy/work/risk-assessment",
"open": false
},
{
"id": "6ae5fa7c532767cc8602b59b",
"at": "2026-10-30T23:00:00Z",
"kind": "seo",
"type": "seo",
"rule": "status_change",
"label": "problem",
"text": "Now returns 410 (was 403)",
"url": "https://www.example-site.nl/pregnancy/fun/spa-treatment",
"open": false
}
],
"meta": {
"site_id": "YOUR_SITE_ID",
"next_cursor": "eyJwYyI6WzE3OTM0MDEyMDAwMDAsIjZhZTVmYTdjNTMyNzY3Y2M4NjAyYjU5YiJdfQ==",
"total": 2
}
}
Response fields · data is a list; each item has:
| Field | Type | What it is |
|---|---|---|
id | string | The id of the event. |
at | string | When it happened, ISO 8601 UTC. For seo: when the scan saw it. |
kind | string | uptime (site down or our check blocked), sitecheck (SSL certificate invalid or expiring, http not redirecting to https), seo (a change or problem the SEO scan found on a page) or cwv (a Core Web Vital of the site got a worse rating than the week before). |
type | string | What happened: uptime_down, uptime_blocked, ssl_invalid, ssl_expiry, https_redirect, cwv_worse, or seo for a change from the SEO scan. |
rule | string or null | For seo: the scan rule or change (for example indexable, title_change, status_change); null for the other kinds. |
label | string | down (outage), problem, worse, fixed or changed. |
text | string | The event in one sentence, in lang. |
url | string or null | For seo: the page; null for the other kinds (they are about the whole site). |
open | boolean | Whether it is still going on (an outage that has not ended, a certificate that is still invalid). Always false for seo. |
alerts.summary
POST /rest/v1/alerts.summary · MCP tool get_alerts_summary
Returns how many events the site had per kind in the last 90 days (the rows of alerts.feed) and what is still going on now: an outage, a blocked check, an SSL or https problem, at most 5, newest first.
Arguments
| Argument | Type | What it does |
|---|---|---|
site_id (required) | string | The site: its id from list_sites, or the id in the app’s address. |
lang | one of en, nl | Language of text: en or nl. Defaults to en. |
Example request
curl -X POST https://app.marketingtracer.com/rest/v1/alerts.summary \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"site_id":"YOUR_SITE_ID"}'
Example response · Nothing open; 426 SEO changes in 90 days.
{
"data": {
"days": 90,
"total": 426,
"by_kind": {"uptime": 0, "sitecheck": 0, "seo": 426, "cwv": 0},
"open": []
},
"meta": {"site_id": "YOUR_SITE_ID"}
}
Response fields · in data:
| Field | Type | What it is |
|---|---|---|
days | integer | The period counted, in days (90). |
total | integer | Events of all kinds together. |
by_kind | object | Events per kind. |
by_kind.uptime | integer | Outages and blocked checks. |
by_kind.sitecheck | integer | SSL and https problems. |
by_kind.seo | integer | Changes the SEO scan found. |
by_kind.cwv | integer | Core Web Vitals that got worse. |
open | array | What is still going on, newest first; empty when nothing is. |
open[].kind | string | uptime or sitecheck (a Core Web Vitals change is an event, never open). |
open[].type | string | uptime_down, uptime_blocked, ssl_invalid, ssl_expiry or https_redirect. |
open[].text | string | In one sentence, in lang. |
open[].since | string | When it started, ISO 8601 UTC. |
White-label website alerts API. On your own domain, across every client site.
With a white-label dashboard on your own domain, both the REST API and the MCP server answer there under your agency name. One API key reads the alerts for every client site. You decide whether your clients also get the API and the MCP.
Free 14-day trial
MarketingTracer smart A.I. tool shows you what you need to rank. Then we'll help you get it done.
- No credit card required
- No installation needed
- No strings attached
Website alerts API FAQ
Something else? Ask us.
What does the website alerts API return?
It returns a site's 90-day event history and any problem still open right now. Use alerts.feed for one row per event, newest first, with its timestamp, kind, label, sentence in English or Dutch, page URL for SEO changes and open flag. For a quick status check, alerts.summary gives you 90-day counts per kind and up to five active issues.
Which kinds of events are in the alerts feed?
Four kinds: uptime, sitecheck, seo and cwv. Under uptime you get homepage outages after two failed 30-minute checks (including recovery time) and firewall blocks. Site-wide SSL problems (invalid or expiring today or tomorrow) and missing http-to-https redirects sit under sitecheck. Page-level seo events cover new and fixed scan findings (including indexability) plus changed or removed titles, H1s, meta descriptions or HTTP status codes. The cwv kind logs real-user LCP, INP or CLS when a metric drops from good to needs improvement, or from needs improvement to poor, on mobile or desktop.
Do email or Slack notification settings affect what alerts.feed returns?
No. Both alerts.feed and alerts.summary read the site's 90-day event log directly. Even if everyone on a site turns email and Slack notifications off, every event from the last 90 days still appears in the API and the MCP.
How does /api/alerts differ from /api/uptime?
This API gives you one 90-day event stream across outages, SSL and https problems, SEO page changes and Core Web Vitals drops. The uptime monitoring API goes deep on homepage availability itself. It returns 7-day and 30-day uptime percentages, median response time (TTFB) and full outage durations.
What is the rate limit and does the API cost extra?
You get 60 calls per minute per API key across the REST API and the MCP server together, included in every plan at no extra cost. Plan details are on the pricing page.
Can I read website alerts in Claude or Cursor, and can the tools change settings?
Yes, you can read them in both, and nothing on a site or in your alert settings can be changed. Connect Claude Code or Cursor to the MarketingTracer MCP server with your API key to call get_alerts_feed and get_alerts_summary. It also works in the Claude app where custom connectors show request headers, while ChatGPT does not connect because it needs a sign-in flow.