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.
| Method | Endpoint | Description |
|---|---|---|
| GET | /api/v1 | Confirms the key and lists the available endpoints. |
| GET | /api/v1/sites | Lists the websites Relvato monitors for you. |
| GET | /api/v1/sites/:id/overview | A site's health verdict: what needs attention, each monitor's latest run and plan usage. |
| GET | /api/v1/sites/:id/settings | A site's settings — never secret values. |
| GET | /api/v1/sites/:id/health | Health now and over time (?range=28|90|182), group briefings, probe uptime. |
| GET | /api/v1/sites/:id/performance | Lab and real-user Web Vitals, what slows the site, the top fixes. |
| GET | /api/v1/sites/:id/activity | The WordPress activity log (?filter, ?search, ?days, ?limit). |
| GET | /api/v1/sites/:id/updates | WordPress auto-update windows, held versions, safe updates, hardening. |
| GET | /api/v1/sites/:id/quarantine | Quarantine mode: the active session, its changes, past sessions. |
| GET | /api/v1/checks/:id | One monitor in full: schedule, its own settings, ignored findings, latest run. |
| GET | /api/v1/notifications | The dashboard's notifications. |
| GET | /api/v1/runs | Recent runs, newest first — optional siteId, checkId, status, before (paging) and limit (1–100). |
| GET | /api/v1/runs/:id | One run in detail: steps, warnings, findings and metrics (compacted when large). |
| GET | /api/v1/runs/:id/fix-prompt | For a run that found a problem: the brief Relvato's own AI answers — stack, what changed, the error and evidence. |
| GET | /api/v1/alert-settings | Who is told about what: frequency, severity, channels and routing. Never URLs or secrets. |
| POST | /api/v1/sites/:id/scan | Queues 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:
| Plan | Requests / min |
|---|---|
| Free | 30 |
| Pro | 120 |
| Business | 600 |
| Agency | 2,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
| Status | Meaning |
|---|---|
200 | Success. |
400 | The request is missing something or can't be done — the message says what. |
401 | Missing, unknown, or revoked API key. |
403 | The key is read-only and the request would change something or run a scan. |
404 | Site or run not found for this account. |
409 | Site is disabled, or you haven't proven you own it yet (domain not verified, or WordPress plugin never connected). |
429 | Rate 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
| Tool | What it does |
|---|---|
| Set up | |
list_sites | List the account's websites and whether each is ready to run monitors. |
add_site | Add a website and get its setup step: connect the WordPress plugin, or verify the domain. |
verify_site | Check that setup step: the plugin connection, or the domain-verification DNS record or meta tag. |
start_monitoring_for_goals | Pick what matters (checkout, security, search, speed, …) and get the monitors that cover it on your plan. |
list_checks | The monitors you can add to a site: what each catches, whether your plan includes it, and which are recommended. |
add_checks | Add monitors to a site; each one reports added, already there, or why not. |
dismiss_recommendation | Stop recommending a monitor for a site, or bring dismissed recommendations back. |
calibrate_site | WooCommerce: read the store again (a product to buy, checkout type, currency) after it changed. |
verify_vitals_beacon | Check the real-user Web Vitals beacon is installed. |
| Read | |
site_overview | Plain-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_health | Pass rate now and over 30 days, the trend over 28–182 days, each group's briefing, and probe uptime with incidents. |
get_performance | Lab and real-user Core Web Vitals, what slows the site down, and the top fixes with steps. |
get_check | One monitor in full: schedule, its own settings (pages, masks, checkout details, …), ignored findings, its recipe if AI-written, latest run. |
list_runs | Recent runs, newest first — by site, monitor or status, with paging. |
get_run | One run in detail: steps, findings, visual comparisons with image links, the fix it proposes, plugins it suggests updating. |
get_fix_prompt | For a run that found a problem: the same brief Relvato's own AI answers, to reason about the likely cause and fixes. |
get_updates | WordPress: auto-update windows and what they updated or rolled back, held versions, safe updates, hardening. |
get_safe_update | Follow a safe plugin update or deactivation until it passes, breaks a monitor or is undone in WordPress. |
get_quarantine | Quarantine mode: available or not, on until when, every change it saw, past sessions. |
get_activity_log | WordPress: sign-ins, failed sign-ins, accounts, updates, settings and file edits, within your plan's history. |
get_notifications | The dashboard's notifications: failing monitors, plugin or beacon problems, paused channels, billing. |
get_site_settings | A site's settings — what an agent may change and what stays in the dashboard (never secret values). |
get_alert_settings | Who is told about what: frequency, severity, each channel's state and routing — no URLs or secrets. |
get_status_pages | Status pages and client reports: settings only, never a private link or recipients' addresses. |
list_heartbeats | A site's heartbeats (cron jobs that check in): state, schedule, last ping, missed check-ins — and the ping URLs on full access. |
| Configure | |
update_check | Turn a monitor on or off, or change when it runs: schedule, re-runs on WordPress updates, random extra runs. |
pause_monitor_group | Pause 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_group | Resume a paused group now; a monitor the plan no longer allows stays off, with the reason. |
update_visual_monitor | Add pages of your own by address to the visual monitor, set masks, devices, browsers and the threshold. |
update_check_settings | A monitor's own settings: checkout details, extra pages to scan, what the site's AI feature must answer, DKIM selectors, … |
add_custom_check | Describe what must be true on a page; Relvato's AI writes the monitor. |
edit_custom_check | Give a custom monitor a new goal or page; the AI writes a new recipe to approve. |
reauthor_custom_check | Answer the AI's question, or have it write a custom monitor's recipe again. |
approve_custom_check | Approve a proposed recipe so the custom monitor runs (interactive recipes need an explicit OK). |
update_site_settings | Pacing, spacing between runs, firewall retry, flaky-monitor recovery, plugin rollback. |
update_alert_settings | Alert timing and minimum severity. Who receives alerts and muting stay in the dashboard. |
add_heartbeat | Create a heartbeat for a cron job or backup and get the URL the job requests when it succeeds. |
update_heartbeat | Rename, reschedule, pause or resume a heartbeat. Deleting stays in the dashboard. |
| Run and act | |
trigger_scan | Run 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_runs | Stop a site's queued runs; the one already going finishes. |
request_ai_fix | Ask Relvato's AI for a fix suggestion for a failed run (paid plans). |
apply_fix | WordPress: 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_update | WordPress: start a vulnerable plugin's update or deactivation, applied in WordPress; Relvato re-checks and offers Undo if anything breaks. |
start_quarantine | After a hack: hourly security runs for 48 hours with plugin updates paused. |
extend_quarantine | Keep quarantine mode on for another 48 hours. |
send_test_alert | Send a test alert by email, Slack or webhook. |
resume_webhook | Turn webhook alerts back on after Relvato paused them for failed deliveries. |
report_false_positive | Tell Relvato's team a result is wrong; it changes nothing on the run. |
| Review results | |
ignore_finding | Stop a finding from counting on a monitor (undoable). Only when you confirm it's expected. |
unignore_finding | Make an ignored finding count again. |
bring_back_run | Bring back a failure Relvato AI set aside as likely noise. |
accept_visual_change | Make this run's screenshot the new baseline for a page (undoable). |
ignore_visual_change | Ignore the area that changed on a page from now on (undoable). |
flag_visual_change_as_problem | Mark a visual change the AI let pass as a failure. |
undo_visual_review | Undo the last visual accept or ignore. |
accept_structure_change | Adopt a page's new structure as its baseline (undoable). |
ignore_structure_change | Ignore specific element changes on a page (undoable). |
undo_structure_review | Undo 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:setupadds 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-deployruns the site's monitors after a deploy, says how long they'll take, and reports what passed and what broke./relvato:fix-failurereads 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.