Developers

One key for the REST API and MCP server

Read your monitoring data, set up and tune sites and monitors, and run them from scripts, CI or an AI agent. One API key, read-only or full access, with the same rate limit across REST and MCP.

Quick start

Every request authenticates with an API key you create in the app. Point curl, your CI, or any HTTP client at https://app.relvato.com/api/v1.

# 1 — Confirm your key works and see the endpoints
curl https://app.relvato.com/api/v1 \
  -H "Authorization: Bearer rlv_your_key"

# 2 — List the sites Relvato monitors for you
curl https://app.relvato.com/api/v1/sites \
  -H "Authorization: Bearer rlv_your_key"

# 3 — Read recent runs (optionally scoped to one site)
curl "https://app.relvato.com/api/v1/runs?limit=10" \
  -H "Authorization: Bearer rlv_your_key"

# 4 — One run in detail, then the fix brief Relvato's AI would answer
curl https://app.relvato.com/api/v1/runs/RUN_ID \
  -H "Authorization: Bearer rlv_your_key"
curl https://app.relvato.com/api/v1/runs/RUN_ID/fix-prompt \
  -H "Authorization: Bearer rlv_your_key"

# 5 — Trigger an on-demand scan of a site (full-access key)
curl -X POST https://app.relvato.com/api/v1/sites/SITE_ID/scan \
  -H "Authorization: Bearer rlv_your_key"

Authentication

Send your key on every request as Authorization: Bearer rlv_your_key (an x-api-key header works too). A missing, revoked, or unknown key returns 401.

Create and revoke keys under API access in the app. Keys start with rlv_ and are shown once at creation. Each key is read-only (everything that reads: sites, health, performance, runs, monitors, updates, activity, fix briefs, alert settings) or full access (also add and configure sites and monitors, run them, review results and apply proposed fixes). Keys made before scopes existed have full access. Treat keys like a password.

REST endpoints

Every endpoint is scoped to the account behind the key and returns JSON. Base URL https://app.relvato.com/api/v1.

MethodEndpointDescription
GET/api/v1Confirms the key and lists the available endpoints.
GET/api/v1/sitesLists the websites Relvato monitors for you.
GET/api/v1/sites/:id/overviewA site's health verdict: what needs attention, each monitor's latest run and plan usage.
GET/api/v1/sites/:id/settingsA site's settings — never secret values.
GET/api/v1/sites/:id/healthHealth now and over time (?range=28|90|182), group briefings, probe uptime.
GET/api/v1/sites/:id/performanceLab and real-user Web Vitals, what slows the site, the top fixes.
GET/api/v1/sites/:id/activityThe WordPress activity log (?filter, ?search, ?days, ?limit).
GET/api/v1/sites/:id/updatesWordPress auto-update windows, held versions, safe updates, hardening.
GET/api/v1/sites/:id/quarantineQuarantine mode: the active session, its changes, past sessions.
GET/api/v1/checks/:idOne monitor in full: schedule, its own settings, ignored findings, latest run.
GET/api/v1/notificationsThe dashboard's notifications.
GET/api/v1/runsRecent runs, newest first — optional siteId, checkId, status, before (paging) and limit (1–100).
GET/api/v1/runs/:idOne run in detail: steps, warnings, findings and metrics (compacted when large).
GET/api/v1/runs/:id/fix-promptFor a run that found a problem: the brief Relvato's own AI answers — stack, what changed, the error and evidence.
GET/api/v1/alert-settingsWho is told about what: frequency, severity, channels and routing. Never URLs or secrets.
POST/api/v1/sites/:id/scanQueues an on-demand scan of one site and returns the run ids. Needs a full-access key; counts against your monthly run quota.

Example: list sites

{
  "sites": [
    {
      "id": "st_1a2b3c",
      "name": "style4street",
      "url": "https://style4street.com",
      "connectionType": "wordpress"
    }
  ]
}

Example: recent runs

A run that failed but was later resolved (baseline accepted or ignored) reports status: "passed" with resolved: true.

{
  "runs": [
    {
      "id": "rn_9f8e7d",
      "siteId": "st_1a2b3c",
      "checkId": "ck_4d5e6f",
      "journey": "checkout",
      "checkName": "Checkout",
      "status": "passed",
      "resolved": false,
      "trigger": "schedule",
      "startedAt": "2026-08-31T09:15:00.000Z",
      "durationMs": 4210,
      "error": null,
      "warning": null
    }
  ]
}

Example: one run in detail

Findings come in metrics.items. A large run is compacted rather than cut: long series become summaries, and what was left out is listed in metricsTrimmed — the headline and findings are always kept.

{
  "runId": "rn_9f8e7d",
  "runUrl": "https://app.relvato.com/runs/rn_9f8e7d",
  "check": { "key": "google-search", "name": "Google Search" },
  "status": "passed",
  "warning": "https://style4street.com/category/topuri/hanorace/ lost 57% of its Google impressions",
  "metrics": {
    "headline": { "tone": "warn", "text": "🔎 1 thing to review on Google Search (as of 2026-09-24)" },
    "items": [
      { "text": "https://style4street.com/category/topuri/hanorace/ lost 57% of its Google impressions — 98 in the 7 days to 2026-09-24, against 226 in an average week before", "tone": "warn" }
    ],
    "search": { "engine": "google", "tiles": [ … ], "dailies": [ { "label": "Impressions per day", "days": 84, "last7Total": 2196, "usualLast7Total": 2583 } ], … }
  },
  "metricsTrimmed": {
    "note": "Large parts were left out to keep this short — the run page has everything.",
    "omitted": ["search.dailies (the per-day values — summarized)", "search.tiles[].weekly (the 8 weekly bars)"]
  }
}

Example: a run's fix brief

For a run that found a problem, fix-prompt returns the brief Relvato's own AI answers: the site's stack, what changed just before, the error and findings, and for Google / Bing Search the evidence that rules causes out. Hand it to your own model, or read it yourself.

{
  "runId": "rn_9f8e7d",
  "runUrl": "https://app.relvato.com/runs/rn_9f8e7d",
  "hasIssue": true,
  "prompt": "# Help me understand a Google Search change on my WordPress site\n\nYou are a senior SEO specialist. … ## Evidence Relvato already has …"
}

Rate limits

Requests are limited per minute, per account, across REST and MCP combined. Your plan sets the ceiling:

PlanRequests / min
Free30
Pro120
Business600
Agency2,400

Every response carries X-RateLimit-Limit, X-RateLimit-Remaining, and X-RateLimit-Reset. Over the limit returns 429 with a Retry-After header.

Status codes

StatusMeaning
200Success.
400The request is missing something or can't be done — the message says what.
401Missing, unknown, or revoked API key.
403The key is read-only and the request would change something or run a scan.
404Site or run not found for this account.
409Site is disabled, or you haven't proven you own it yet (domain not verified, or WordPress plugin never connected).
429Rate limit hit, or the monthly run quota is used up.

MCP server (for AI agents)

Relvato is also a remote Model Context Protocol server with 58 tools, so an agent like Claude can do in a conversation what you'd do in the dashboard: add a site and walk you through connecting it, pick and configure its monitors (down to the pages the visual monitor checks), run them, explain the results and, when you agree, accept an intended change or hand you the link to apply the fix a run proposes in WordPress. Connect it by signing in to Relvato or with an API key; either way it shares the REST API's rate limit. Approving file-integrity, script and DNS changes, who receives alerts, secrets and deleting anything stay in the dashboard.

Listed in Claude's Connectors Directory ↗, in ChatGPT ↗ as a plugin, and in the GitHub MCP Registry ↗.

Sign in, no key needed. Add the endpoint as a connector in Claude (claude.ai, Desktop or Claude Code), ChatGPT or VS Code. The client opens Relvato's sign-in; you allow it to read your sites and results and to make changes: add sites and monitors, change schedules and run scans. Sign-in works in clients that support Client ID Metadata Documents; Cursor and Docker's MCP gateway don't yet, so they use an API key.

If you belong to an organization, you pick one of its workspaces on the sign-in screen; your personal workspace isn't offered there. To connect your personal workspace, use an API key.

Things you can ask an agent connected to Relvato:

  • “Why did checkout fail on my shop last night, and how do I fix it?”
  • “Set up monitoring for example.com and tell me what I need to do to connect it.”
  • “Who gets alerted when a Security monitor finds a problem, and on which channels?”
  • “Add my pricing and blog pages to the visual monitor, and run it.”
  • “How fast is my shop for real visitors, and what's slowing it down?”

Endpoint https://app.relvato.com/api/mcp

ToolWhat it does
Set up
list_sitesList the account's websites and whether each is ready to run monitors.
add_siteAdd a website and get its setup step: connect the WordPress plugin, or verify the domain.
verify_siteCheck that setup step: the plugin connection, or the domain-verification DNS record or meta tag.
start_monitoring_for_goalsPick what matters (checkout, security, search, speed, …) and get the monitors that cover it on your plan.
list_checksThe monitors you can add to a site: what each catches, whether your plan includes it, and which are recommended.
add_checksAdd monitors to a site; each one reports added, already there, or why not.
dismiss_recommendationStop recommending a monitor for a site, or bring dismissed recommendations back.
calibrate_siteWooCommerce: read the store again (a product to buy, checkout type, currency) after it changed.
verify_vitals_beaconCheck the real-user Web Vitals beacon is installed.
Read
site_overviewPlain-language health verdict: what needs attention, every monitor with its latest run and schedule, plan usage and, on WordPress, the site's AI abilities.
get_site_healthPass rate now and over 30 days, the trend over 28–182 days, each group's briefing, and probe uptime with incidents.
get_performanceLab and real-user Core Web Vitals, what slows the site down, and the top fixes with steps.
get_checkOne monitor in full: schedule, its own settings (pages, masks, checkout details, …), ignored findings, its recipe if AI-written, latest run.
list_runsRecent runs, newest first — by site, monitor or status, with paging.
get_runOne run in detail: steps, findings, visual comparisons with image links, the fix it proposes, plugins it suggests updating.
get_fix_promptFor a run that found a problem: the same brief Relvato's own AI answers, to reason about the likely cause and fixes.
get_updatesWordPress: auto-update windows and what they updated or rolled back, held versions, safe updates, hardening.
get_safe_updateFollow a safe plugin update or deactivation until it passes, breaks a monitor or is undone in WordPress.
get_quarantineQuarantine mode: available or not, on until when, every change it saw, past sessions.
get_activity_logWordPress: sign-ins, failed sign-ins, accounts, updates, settings and file edits, within your plan's history.
get_notificationsThe dashboard's notifications: failing monitors, plugin or beacon problems, paused channels, billing.
get_site_settingsA site's settings — what an agent may change and what stays in the dashboard (never secret values).
get_alert_settingsWho is told about what: frequency, severity, each channel's state and routing — no URLs or secrets.
get_status_pagesStatus pages and client reports: settings only, never a private link or recipients' addresses.
list_heartbeatsA site's heartbeats (cron jobs that check in): state, schedule, last ping, missed check-ins — and the ping URLs on full access.
Configure
update_checkTurn a monitor on or off, or change when it runs: schedule, re-runs on WordPress updates, random extra runs.
pause_monitor_groupPause a whole monitoring group for 1 hour, 24 hours or until resumed, during maintenance; exactly the monitors it switched off come back on.
resume_monitor_groupResume a paused group now; a monitor the plan no longer allows stays off, with the reason.
update_visual_monitorAdd pages of your own by address to the visual monitor, set masks, devices, browsers and the threshold.
update_check_settingsA monitor's own settings: checkout details, extra pages to scan, what the site's AI feature must answer, DKIM selectors, …
add_custom_checkDescribe what must be true on a page; Relvato's AI writes the monitor.
edit_custom_checkGive a custom monitor a new goal or page; the AI writes a new recipe to approve.
reauthor_custom_checkAnswer the AI's question, or have it write a custom monitor's recipe again.
approve_custom_checkApprove a proposed recipe so the custom monitor runs (interactive recipes need an explicit OK).
update_site_settingsPacing, spacing between runs, firewall retry, flaky-monitor recovery, plugin rollback.
update_alert_settingsAlert timing and minimum severity. Who receives alerts and muting stay in the dashboard.
add_heartbeatCreate a heartbeat for a cron job or backup and get the URL the job requests when it succeeds.
update_heartbeatRename, reschedule, pause or resume a heartbeat. Deleting stays in the dashboard.
Run and act
trigger_scanRun a site's monitors now — all, one group, or one monitor — and get the run ids and about how long they'll take (uses the monthly quota).
cancel_queued_runsStop a site's queued runs; the one already going finishes.
request_ai_fixAsk Relvato's AI for a fix suggestion for a failed run (paid plans).
apply_fixWordPress: get the link to apply the one-click fix a run proposes — only that fix — in WordPress; Relvato then re-runs the monitor.
start_safe_updateWordPress: start a vulnerable plugin's update or deactivation, applied in WordPress; Relvato re-checks and offers Undo if anything breaks.
start_quarantineAfter a hack: hourly security runs for 48 hours with plugin updates paused.
extend_quarantineKeep quarantine mode on for another 48 hours.
send_test_alertSend a test alert by email, Slack or webhook.
resume_webhookTurn webhook alerts back on after Relvato paused them for failed deliveries.
report_false_positiveTell Relvato's team a result is wrong; it changes nothing on the run.
Review results
ignore_findingStop a finding from counting on a monitor (undoable). Only when you confirm it's expected.
unignore_findingMake an ignored finding count again.
bring_back_runBring back a failure Relvato AI set aside as likely noise.
accept_visual_changeMake this run's screenshot the new baseline for a page (undoable).
ignore_visual_changeIgnore the area that changed on a page from now on (undoable).
flag_visual_change_as_problemMark a visual change the AI let pass as a failure.
undo_visual_reviewUndo the last visual accept or ignore.
accept_structure_changeAdopt a page's new structure as its baseline (undoable).
ignore_structure_changeIgnore specific element changes on a page (undoable).
undo_structure_reviewUndo the last structure accept or ignore.

In a client that reads an mcp.json, the endpoint is enough — the client asks you to sign in the first time:

{
  "mcpServers": {
    "relvato": {
      "type": "http",
      "url": "https://app.relvato.com/api/mcp"
    }
  }
}

To use an API key instead (a script, a client without sign-in, or your personal workspace while you're in an organization), add the header. A read-only key only gets the read tools:

{
  "mcpServers": {
    "relvato": {
      "type": "http",
      "url": "https://app.relvato.com/api/mcp",
      "headers": {
        "Authorization": "Bearer rlv_your_key"
      }
    }
  }
}

Claude Code plugin

In Claude Code, the Relvato plugin adds the server plus three skills for working from your site's repository. Install it from our marketplace, then run /mcp and sign in:

claude plugin marketplace add Relvato/relvato-mcp
claude plugin install relvato@relvato
  • /relvato:setup adds the site this repository deploys, proves you own it (it can add the verification meta tag to your code), picks monitors and starts the first runs.
  • /relvato:check-after-deploy runs the site's monitors after a deploy, says how long they'll take, and reports what passed and what broke.
  • /relvato:fix-failure reads a failed run, finds the cause in your code, makes the smallest fix with your OK, and runs that monitor again.

Perplexity

On a Perplexity Pro, Max or Enterprise plan, add Relvato as a custom connector: Settings → Connectors → + Custom connector → Remote. Use the endpoint above as the MCP server URL and Streamable HTTP as the transport.

For Authentication, choose API key and paste a Relvato API key (create one under API access in the app; a read-only key only gets the read tools). Perplexity's OAuth option doesn't work with Relvato's sign-in yet: it needs the server to register Perplexity automatically, which Relvato doesn't offer.

Webhooks

The API answers when you ask. To be told the moment a monitor finds a problem, add a webhook: Relvato POSTs a signed JSON event to your URL for every alert (Pro and up). Set up a webhook →

Frequently asked questions

Which plans include API and MCP access?

All of them, including Free — only the per-minute rate limit differs. Free allows 30 requests a minute; paid plans allow more.

How do I get a key?

Sign in and open API access in the app. Choose read-only or full access for each key; you can create several and revoke any of them at any time.

What can a read-only key do?

Everything that only reads: sites, health and uptime, performance, runs and monitors, WordPress updates and activity, quarantine, notifications, fix briefs and alert settings — over REST and MCP. An MCP client connected with a read-only key only sees the read tools. Anything that adds, changes, runs or reviews returns 403 and needs a full-access key.

Do REST and MCP share the rate limit?

Yes. The limit is per account, per minute, counted across both surfaces together.

Does triggering a scan use my quota?

Yes. On-demand scans — over REST or MCP — draw from the same monthly run quota as scheduled runs.

Can an agent add sites and change monitors?

Yes — within your plan's limits, under the same rules as the dashboard. It can't skip ownership: a new site only runs once its WordPress plugin is connected or its domain is verified. It can accept or ignore a result only in ways you can undo, and on WordPress hand you only the fix a run proposes, to apply in WordPress → Relvato. Approving file-integrity, script and DNS changes, stopping quarantine mode, choosing who receives alerts, secrets and deletes stay in the dashboard.

Can an AI assistant connect without an API key?

Yes. Claude, ChatGPT and VS Code can sign in to Relvato instead (any client that supports Client ID Metadata Documents can): add the MCP endpoint and follow the sign-in. It has the same rate limit and plan limits as a key. If you belong to an organization, sign-in connects one of its workspaces; use an API key for your personal one.

Does Relvato work with the WordPress Abilities API?

Both ways. The Relvato plugin registers four abilities (site status, monitors, fix brief and run monitors), so an assistant connected to a WordPress site through the MCP Adapter can use Relvato from there. And site_overview lists the abilities every plugin on a WordPress site registers, as the exposure scan last read them: which ones anyone can run, and which can delete data.

Build on your monitoring data

Create a key and make your first request in under a minute.