MCP tool reference
The 343 tools the PBN.LTD MCP server (https://app.pbn.ltd/mcp) offers, in the order tools/list returns them. Each one is the same operation as the REST endpoint named beside it (paths relative to https://app.pbn.ltd/api/v1), with the same permission, the same limits and the same audit trail - see the API reference for the full description of what each field means.
A connection only sees the tools its permissions allow. "Kind" is the behaviour annotation the tool carries: read never changes anything, write does, and DESTRUCTIVE replaces or deletes something that cannot be brought back.
All tools
| Tool | What it does | Permission | Kind |
|---|---|---|---|
| account_limits | Site slots (plan + extra-site add-ons), subscription state and paid-until date, the default per-site limits, every paused (frozen) site with the re… | account:read | read |
| account_me | The account and the key making the call. The cheapest call there is, which makes it a key test. | account:read | read |
| account_usage_refresh | Starts a fresh disk / database / file-count measurement for the account's sites - the usage tab's "Check now", for many sites at once. It returns a… | account:write | write |
| meta_limits | The rate limits and size limits that apply to the key making the call. overridden is true when support has raised or lowered a limit for this key… | kb:read | read |
| billing_invoice_pdf | The PDF of an invoice or credit note of this account (Content-Type application/pdf). | billing:read | read |
| billing_invoices | Every payment and refund of the account, newest first. document is the invoice / credit note when one has been issued, with its number for the PDF. | billing:read | read |
| billing_summary | Subscription (state, plan, paid-until date, days left, payment method), unpaid state with the date sites are removed if it stays unpaid, site slots… | billing:read | read |
| sites_create | Creates a site exactly as the Add new site form does - same validation, same slot limit, same checks - for every type: WordPress, Static HTML, PHP… | sites:write | write |
| sites_create_options | The fields the Create site form accepts for this account right now, with their choices (site types, CDNs, PHP versions, templates, blueprints, grou… | sites:write | read |
| sites_delete | Deletes the site for good (files, database, DNS zone, CDN), exactly like Delete site in the panel. It ALSO deletes the email of the site's domain o… | sites:delete | DESTRUCTIVE |
| sites_edit_options | The fields the Edit site form offers for THIS site right now (they depend on type, CDN and state), with choices and current values. | sites:write | read |
| sites_get | Everything the site page shows: state, URL, settings, why it is paused (freeze.reasons), nameserver status (current vs required, pointed, autopilot… | sites:read | read |
| sites_list | The same search, filters and order as the sites list in the panel. total is the number of matching sites. A key restricted to some sites only see… | sites:read | read |
| sites_malware | What the nightly malware scan (and any "scan again") found on this site, in the same words as the site's Malware scan tab: open findings, files in… | sites:read | read |
| sites_malware_rescan | Starts a malware scan of this site now (usually one to five minutes); the site's malware report shows it as last_rescan. One scan per site at a tim… | sites:write | write |
| sites_update | Change any setting the Edit site form offers: name, domain, PHP version, HTTPS, www, group, admin e-mail, login URL, auto-updates, mailbox. Only th… | sites:write | write |
| cleaner_get | Site Cleaner for this site: whether the add-on is active, the last scan (what can be removed and how much it saves), the running job, recent jobs (… | sites:read | read |
| cleaner_run | Runs Site Cleaner. scan lists unused plugins/themes, junk files and database clutter (free). clean removes the selected items after taking a ba… | sites:write | write |
| cleaner_schedule | Sets automatic cleaning for the site (needs the add-on to actually clean). | sites:write | write |
| health_get | The online badge (online / offline / slow / paused... with the reason) and, for application sites, the last integrity check (V1 config lines, admin… | sites:read | read |
| health_integrity_check | Checks the application now (WordPress, Joomla, Drupal, PrestaShop, OpenCart, Grav, MediaWiki): V1's config lines, the site URL, the admin account,… | sites:write | write |
| health_recheck | Probes the home page again now (same probe and recording as the platform's monitor) and asks the server why if it fails. Asynchronous: follow the j… | sites:write | write |
| health_repair | "Repair site": checks, repairs everything repairable (backups first, on the server), checks again. You get an e-mail listing what was repaired. | sites:write | write |
| sites_admin_login | A single-use login link to the site's admin (WordPress wp-admin, Joomla, Drupal, PrestaShop, OpenCart, Grav, MediaWiki), valid for 60 seconds - the… | sites:login | write |
| sites_php_version | Changes only the site's PHP version. The web server is reconfigured in the background (a job is returned). | sites:write | write |
| sites_purge_cache | Clears the CDN cache of both hostnames (as Purge CDN cache in the panel). The site must be live. | sites:write | write |
| sites_reinstall | Installs the site again from scratch (as Reinstall in the panel) - the current files and database are replaced. Refused while the site is busy, swi… | sites:write | DESTRUCTIVE |
| sites_temp_unfreeze | A site paused ONLY for a usage limit (disk / database / files) comes back for 30 minutes so you can clean it up (3 times per site per day). At the… | sites:write | write |
| sites_usage | The Usage & add-ons tab: disk, database and file-count use against the limits (plan + add-ons), what is over, CDN bandwidth for metered CDNs, and t… | sites:read | read |
| sites_usage_refresh | Starts a fresh measurement of disk, database and files (the usage tab's "Check now"). Returns the current figures with busy=true; the site's usage… | sites:write | write |
| dns_check_now | The site page's "Check again now" button, for a site that is waiting for its nameservers or finishing its CDN: reads the nameservers the registry r… | dns:write | write |
| dns_create | Adds a record with the panel's own validation. It is published to the site's DNS provider within a minute or two (follow the job); your records are… | dns:write | write |
| dns_delete | Deletes a record; it is removed at the DNS provider within a minute or two. | dns:write | DESTRUCTIVE |
| dns_list | The site's own DNS records (the DNS records tab), and the publishing state: the DNS provider, when the records were last published and any record t… | dns:read | read |
| dns_update | Changes a record; send only the fields that change. | dns:write | DESTRUCTIVE |
| sites_nameservers | The nameservers the domain must use (required), what it uses now (current, checked daily), whether it is pointed, whether the DNS zone expired at t… | dns:read | read |
| backups_create | Takes a full backup (files + database) now, as Create backup in the panel. A job is returned; the backup reads Ok when it is done. | backups:write | write |
| backups_delete | Deletes a backup. A backup that a blueprint uses cannot be deleted. | backups:write | DESTRUCTIVE |
| backups_download | A temporary link to download the backup archive (tar.gz) - valid about 4 hours. | backups:read | read |
| backups_get | One backup of the site. | backups:read | read |
| backups_list | The site's backups, newest first (automatic daily ones, manual ones and uploaded ones). | backups:read | read |
| backups_restore | Replaces the site's files and database with the backup (as Restore in the panel). Refused while the site is busy, switched off or the plan has expi… | backups:write | DESTRUCTIVE |
| files_delete | Deletes a file, or a folder (with recursive=true when it is not empty). There is no undo - take a backup first for anything important. | files:write | DESTRUCTIVE |
| files_list | Folders first, then files; up to 5,000 entries. Symbolic links are listed (type "link") but never followed. Available under the same rule as the Fi… | files:read | read |
| files_mkdir | Creates a folder (and any missing parent folders). | files:write | write |
| files_move | Renames or moves a file or folder inside the site folder. | files:write | write |
| files_read | Returns a file of up to 5 MB (the account's limits give the exact size). encoding=raw streams the bytes directly. | files:read | read |
| files_stat | Type, size, modification time and mode of one path. | files:read | read |
| files_write | Writes a file of up to 25 MB atomically (a temporary file renamed into place), owned by the site's web server user. Refuses to write through symbol… | files:write | write |
| logs_access | Requests that reached the web server for this site's hostnames, newest last. The client IP is the visitor as the CDN reported it. 30 fetches per 10… | logs:read | read |
| logs_errors | Recent PHP and web server errors of THIS site (the Error log tab): last 7 days, grouped, sanitised (paths shown relative to the site folder, secret… | logs:read | read |
| tickets_create | Opens a ticket (support is e-mailed as for a panel ticket). The ticket limits apply: at most 2 open tickets at a time (409 ticket_limit). | tickets:write | write |
| tickets_get | A ticket with every public message (yours and support's). can_reply says if you may add a message now (ticket limits: one message before support an… | tickets:read | read |
| tickets_list | Your tickets, newest first. | tickets:read | read |
| tickets_queues | The categories (queues) a ticket can be opened in. | tickets:read | read |
| tickets_reply | Adds your message to the ticket (support is notified). One message until support answers. | tickets:write | write |
| kb_article | One article as plain text and as sanitised HTML, with related articles. | kb:read | read |
| kb_search | The dashboard's knowledge-base search (keyword + meaning). Every key may use it. | kb:read | read |
| sites_kb_suggestions | Knowledge-base articles that fit what is going on with this site right now (why it is paused, nameservers not pointed, offline...), with app and pu… | sites:read | read |
| jobs_get | The live status of a job: running, succeeded or failed, with a message. Each read counts against the rate limit like any call. | account:read | read |
| jobs_list | Jobs the API started for this account, newest first. | account:read | read |
| autopost_article_action | The same buttons as an article's page. | content:write | write |
| autopost_campaign_create | Creates an auto-posting campaign exactly as the New campaign page does (same fields, same checks). It writes with one of your AI keys, so add a key… | content:write | write |
| autopost_campaign_delete | Deletes the campaign. Articles not written yet are cancelled; articles already published stay on your sites. | content:write | DESTRUCTIVE |
| autopost_campaign_form | Every field a campaign takes when it is created or changed, from the page's own form: label, whether it is required, the allowed values and the hel… | content:read | read |
| autopost_campaign_update | Changes only the fields you send (the rest stay as they are), with the Edit campaign page's checks. Sending site_ids replaces the campaign's sites. | content:write | write |
| autopost_key_delete | Removes the key from your account (nothing changes at the provider). Campaigns using it are paused until you choose another key. | content:write | DESTRUCTIVE |
| autopost_key_test | Asks the provider whether the key works (the page's Test button). A key that works again resumes the campaigns that were paused because of it. | content:write | write |
| autopost_keys | The keys to your own AI accounts that campaigns write with: provider, whether the last test worked and how many campaigns use each. The key itself… | content:read | read |
| autopost_models | The text and picture models on offer. A campaign's model must belong to the provider of the key it writes with. | content:read | read |
| autopost_overview | Whether auto posting is available on the account (and why not), how many campaigns and AI keys it has and how many articles are in each state. | content:read | read |
| campaigns_get | One campaign with its last ten runs. | content:read | read |
| campaigns_list | The AI auto-posting campaigns on the account: what they write, when they run next and how many articles they have made. | content:read | read |
| campaigns_status | Pauses a campaign or starts it again. A campaign paused by our staff or by a problem with an AI key cannot be resumed from here - fix the cause first. | content:write | write |
| campaigns_write_now | Asks a campaign to write and publish now, the same as the "Write now" button. Returns the run. | content:write | write |
| content_create | Writes the post and puts it on the site. Works for every site type: WordPress, Joomla, Drupal, PrestaShop, OpenCart, Grav and MediaWiki get a nativ… | content:write | write |
| content_get | One post in full, with its text and the history of what happened to it. | content:read | read |
| content_list | The latest posts the site itself reports, and every post this account has written for it through PBN.LTD (including ones still being written or wai… | content:read | read |
| content_media | Puts a picture or file on the site and gives back the address to use in a post. On WordPress it goes into the media library; on every other site ty… | content:write | write |
| content_options | Before writing anything, ask this: it says how a post appears on this site type, which fields it supports (featured picture, categories, tags, auth… | content:read | read |
| content_queue | Every post on the account that is queued, being written, waiting for approval, scheduled, publishing, published, failed or cancelled - newest first… | content:read | read |
| content_remove | Removes a published post from the site, or cancels one that has not gone out yet. There is no undo. | content:write | DESTRUCTIVE |
| content_update | Changes a post that has not gone out yet. A post that is already on the site cannot be edited from here - remove it and write a new one. | content:write | write |
| runs_get | One run of a campaign and every article in it. | content:read | read |
| code_check | Runs PHP's own syntax check over a file or every .php file in a folder, in the exact PHP version the site runs. Do this before switching a plugin o… | sites:read | read |
| extdeploy_connection_remove | Forgets the account's credentials here. Nothing is changed at the provider. Refused while sites still publish through it. | extdeploy:write | DESTRUCTIVE |
| extdeploy_connection_test | Asks the provider whether the stored credentials still work (the page's Test button). | extdeploy:write | write |
| extdeploy_connections | The accounts at GitHub, GitLab, Cloudflare, Netlify, Vercel, Render, AWS or Azure you have connected, and whether each still works. The credentials… | extdeploy:read | read |
| extsites_deploy | Publishes the site to its provider again, or rolls it back to a deploy that is already there. This replaces what is live at that provider. No files… | sites:write | DESTRUCTIVE |
| extsites_domain_add | Attaches the domain at the provider and returns the DNS records to publish wherever that domain's DNS is answered. | extdeploy:write | write |
| extsites_domain_refresh | Asks the provider again whether the domain's DNS and certificate are in place. | extdeploy:write | write |
| extsites_domain_remove | Detaches the domain at the provider (its DNS records are yours to remove). | extdeploy:write | DESTRUCTIVE |
| extsites_get | One site on a third-party host, as its page shows it: state, address, source, build settings, what its provider supports (can), its custom domain… | extdeploy:read | read |
| extsites_history | The recent deploys of one external site, newest first - what to pass to a rollback. | sites:read | read |
| extsites_list | The sites this account publishes to outside PBN.LTD (GitHub Pages, Cloudflare Pages, Netlify, Vercel and the rest), with their address and the stat… | sites:read | read |
| extsites_log | What happened during one deploy, line by line (the page's "Log"). | extdeploy:read | read |
| extsites_remove | Stops managing the site here. With delete_remote the project is deleted at the provider too, and whatever it serves goes offline. | extdeploy:write | DESTRUCTIVE |
| files_upload_archive | Unpacks a zip of a built website (or a plugin or theme) into the site. Every file goes through the same path a single upload uses, so the same rule… | files:write | write |
| plugins_delete | Switches a plugin off and deletes its files. There is no undo; the plugin's own data in the database is removed the way the plugin asks for. | sites:write | DESTRUCTIVE |
| plugins_install | Installs a plugin on a WordPress site, from wordpress.org or from a zip you send. A plugin that is on our blocked list is refused. Activating a plu… | sites:write | DESTRUCTIVE |
| plugins_list | Every plugin installed on a WordPress site, whether it is active, its version and whether an update is waiting. | sites:read | read |
| plugins_state | Activates or deactivates a plugin. Activating can take a site down; deactivating is how you put it back. | sites:write | DESTRUCTIVE |
| sites_set_home | Makes a page the front page of the site. On WordPress this sets the site's own "front page" setting; on the other site types the file you name is c… | sites:write | DESTRUCTIVE |
| sites_verify | Fetches a page of the site and says exactly what came back: the HTTP status, how long it took, its size, its title and any redirect. The page is al… | sites:read | read |
| themes_activate | Switches the site to another theme. This changes how every page looks at once; switching back undoes it. | sites:write | DESTRUCTIVE |
| themes_list | Every theme on a WordPress site and which one is in use. | sites:read | read |
| backlinks_tracker_get | One backlink domain: each distinct link to it (address + text) with how many times, posts and sites carry it, and which of your sites each address… | sites:read | read |
| backlinks_tracker_link_change | The bulk link editor's "Edit": the link is searched and replaced in the posts of every site that carries it (one job per site, in each site's opera… | content:write | write |
| backlinks_tracker_link_remove | The bulk link editor's "Delete": the whole link, its text too, is removed from the posts of every site that carries it (one job per site). It canno… | content:write | DESTRUCTIVE |
| backlinks_tracker_list | The backlink tracker: every domain the posts on your sites link to, with how many links, posts and sites carry them (your_site_id when the domain… | sites:read | read |
| seo_metrics_site | The same figures as the site's SEO metrics charts tab: Trust Flow, Citation Flow, backlinks and referring domains at every reading, with the change… | sites:read | read |
| registrars_automatic | Switches automatic nameserver updates for this connection on or off (the page's toggle, but with an explicit value, so repeating the call is safe). | registrars:write | write |
| registrars_connect | Checks the key with the registrar FIRST and only saves a working account (same as the Registrar connections page). We then read the domain list; si… | registrars:write | write |
| registrars_disconnect | Deletes the connection and its stored keys (the nameserver update history is kept). Nothing changes at the registrar. Needs "confirm": true. | registrars:write | DESTRUCTIVE |
| registrars_domain_check | The question the add-a-site form asks while you type: is this domain in one of your connected accounts (or registered with Zinn Digital), so we poi… | registrars:read | read |
| registrars_get | One connection, with the domain names we can see in that registrar account (up to 1,000). | registrars:read | read |
| registrars_history | Every nameserver change we made (or tried) at your registrars: what the registrar had before (the value to go back to), what we set, the result, an… | registrars:read | read |
| registrars_list | Your connected registrar accounts: status, how many domains we can see in each, and whether automatic nameserver updates are on. The keys are never… | registrars:read | read |
| registrars_providers | Every registrar we can set nameservers at, with the steps to create an API key there, the IP addresses to allow (when the registrar needs an allow-… | registrars:read | read |
| registrars_refresh | Reads the domain list of this registrar account again (about a minute). Once every 2 minutes. | registrars:write | write |
| registrars_site_status | What the site page says about automatic nameserver updates for this site: whether we set its nameservers for you, through which registrar, what hap… | registrars:read | read |
| registrars_site_update_ns | The site page's "Update nameservers at my registrar" button: sets the nameservers this site needs at the registrar that holds its domain, now, and… | registrars:write | write |
| registrars_test | Asks the registrar whether the stored key still works and records the answer on the connection. | registrars:write | write |
| registrars_update_waiting | Sets the nameservers now for every site waiting for DNS whose domain is in a connected account (the page's "update all" button). Paced to stay insi… | registrars:write | write |
| security_bots | The same as the two bot switches on the Security tab. The change is saved at once and applied at Cloudflare within a few minutes (status reads "a… | security:write | write |
| security_email_protection | The CDN hides e-mail addresses on the site's pages from spam bots (on by default): each address becomes a /cdn-cgi/l/email-protection link plus a s… | security:write | write |
| security_get | The same as the site's Security tab: whether "I'm Under Attack" is on (and when it switches itself off), the site's firewall rules and rate-limitin… | security:read | read |
| security_rule_add | Adds a firewall rule (or a rate-limiting rule) to the site at Cloudflare, within the plan's limit. Returns every rule of the site. | security:write | write |
| security_rule_delete | Removes one rule from the site at Cloudflare. | security:write | DESTRUCTIVE |
| security_rule_state | Rules run in order: the first that matches decides. | security:write | write |
| security_rule_update | Replaces one rule (same shape as when adding it). Only rules made on this dashboard can be changed here. | security:write | write |
| security_under_attack | Every visitor gets a short browser check before the site loads while it is on - use it while the site is being hammered, then switch it off. | security:write | write |
| wayback_archive | The days the public web archive has a copy of the domain's home page on, as the calendar shows. The first look-up of a domain reads the archive in… | wayback:read | read |
| wayback_get | One restore: its progress and, while it is "planned" (ready to order), a sample of the pages that would be rebuilt and your existing sites it could… | wayback:read | read |
| wayback_order | Uses ONE restore credit and starts the rebuild (restore credits are bought in packs on the Wayback page; paying one restore by card through FastSpr… | wayback:write | write |
| wayback_start | Reads that day's copy from the archive and works out what would be rebuilt. Nothing is charged: the restore waits at "planned" until you order it. | wayback:write | write |
| wayback_status | Your restore credits, the price of a restore of each kind (what the page would charge, with your VAT), how many new sites your plan still has room… | wayback:read | read |
| hourly_backups_download_prepare | Builds a .tar.gz of that restore point (files and database), as the tab's Download button. The site's hourly backups show the download as "ready" w… | backups:read | write |
| hourly_backups_get | The same as the hourly part of the site's Backups tab: whether hourly backups are on for this site (and paid until when), when the next one runs, e… | backups:read | read |
| hourly_backups_now | Takes a restore point now, as the "Back up now" button (once per site every 10 minutes). It appears among the site's hourly backups within a minute… | backups:write | write |
| hourly_backups_restore | Rolls the site back to exactly how it was at that restore point, as the tab's "Restore this backup" dialog. A backup of how the site looks now is t… | backups:write | DESTRUCTIVE |
| mail_alias_delete | Removes one alias, forwarder or the catch-all. No mailbox or mail is touched. | mail:write | DESTRUCTIVE |
| mail_alias_save | Saves one alias, forwarder or the catch-all (the same checks as the Mail tab). | mail:write | write |
| mail_get | The same as the site's Mail tab: whether PBN.LTD Mail is set up (where = "external" when the domain's mail is at an outside provider), whether it… | mail:read | read |
| mail_mailbox_create | Creates a mailbox within what the site may have (402 when an extra mailbox has to be bought first - in the Mail tab). Returns the mail state; the p… | mail:write | write |
| mail_mailbox_delete | Deletes the mailbox with everything in it. The site's first (included) mailbox can only go once it is the last one. | mail:write | DESTRUCTIVE |
| mail_mailbox_password | Sets a new password (yours, or a generated one read with Show in the Mail tab). Every phone and mail program using the mailbox must then be given t… | mail:write | write |
| mail_out_of_office | The same as the out-of-office form on the Mail tab. | mail:write | write |
| mail_setup | The Mail tab's "Set up mail": makes the site's mail account and its signing keys and publishes its records where we answer DNS for the domain. | mail:write | write |
| rank_domain | The domain, each Google version it is tracked in (country, language, device), and every keyword in each with its current position (null = not in th… | rank:read | read |
| rank_domain_add | Starts tracking a domain (hosted with us or anywhere else). Then add a Google version and keywords. Adding a domain you track already returns it. | rank:write | write |
| rank_domain_remove | Stops tracking the domain and all its keywords. The history is kept, but re-adding the domain does not restart its keywords - they have to be added… | rank:write | DESTRUCTIVE |
| rank_domains | Every domain you track, with its keyword count, average position and how many keywords are in the top 10 and top 3. | rank:read | read |
| rank_group_add | Which Google to check the keywords in: country or city, language and device. Your plan sets how many per domain. Adding one that exists returns it. | rank:write | write |
| rank_keyword | The keyword and every completed check in the period: the position (null = not in the first 100 results) and the page of yours that ranked. | rank:read | read |
| rank_keyword_check | Asks for an extra check of this keyword now (results usually within the hour). The same bounds as the button: once per keyword in 24 hours, a daily… | rank:write | write |
| rank_keyword_remove | Removes the keyword AND its position history (the same as the Remove button). Needs "confirm": true. | rank:write | DESTRUCTIVE |
| rank_keywords_add | Adds keywords to a Google version with the panel's own rule: what fits inside your plan is added, the rest is listed in not_added (add a keyword pa… | rank:write | write |
| rank_languages | The language codes to use for a Google version. | rank:read | read |
| rank_locations | The location codes to use for a Google version. Up to 40 matches. | rank:read | read |
| rank_plans | The plans (keywords, Google versions per domain, cadence), the extra-keyword pack and the extra Google versions pack with their live prices (US dol… | rank:read | read |
| rank_status | Whether rank tracking is on this account, the plan, how many keywords it covers and how many are tracked, how often they are checked (weekly or dai… | rank:read | read |
| aivis_brand | The brand, every prompt with the latest answer from each AI engine, the domains cited instead of you, the daily visibility trend and starter prompt… | aivis:read | read |
| aivis_brand_add | Starts tracking a brand (any domain, hosted with us or not). Then add prompts. Adding one you track already returns it. | aivis:write | write |
| aivis_brand_remove | Stops tracking the brand and all its prompts. The history is kept, but re-adding the brand does not restart its prompts. Needs "confirm": true. | aivis:write | DESTRUCTIVE |
| aivis_brand_update | The next round of answers uses the new settings. | aivis:write | write |
| aivis_brands | Every brand (domain) you track, with its visibility numbers. | aivis:read | read |
| aivis_plans | The plans and the extra-prompt pack with their live prices (US dollars a month, before VAT), and the AI engines a prompt can be asked of (their key… | aivis:read | read |
| aivis_prompt | What each AI engine answered last time (the full answer text, as on the prompt page) and the last 30 results. | aivis:read | read |
| aivis_prompt_check | Asks the prompt's AI engines again now (answers usually within the hour). The same bounds as the button: once per prompt in 24 hours and a daily nu… | aivis:write | write |
| aivis_prompt_engines | Sets which AI engines the next round asks for this prompt. | aivis:write | write |
| aivis_prompt_remove | Removes the prompt AND its answers history (the same as the Remove button). Needs "confirm": true. | aivis:write | DESTRUCTIVE |
| aivis_prompts_add | Adds prompts with the panel's own rule: what fits inside your plan is added, the rest is listed in not_added (add a prompt pack or move up a plan).… | aivis:write | write |
| aivis_status | Whether AI visibility is on this account, the plan, how many prompts it covers and how many are tracked, how often they are asked, the number of tr… | aivis:read | read |
| index_add | Adds pages with the panel's own rules: a page that would pass the plan's URL limit or its checks a month is not added (see not_added). The first ch… | index:write | write |
| index_check | Checks the page immediately (usually 1-2 seconds). Uses one check of the monthly allowance; at most once an hour per page and a daily number per ac… | index:write | write |
| index_delete | Stops tracking. Its history is kept and comes back if you add the page again. | index:write | DESTRUCTIVE |
| index_get | The page and up to 100 of its most recent checks. | index:read | read |
| index_list | Every page you track, newest first, with its current status. | index:read | read |
| index_status | The plan, how many pages may be tracked, checks a month included and used, the checks your chosen frequencies plan for, and how many tracked pages… | index:read | read |
| index_update | Refused when the new frequency would pass the plan's checks a month. | index:write | write |
| redis_site | Whether Redis is on for this site: "queued" while a switch is being applied (up to a minute), then "on" or "off"; "error" with the reason in detail. | redis:read | read |
| redis_status | Whether Redis is on for the account (plan, memory per server, paid until) and its state on each of your sites. Buying, renewing and cancelling are… | redis:read | read |
| redis_switch | The same as the site's Redis switch. WordPress sites get the object cache installed and configured for them (and removed again when switched off, t… | redis:write | write |
| firewall_get | The same as the site's "Website firewall" tab: whether the firewall is on for this site, and the requests it recently refused (when, what was asked… | sites:read | read |
| seo_quote | The exact price the checkout would charge for a NEW order of these tools (before any existing subscription is taken into account), VAT for your acc… | seo:read | read |
| seo_subscription | What your SEO tools order covers today (tools, plans, period, discounts) and the next period if it is already paid. Tools bought on their own (not… | seo:read | read |
| seo_tools | Every SEO tool, whether it needs hosting, whether your account has it, its plans and pack (prices per month before VAT, from the live price rows),… | seo:read | read |
| research_domain | Ranked keywords (top 100 by traffic), estimated monthly traffic, position spread, top pages and competitors. Uses 1 credit - or none if this accoun… | research:run | write |
| research_gap | Keywords the competitors rank for and your domain does not, most-shared first. One credit per competitor not asked in the last 14 days. | research:run | write |
| research_keywords | Up to 100 keywords, by search volume. Uses 1 credit - or none if this account asked the same question in the last 30 days. | research:run | write |
| research_list | The keywords in one of your lists, with their saved metrics. | research:read | read |
| research_lists | Your saved keyword lists. | research:read | read |
| research_local | Monthly searches for each keyword in that area. Uses 4 credits (or none if asked before). | research:run | write |
| research_markets | The countries (location_code) and languages (language_code) keyword research and domain overview answer for. Free. | research:read | read |
| research_status | For keyword research and domain overview: whether it is on the account, the plan, credits a month and credits used this month. | research:read | read |
| alerts_create | Domains matching it today are the starting point, not news: from now on you get an e-mail when a NEW one matches. | vetting:write | write |
| alerts_delete | Deletes the saved search and stops its e-mails. What it already told you about is forgotten with it. | vetting:write | DESTRUCTIVE |
| alerts_list | Every aged-domain search you saved, what it looks for and how many domains match it now. | vetting:read | read |
| alerts_matches | The aged domains this saved search matches at this moment, with the price you would pay and a link to each listing. | vetting:read | read |
| vetting_get | The whole report: the verdict, every reason, the key numbers, the anchor texts, the link and traffic history and what the site was in the web archive. | vetting:read | read |
| vetting_list | Every vetting report this account has run, newest first, with its verdict and score. | vetting:read | read |
| vetting_run | Runs a full report and returns it. Spends one report credit, unless you already vetted this domain recently - then the report you already have come… | vetting:write | write |
| vetting_status | How many report credits this account holds, how many reports it has run, and the prices. | vetting:read | read |
| footprint_check | Queues a check. Results are usually ready within a few minutes, in the footprint report it returns. Uses one of your monthly "Check now" runs; the… | footprint:write | write |
| footprint_get | The report with every finding: what it is, what it means, which of your sites it affects and how to fix it. A finding marked owner: platform is o… | footprint:read | read |
| footprint_runs | Every finished report, newest first. | footprint:read | read |
| footprint_site_add | Adds a site hosted elsewhere. If you have no slots left this answers 422 naming the pack that would cover it - nothing is bought automatically. | footprint:write | write |
| footprint_site_remove | Removes it and frees its slot straight away. | footprint:write | DESTRUCTIVE |
| footprint_sites | The sites hosted elsewhere that are included in your checks. Sites hosted with us are always included and never use a slot. | footprint:read | read |
| footprint_status | Your plan, how often checks run, how many external sites you may hold and how many you are using, and the score from the most recent check. | footprint:read | read |
| audit_get | The audit with every finding: what it is, what it means, which pages it affects and how to fix it. A finding with source: server comes from your… | audit:read | read |
| audit_list | Your finished audits, newest first. | audit:read | read |
| audit_pages | Every page the crawl fetched, with what was measured on it. | audit:read | read |
| audit_start | Queues an audit; results are usually ready within a few minutes, in the audit it returns. A site whose ownership you have not proved is crawled sha… | audit:write | write |
| audit_status | Your plan, audits a month included and used, the page cap per audit, and your most recent audit. | audit:read | read |
| audit_verification | The three ways to prove a site is yours. Any one of them is enough, and a site hosted with us needs none. | audit:read | read |
| audit_verify | Looks for the DNS record, the meta tag and the file, in that order. | audit:write | write |
| backlinks_add_domain | Refused when it would pass the plan's domain limit, or when the chosen cadence would plan more refreshes a month than the plan includes. | backlinks:write | write |
| backlinks_add_links | Adds links with the panel's own rules: anything past the plan's link limit is not added (see not_added). Checking a link costs nothing - we fetch t… | backlinks:write | write |
| backlinks_check_link | Fetches the page immediately and re-reads the link. Costs nothing and uses no allowance; at most once every 10 minutes per link. | backlinks:write | write |
| backlinks_delete_domain | Stops watching the profile: no more scheduled refreshes, and it no longer counts towards your plan. Nothing is charged. | backlinks:write | DESTRUCTIVE |
| backlinks_delete_link | Stops watching. Its history is kept and comes back if you add the link again. | backlinks:write | DESTRUCTIVE |
| backlinks_domain | The profile with its top referring domains, anchors, linked pages and monthly history. Reads what is stored - it never spends a refresh. | backlinks:read | read |
| backlinks_domains | Every domain whose backlink profile you watch, most recently added first, with its latest totals (backlinks, referring domains, referring domains w… | backlinks:read | read |
| backlinks_link | The link and up to 100 of its most recent checks. | backlinks:read | read |
| backlinks_links | Every link you watch, problems first. | backlinks:read | read |
| backlinks_refresh_domain | Uses one profile refresh of the monthly allowance, unless a recent shared snapshot of that domain can be reused, in which case it costs nothing. At… | backlinks:write | write |
| backlinks_status | The plan, how many links and profiles may be watched, profile refreshes a month included and used, the refreshes your chosen cadences plan for, and… | backlinks:read | read |
| backlinks_update_link | Sets how often this one link is re-checked (daily, weekly or monthly) and schedules its next check to match. The answer is the link with its new fr… | backlinks:write | write |
| mentions_add | Refused when it would pass the plan's brand limit, or when the chosen schedule would plan more checks a month than the plan includes. | mentions:write | write |
| mentions_brand | Reads what is stored - it never spends a check. | mentions:read | read |
| mentions_brands | Every brand phrase you track, most recently added first, with its mention counts by sentiment, visibility and when it was last checked. Reads what… | mentions:read | read |
| mentions_check | Uses one check of the monthly allowance, unless a recent shared snapshot of that phrase can be reused, in which case it costs nothing. At most once… | mentions:write | write |
| mentions_delete | Stops listening. Everything already found is kept. | mentions:write | DESTRUCTIVE |
| mentions_list | Newest first. | mentions:read | read |
| mentions_status | The plan, how many phrases may be tracked, checks a month included and used, the checks your chosen schedules plan for, and the overall sentiment s… | mentions:read | read |
| mentions_update | Sets how often we search for new mentions of this phrase. Refused with validation_failed when the new pace would plan more checks a month than your… | mentions:write | write |
| local_add_keywords | Adds keywords to one of your towns. Refused before anything is spent if the month would not fit inside your plan. | local:write | write |
| local_business | One business: its profile facts, the towns it is searched from, and every change we have seen to its listing. | local:read | read |
| local_businesses | Every business you track, with the facts of its Google business profile as we last read them and how it is doing in the map results. | local:read | read |
| local_check_now | Puts those keywords at the front of the queue. They are checked within a few minutes and each one uses a check from this month's allowance. | local:write | write |
| local_history | Every check we have made of that keyword, so you can chart it yourself. | local:read | read |
| local_keywords | Every keyword you track, where it sits in the map results and in the ordinary results, and how it moved since the check before. | local:read | read |
| local_status | Your plan, what it covers, how much of this month's checks you have used, and how your businesses are doing on the map overall. | local:read | read |
| reports_clients | Every client you report on, what of theirs a report covers and when the next one is due. | reports:read | read |
| reports_get | The whole report: every section as it was frozen when it was made, the plain "what changed" summary, and the share link while it is live. | reports:read | read |
| reports_list | Every report made on this account, newest first. The share link itself is only returned by the single-report endpoint. | reports:read | read |
| reports_make | Builds the report from what the account has already collected - it never spends any of your search credits - and returns it with its share link. | reports:write | write |
| reports_revoke | The link stops working at once for everybody who has it. The report itself is kept and you can turn the link back on from the panel. | reports:write | DESTRUCTIVE |
| reports_status | Your plan, how many clients and reports it covers and how many you have used this month. | reports:read | read |
| updates_holds | Every plugin update we held back across your sites because it stopped the site working (the same list as the "Held plugin updates" page). "holding"… | updates:read | read |
| updates_site_holds | The held plugin updates of one site (the site page's "Plugin updates" section). | updates:read | read |
| updates_try_again | The "Try again" button. Nothing is installed now: the site's next update run tries this version again, loading the site before and after. If it sto… | updates:write | write |
| extradb_cancel | Cancelling stops the renewal reminders and removes the database (full copy first) when its paid months end; nothing more is charged. "cancel": fals… | extradb:write | DESTRUCTIVE |
| extradb_create | Adds an extra database where your account gets them free of charge (created in a minute or two). Every other account buys one in the browser: this… | extradb:write | write |
| extradb_delete | Removes the database now. A full copy is taken first and kept for the days in removed_copy_kept_days (ask support to put it back). Needs "confirm":… | extradb:write | DESTRUCTIVE |
| extradb_get | One extra database, with its restore points (its own daily backups, newest first; each id is a point the database can be restored to). | extradb:read | read |
| extradb_list | Every extra database in your account (all sites), with its state, size, paid period and last backup. Credentials are shown on the site's Extra data… | extradb:read | read |
| extradb_restore | Puts the database back as it was at the chosen daily backup: everything written since is replaced. A copy of the database as it is now is taken fir… | extradb:write | DESTRUCTIVE |
| extradb_site | Whether this site can have extra databases (every site type with a database), the price per database per month (before VAT, from the live price row… | extradb:read | read |
| staging_access | The username and password that protect the staging site, to share it with someone who has no account (the same "Password to share" the staging page… | staging:write | write |
| staging_cancel | Ends the staging add-on now and removes EVERY staging site of the account. Months already paid are not refunded. Your live sites are not affected.… | staging:write | DESTRUCTIVE |
| staging_copy_from_live | Copies the live site over the staging copy (files and/or database), replacing any changes made on staging. The live site is not changed. Needs "con… | staging:write | DESTRUCTIVE |
| staging_copy_to_live | Publishes the staging copy: OVERWRITES the live site's files and/or database with the staging ones. An undo copy of what it replaced is kept for 7… | staging:write | DESTRUCTIVE |
| staging_create | Makes a private staging copy of one of your live sites (files and database). It takes a few minutes for a typical site; the staging site reads "rea… | staging:write | write |
| staging_delete | Removes the staging copy (its files, database and address). The live site is not touched and the slot is free again straight away. Needs "confirm":… | staging:write | DESTRUCTIVE |
| staging_eligible | Your live sites and, for each, whether a staging copy can be made of it now and, when not, the reason in plain words (only WordPress and Static HTM… | staging:read | read |
| staging_get | One staging site with its last ten jobs (create, copy to live, copy from live, remove). | staging:read | read |
| staging_list | Every staging site in your account that exists now (being created, ready, copying, paused, needs attention or being removed), newest first, with it… | staging:read | read |
| staging_sftp | SFTP for one staging site. The first call switches it on and returns the login WITH a new password; later calls return the login with "password": "… | staging:write | write |
| staging_status | Whether staging is on for your account, until when it is paid, how many staging sites you have and may have at once, the size limits, and the month… | staging:read | read |
| turnstile_disable | Takes the plugin off the site first (read back), then deletes the widget. Your forms are no longer protected by the bot check. Needs "confirm": tru… | turnstile:write | DESTRUCTIVE |
| turnstile_enable | Switches the bot check on for this site, or saves new settings when it is already on. We create the Turnstile widget, install our small WordPress p… | turnstile:write | write |
| turnstile_get | What the site's Turnstile tab shows: whether the bot check can be used here (WordPress sites), whether it is on, the mode, which forms it protects,… | turnstile:read | read |
| turnstile_rotate | Issues a new secret key for the site's widget and installs it on the site straight away. The new key is never shown - it only lives on your site. F… | turnstile:write | write |
| cron_account | All cron jobs on every site of the account (at most 25), each with its site id and domain. | cron:read | read |
| cron_create | Adds a job and puts it on the site's server within about a minute. It runs as the site's own user, in the site folder, with the site's PHP version,… | cron:write | write |
| cron_delete | Deletes the job and its run history, and takes it off the server within about a minute. A run already going finishes. | cron:write | DESTRUCTIVE |
| cron_get | The job and its last 10 runs: when, how long, the exit code, and the output (the first 1,000 and last 7,000 bytes of long output are kept). | cron:read | read |
| cron_list | Every cron job of the site with its schedule (as written and in words, UTC), what it runs, whether it is on, why it is paused if it is (the site is… | cron:read | read |
| cron_run | Starts the job on its server at once (once a minute per job, 10 times in 10 minutes per account). The run is recorded like a scheduled one, with tr… | cron:write | write |
| cron_runs | Newest first. status: ok, failed (non-zero exit code), timeout (stopped at 15 minutes), skipped (the previous run was still going, or the server wa… | cron:read | read |
| cron_update | Change any of the fields; the others stay as they are. To change the schedule give schedule_mode with its fields. Switching a job on again (`enab… | cron:write | write |
| reputation_add | Adds a business and searches Google, Trustpilot and Tripadvisor for its profiles. The results arrive as candidates within a minute or two, for th… | reputation:write | write |
| reputation_confirm | Only a profile you confirm is ever read. Its first reading starts at once. | reputation:write | write |
| reputation_countries | The countries you can choose when adding a business (pass location_code as country). | reputation:read | read |
| reputation_delete | Removes the business with its profiles, reviews, history and brand terms. | reputation:write | DESTRUCTIVE |
| reputation_get | One business: per platform its confirmed profile (or the candidates found, waiting for you to confirm which is yours), the latest reviews (poor una… | reputation:read | read |
| reputation_list | Every business you watch with its confirmed review profiles and their latest reading (null = not read yet, never zero). covered is false for a bu… | reputation:read | read |
| reputation_profile_remove | Forgets the confirmed profile on one platform (search again to pick another). | reputation:write | DESTRUCTIVE |
| reputation_refresh | Asks for a fresh reading of every confirmed profile and brand term of this business within the next few minutes. The same bound as the "Read now" b… | reputation:write | write |
| reputation_search | Searches the three platforms again for this business's profiles (the same daily limit per business as the button). New candidates replace the old o… | reputation:write | write |
| reputation_status | Your plan, how many businesses and brand terms it covers and how many you watch. | reputation:read | read |
| reputation_term_add | Adds a brand term whose Google page one is read every week (within your plan's brand terms, up to 10 per business). | reputation:write | write |
| reputation_term_delete | Removes a brand term and its page-one history. | reputation:write | DESTRUCTIVE |
| products_add | Adds a product and reads both shelves at once. Refused before anything is spent if your plan has no room. | products:write | write |
| products_delete | Removes the product and its history. | products:write | DESTRUCTIVE |
| products_get | One product with every listing we read on each shelf ("counted" = comparable to your product; "yours" = recognised by your seller name or ASIN). | products:read | read |
| products_list | Every product you track, with the latest reading of each shelf. | products:read | read |
| products_status | Your plan, how many products it covers and how your products are doing on the shelves. | products:read | read |
| competitors_add | Adds a domain to your watch-list; its first reading arrives within minutes. Refused before anything is spent if your packs have no room. | competitors:write | write |
| competitors_delete | Removes the domain from your watch-list. | competitors:write | DESTRUCTIVE |
| competitors_get | One domain with its top pages and the history of its weekly readings. | competitors:read | read |
| competitors_list | Every domain you watch, with its latest weekly reading (null = not measured, never zero). | competitors:read | read |
| competitors_status | Your packs, how many domains they cover (plus any free domain) and how many you watch. | competitors:read | read |
| agency_add | Adds domains to your list; their first reading arrives within minutes. Adds as many as your plan has room for and says why each other one was skipp… | agency:write | write |
| agency_delete | Removes the domain from your list. | agency:write | DESTRUCTIVE |
| agency_get | One domain with the history of its weekly readings (newest first, up to two years). | agency:read | read |
| agency_list | Every domain you track, with its latest weekly reading (null = not measured, never zero). | agency:read | read |
| agency_status | Your plan, how many domains it covers and how many you track. | agency:read | read |
| agency_update | Changes the client label or note, or switches the domain off / on. | agency:write | write |
| mailroute_get | "route": "ours" = our mail servers (the default); "own" = the customer's own provider, with its state ("pending" while being set up on the server,… | sites:read | read |
| mailroute_off | Switches the site back to our mail servers within a minute. The settings are kept unless forget=true. | sites:write | DESTRUCTIVE |
| mailroute_providers | The providers a site can send through and what each needs: a key only (Resend, SendGrid, Postmark), a login and key (Brevo, Mailgun, Amazon SES, wh… | sites:read | read |
| mailroute_set | Stores the settings (the key encrypted) and switches the site's e-mail to that provider within a minute. The answer's "state" says whether it is se… | sites:write | write |
| mailroute_test | Sends one real e-mail the way the website does (from inside the site, through the provider) and returns the provider's answer in plain words. At mo… | sites:write | write |
| country_lock_get | Whether the site is locked to certain countries, which ones, whether search-engine crawlers are let in, the addresses that are always let in, and w… | sites:read | read |
| country_lock_set | Locks the site to the countries given (or everyone except them), or switches the lock off. Live on the site within about a minute - read it back wi… | sites:write | write |
| boost_status | Whether Performance Boost is on for the account (level, multiplier, last paid day), how many sites it covers, and what each level costs a month for… | boost:read | read |
| prodisc_offers | Whether the account gets 50% off the first payment of our Pro plugins (an active, paid hosting plan), and each plugin in the offer with its state f… | prodisc:read | read |
| moneysites_buy | Place a money-site order (a WordPress plan, optionally with WooCommerce, or an application plan). Zinn Digital LTD bills it, so the answer carries… | moneysites:write | write |
| moneysites_get | One money site in full: state, plan, hostnames, PHP version, region, usage against the plan's allowances, recent jobs and errors, and the links for… | moneysites:read | read |
| moneysites_list | Every money site on this account, with its state, plan, application and last known usage. | moneysites:read | read |
| moneysites_more | The other hosting lines of our sister company Zinn Digital - agency, reseller, enterprise, cloud, AI, developer, LMS and mail hosting - each with i… | moneysites:read | read |
| moneysites_move | One move: the step it is on, what it is doing now, and its log (what was checked and when). | moneysites:read | read |
| moneysites_move_cancel | Cancels a move before the domain is switched. The site stays exactly as it is on PBN hosting. Refused once the domain switch has started. | moneysites:write | write |
| moneysites_move_check | Whether the site can be moved now, into which money-site plan and slot, and what happens. When it cannot, reason_code says why (no_plan, no_free_… | moneysites:read | read |
| moneysites_move_start | Starts the one-click move. | moneysites:write | write |
| moneysites_moves | Every move of a PBN site to money-site hosting on this account, newest first, with its steps and state. | moneysites:read | read |
| moneysites_order | One order, re-read from Zinn Digital if it is still open. | moneysites:read | read |
| moneysites_order_cancel | Cancel an order that has not been paid. Nothing was charged, so nothing is refunded. | moneysites:write | DESTRUCTIVE |
| moneysites_orders | Every money-site order on this account, newest first, with its state and what it cost. | moneysites:read | read |
| moneysites_plans | Every money-site hosting plan on sale - Managed WordPress hosting (Start to Enterprise; any of them can be ordered with WooCommerce installed and s… | moneysites:read | read |
| moneysites_refresh | Asks Zinn Digital for this account's sites and orders again: after paying, or when a site set up by our team is not listed yet. | moneysites:read | read |
| moneysites_site_addon_pay | For an add-on order that is awaiting payment: the same order's pay link again (never a second order). Refused when there is nothing to pay. | moneysites:write | write |
| moneysites_site_addons | What the site's plan already includes, the add-ons that can be added to THIS site (valid for its plan, priced by the server), and the add-on orders… | moneysites:read | read |
| moneysites_site_addons_request | Asks for add-ons on this site. The server checks every code against the site's plan and prices it. When add-ons can be placed online, the answer ca… | moneysites:write | write |
| moneysites_site_plan | The Zinn Digital subscription that pays for this money site, read live: its plan, price, whether it renews and on which date, or the date it ends w… | moneysites:read | read |
| moneysites_site_plan_cancel | Cancels the plan that pays for this money site AT THE END OF THE PAID PERIOD: renewal is switched off, the site stays live until ends_on, then th… | moneysites:write | DESTRUCTIVE |
| moneysites_woocommerce | Whether WooCommerce is installed on one of your PBN-line WordPress sites, which version, and the health checks: plugin active, shop/cart/checkout p… | moneysites:read | read |
| moneysites_woocommerce_set | Adds WooCommerce to a PBN-line WordPress site, free of charge, or switches it off again. The install runs in the background and usually takes a min… | moneysites:write | write |
| jobs_wait | Waits for a job (site create, backup, restore, delete, reinstall, DNS publish) and returns it once it has succeeded or failed, or when the wait run… | account:read | read |
Account
The account behind the key: profile, plan, site slots, limits and usage.
account_limits
Plan, slots, limits and frozen sites · read-only · permission account:read · REST equivalent GET /account/limits
Site slots (plan + extra-site add-ons), subscription state and paid-until date, the default per-site limits, every paused (frozen) site with the reason(s) it is paused, and the add-ons on the account. Needs the account:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "account_limits",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Account. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
account_me
Who am I · read-only · permission account:read · REST equivalent GET /me
The account and the key making the call. The cheapest call there is, which makes it a key test. Needs the account:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "account_me",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Account. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
account_usage_refresh
Measure usage of the whole account now · write · permission account:write · REST equivalent POST /account/limits/refresh
Starts a fresh disk / database / file-count measurement for the account's sites - the usage tab's "Check now", for many sites at once. It returns at once: each site is reported as started, busy, throttled (the panel's own per-site cooldown and per-account budget apply unchanged) or skipped with the reason. The new figures appear in the account limits and each site's usage a few seconds later. Needs the account:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_ids | array | no | Only these sites (default: every installed site of the account, newest first). |
max_sites | integer | no | How many sites to start a measurement for in this call (1-100). Default: 25. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "account_usage_refresh",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Account. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
meta_limits
API limits for this key · read-only · permission kb:read · REST equivalent GET /limits
The rate limits and size limits that apply to the key making the call. overridden is true when support has raised or lowered a limit for this key or for the whole account. Needs the kb:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "meta_limits",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Account. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Billing
Subscription, payment due, invoices and invoice PDFs, add-ons.
billing_invoice_pdf
Download an invoice PDF · read-only · permission billing:read · REST equivalent GET /billing/invoices/{number}.pdf
The PDF of an invoice or credit note of this account (Content-Type application/pdf). Needs the billing:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
number | string | yes | Invoice number, e.g. PBN-2026-001234. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "billing_invoice_pdf",
"arguments": {
"number": "PBN-2026-001234"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Billing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
billing_invoices
Payments and invoices · read-only · permission billing:read · REST equivalent GET /billing/invoices
Every payment and refund of the account, newest first. document is the invoice / credit note when one has been issued, with its number for the PDF. Needs the billing:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
limit | integer | no | Items per page (1-200). Default: 50. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "billing_invoices",
"arguments": {
"limit": 10
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Billing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
billing_summary
Billing overview · read-only · permission billing:read · REST equivalent GET /billing
Subscription (state, plan, paid-until date, days left, payment method), unpaid state with the date sites are removed if it stays unpaid, site slots, add-ons, VAT treatment and the panel links. Needs the billing:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "billing_summary",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Billing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Sites
Every site type: list, search, create, change, delete; status, nameservers, CDN, SEO.
sites_create
Create a site (any type) · write · permission sites:write · REST equivalent POST /sites
Creates a site exactly as the Add new site form does - same validation, same slot limit, same checks - for every type: WordPress, Static HTML, PHP hosting, Joomla, Drupal, PrestaShop, OpenCart, Grav and MediaWiki. A WordPress site also needs title, subtitle, login_url and feedback_email; no other type does, and the create options list exactly what each type requires. Installation runs in the background as a job; once installed, the domain points at the site's nameservers.required. Needs the sites:write permission. Starts a job that finishes later: the answer carries job.id, and the job reads succeeded or failed when it is done.
| Argument | Type | Required | Description |
|---|---|---|---|
type | string (one of: Wordpress, Static HTML, PHP hosting, Joomla, Drupal, PrestaShop, OpenCart, Grav, MediaWiki) | yes | Site type. |
name | string | yes | A unique short name (letters, digits, dashes). |
domain | string | yes | The domain (or subdomain of one of your sites). |
cdn | string | no | CDN, one of the choices the create options offer. |
php_version | string | no | PHP version value, e.g. "PHP 8.3". |
use_https | boolean | no | Serve over HTTPS. |
use_www | boolean | no | www. as the primary host. |
title | string | no | Site title (WordPress and the ready-installed applications). REQUIRED when type is Wordpress. |
subtitle | string | no | Tagline. REQUIRED when type is Wordpress; ignored for other types. |
admin_email | string | no | Administrator e-mail (WordPress and the applications). |
feedback_email | string | no | Contact-form e-mail address, where the site's contact form sends its messages. REQUIRED when type is Wordpress; ignored for other types. |
login_url | string | no | WordPress login path (default wp-login.php). REQUIRED when type is Wordpress. |
template_id | integer | no | WordPress template id (omit for random). |
blueprint_id | integer | no | Deploy from one of your blueprints (WordPress). |
group_id | integer | no | Put the site in this group. |
create_mailbox | boolean | no | Retired and ignored: e-mail accounts at your domain are created on the site's Mail tab. |
autoupdate_wordpress | boolean | no | Auto-update WordPress core and plugins. |
form_fields | object | no | Any other Create site form field by its form name (its form_field in the create options), e.g. the WordPress theme/plugin pickers. |
install_woocommerce | boolean | no | WordPress only: once the site is built, install WooCommerce and set the shop up (shop, cart, checkout and account pages, store open, pretty permalinks). Free. Ignored for other site types. Default: False. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_create",
"arguments": {
"type": "Wordpress",
"name": "myblog",
"domain": "myblog-example.com",
"cdn": "Cloudflare",
"use_https": true,
"title": "My blog",
"subtitle": "Notes from the workshop",
"admin_email": "[email protected]",
"feedback_email": "[email protected]"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_create_options
Fields and choices for a new site · read-only · permission sites:write · REST equivalent GET /sites/options
The fields the Create site form accepts for this account right now, with their choices (site types, CDNs, PHP versions, templates, blueprints, groups...) and defaults. Every field name here is accepted when creating a site (unknown ones go in form_fields). required is the answer FOR THE TYPE in the response's type - a WordPress site also needs title, subtitle, login_url and feedback_email, no other type does. required_for_types on each field and the required_by_type map give the whole picture in one call. Needs the sites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
type | string (one of: Wordpress, Static HTML, PHP hosting, Joomla, Drupal, PrestaShop, OpenCart, Grav, MediaWiki) | no | Describe the form for this site type. Which fields are REQUIRED depends on the type, so name the type you are going to create. Default: the form's own default type. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_create_options",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_delete
Delete a site · destructive · permission sites:delete · REST equivalent DELETE /sites/{site_id}
Deletes the site for good (files, database, DNS zone, CDN), exactly like Delete site in the panel. It ALSO deletes the email of the site's domain on our mail service - every mailbox and forwarder and all their mail - when it has any; the response states it in email_deleted and warning. Refused while the site is busy or paused for non-payment/malware, while it has subdomain sites, or while a blueprint is being made from it. Runs in the background: a job is returned. Needs the sites:delete permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_delete",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_edit_options
Fields and choices to edit a site · read-only · permission sites:write · REST equivalent GET /sites/{site_id}/options
The fields the Edit site form offers for THIS site right now (they depend on type, CDN and state), with choices and current values. Needs the sites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_edit_options",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_get
Get one site · read-only · permission sites:read · REST equivalent GET /sites/{site_id}
Everything the site page shows: state, URL, settings, why it is paused (freeze.reasons), nameserver status (current vs required, pointed, autopilot), CDN, SEO, indexation, platform, online status and what can be done with it right now (capabilities). Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_get",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_list
List and search sites · read-only · permission sites:read · REST equivalent GET /sites
The same search, filters and order as the sites list in the panel. total is the number of matching sites. A key restricted to some sites only sees those. Needs the sites:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
search | string | no | Part of the domain or name (www. is ignored). |
state | string (one of: ok, waiting, activating, working, error, frozen, notinstalled) | no | ok = live, waiting = waiting for DNS, activating = activating CDN, working = being installed/changed, error, frozen = paused, notinstalled. |
type | string (one of: Wordpress, Static HTML, PHP hosting, Joomla, Drupal, PrestaShop, OpenCart, Grav, MediaWiki, mismatch) | no | Site type; "mismatch" = the files run a different platform than the site type. |
group | string | no | Group id, or "none" for sites in no group. |
cdn | string | no | CDN name, e.g. Cloudflare, BunnyCDN, KeyCDN, CDN77.COM, Gcore, CloudFront. |
php_version | string | no | PHP version value, e.g. "PHP 8.3". |
indexed | string (one of: yes, no, pending) | no | Google indexation state. |
online | string (one of: online, offline) | no | The online badge: offline = a confirmed problem. |
sort | string (one of: newest, oldest, name, name_desc, domain, domain_desc) | no | Order of the list. Default: newest. |
limit | integer | no | Items per page (1-200). Default: 50. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_list",
"arguments": {
"search": "blog",
"state": "ok",
"limit": 20
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_malware
Malware scan results · read-only · permission sites:read · REST equivalent GET /sites/{site_id}/malware
What the nightly malware scan (and any "scan again") found on this site, in the same words as the site's Malware scan tab: open findings, files in quarantine, and the date the site would be paused if the findings stay. Files identical to the official published copies are never listed. Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_malware",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_malware_rescan
Scan the site again · write · permission sites:write · REST equivalent POST /sites/{site_id}/malware/rescan
Starts a malware scan of this site now (usually one to five minutes); the site's malware report shows it as last_rescan. One scan per site at a time, ten per account an hour. Needs the sites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_malware_rescan",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_update
Change site settings · write · permission sites:write · REST equivalent PATCH /sites/{site_id}
Change any setting the Edit site form offers: name, domain, PHP version, HTTPS, www, group, admin e-mail, login URL, auto-updates, mailbox. Only the fields sent change. Changes that touch the server (domain, PHP, HTTPS/www) run in the background: a job is returned then. Needs the sites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
name | string | no | A unique short name (letters, digits, dashes). |
domain | string | no | The domain (or subdomain of one of your sites). |
php_version | string | no | PHP version value, e.g. "PHP 8.3". |
use_https | boolean | no | Serve over HTTPS. |
use_www | boolean | no | www. as the primary host. |
admin_email | string | no | Administrator e-mail (WordPress and the applications). |
login_url | string | no | WordPress login path (default wp-login.php). REQUIRED when type is Wordpress. |
group_id | integer | no | Put the site in this group. |
create_mailbox | boolean | no | Retired and ignored: e-mail accounts at your domain are created on the site's Mail tab. |
autoupdate_wordpress | boolean | no | Auto-update WordPress core and plugins. |
form_fields | object | no | Any other Create site form field by its form name, e.g. the WordPress theme/plugin pickers. |
ssl_mode | string (one of: full, flexible) | no | Cloudflare SSL mode (only offered when the site has its own address records). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_update",
"arguments": {
"site_id": 123,
"php_version": "PHP 8.3",
"use_www": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Site tools
Cache purge, one-click admin login, reinstall, health checks, Site Cleaner, usage.
cleaner_get
Site Cleaner status · read-only · permission sites:read · REST equivalent GET /sites/{site_id}/cleaner
Site Cleaner for this site: whether the add-on is active, the last scan (what can be removed and how much it saves), the running job, recent jobs (with undo_available) and the schedule. Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cleaner_get",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
cleaner_run
Scan, clean or undo · write · permission sites:write · REST equivalent POST /sites/{site_id}/cleaner/{action}
Runs Site Cleaner. scan lists unused plugins/themes, junk files and database clutter (free). clean removes the selected items after taking a backup and checks the site afterwards - it needs the Site Cleaner add-on (402 addon_required otherwise). undo puts a clean back from its backup. Needs the sites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
action | string (one of: scan, clean, undo) | yes | scan (free) / clean (needs the Site Cleaner add-on) / undo a clean. |
items | array | no | clean: ids from last_scan.items to remove (omit = the default selection). |
job_id | integer | no | undo: the id of the clean job to undo. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cleaner_run",
"arguments": {
"site_id": 123,
"action": "scan"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
cleaner_schedule
Automatic cleaning · write · permission sites:write · REST equivalent PUT /sites/{site_id}/cleaner/schedule
Sets automatic cleaning for the site (needs the add-on to actually clean). Needs the sites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
schedule | string (one of: off, daily, weekly, monthly) | yes | How often Site Cleaner runs by itself. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cleaner_schedule",
"arguments": {
"site_id": 123,
"schedule": "weekly"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
health_get
Health status · read-only · permission sites:read · REST equivalent GET /sites/{site_id}/health
The online badge (online / offline / slow / paused... with the reason) and, for application sites, the last integrity check (V1 config lines, admin account, login health, core files). Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "health_get",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
health_integrity_check
Integrity check now · write · permission sites:write · REST equivalent POST /sites/{site_id}/health/integrity-check
Checks the application now (WordPress, Joomla, Drupal, PrestaShop, OpenCart, Grav, MediaWiki): V1's config lines, the site URL, the admin account, one-click login health and core file checksums. Changes nothing. Takes a few seconds. Needs the sites:write permission. This can take up to a minute.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "health_integrity_check",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
health_recheck
Re-check if the site is up · write · permission sites:write · REST equivalent POST /sites/{site_id}/health/recheck
Probes the home page again now (same probe and recording as the platform's monitor) and asks the server why if it fails. Asynchronous: follow the job; its result has the outcome. At most 10 an hour. Needs the sites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "health_recheck",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
health_repair
Repair the site · write · permission sites:write · REST equivalent POST /sites/{site_id}/health/repair
"Repair site": checks, repairs everything repairable (backups first, on the server), checks again. You get an e-mail listing what was repaired. Needs the sites:write permission. This can take up to a minute.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "health_repair",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_admin_login
One-click admin login link · write · permission sites:login · REST equivalent POST /sites/{site_id}/admin-login
A single-use login link to the site's admin (WordPress wp-admin, Joomla, Drupal, PrestaShop, OpenCart, Grav, MediaWiki), valid for 60 seconds - the panel's one-click login, for a browser, not for storing. Not for Static HTML / PHP hosting sites. Needs the sites:login permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_admin_login",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_php_version
Change the PHP version · write · permission sites:write · REST equivalent PUT /sites/{site_id}/php-version
Changes only the site's PHP version. The web server is reconfigured in the background (a job is returned). Needs the sites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
php_version | string | yes | e.g. "PHP 8.3" |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_php_version",
"arguments": {
"site_id": 123,
"php_version": "PHP 8.3"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_purge_cache
Purge the CDN cache · write · permission sites:write · REST equivalent POST /sites/{site_id}/purge-cache
Clears the CDN cache of both hostnames (as Purge CDN cache in the panel). The site must be live. Needs the sites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_purge_cache",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_reinstall
Reinstall from scratch · destructive · permission sites:write · REST equivalent POST /sites/{site_id}/reinstall
Installs the site again from scratch (as Reinstall in the panel) - the current files and database are replaced. Refused while the site is busy, switched off or being deleted. Needs the sites:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
confirm | boolean | yes | Must be true: this action overwrites the site. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_reinstall",
"arguments": {
"site_id": 123,
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_temp_unfreeze
Switch a paused site on for cleanup · write · permission sites:write · REST equivalent POST /sites/{site_id}/temporary-unfreeze
A site paused ONLY for a usage limit (disk / database / files) comes back for 30 minutes so you can clean it up (3 times per site per day). At the end it is paused again only if still over the limit. The site's freeze.temporary_unfreeze says if it is available and why not. Needs the sites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_temp_unfreeze",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_usage
Disk, database and file usage · read-only · permission sites:read · REST equivalent GET /sites/{site_id}/usage
The Usage & add-ons tab: disk, database and file-count use against the limits (plan + add-ons), what is over, CDN bandwidth for metered CDNs, and the add-ons on the site. Numbers are measured every few hours, or on demand. Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_usage",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_usage_refresh
Measure usage now · write · permission sites:write · REST equivalent POST /sites/{site_id}/usage/refresh
Starts a fresh measurement of disk, database and files (the usage tab's "Check now"). Returns the current figures with busy=true; the site's usage reads busy=false again when it is done (seconds). Same throttles as the panel: one measurement per site every few minutes. Needs the sites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_usage_refresh",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
DNS records
The site's own DNS records (A, AAAA, CNAME, TXT, MX, SRV, CAA, NS).
dns_check_now
Check a waiting site's nameservers now · write · permission dns:write · REST equivalent POST /sites/{site_id}/check-dns-now
The site page's "Check again now" button, for a site that is waiting for its nameservers or finishing its CDN: reads the nameservers the registry really publishes for the domain, compares them with the ones the site needs, looks for an old DNSSEC record left at the registrar, and when everything is right starts the go-live step at once. status is one of not_pointed, dnssec, going_live, finishing, live, unknown. Once per 5 minutes per site. Needs the dns:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "dns_check_now",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in DNS records. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
dns_create
Add a DNS record · write · permission dns:write · REST equivalent POST /sites/{site_id}/dns
Adds a record with the panel's own validation. It is published to the site's DNS provider within a minute or two (follow the job); your records are never overwritten by the platform. Needs the dns:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
type | string (one of: A, AAAA, CNAME, TXT, MX, SRV, CAA, NS) | yes | Record type. |
name | string | yes | "@" for the domain itself, or a name like blog, shop.eu, _dmarc, _sip._tcp. |
value | string | yes | IPv4 (A), IPv6 (AAAA), host name (CNAME, MX, SRV target, NS), text (TXT) or CA domain (CAA). |
priority | integer | no | MX and SRV. |
weight | integer | no | SRV. |
port | integer | no | SRV. |
caa_flags | integer (one of: 0, 128) | no | CAA: 0 or 128 (critical). |
caa_tag | string (one of: issue, issuewild, iodef) | no | CAA tag. |
proxied | boolean | no | Cloudflare only, A/AAAA/CNAME: proxy through the CDN (off = DNS only). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "dns_create",
"arguments": {
"site_id": 123,
"type": "TXT",
"name": "@",
"value": "google-site-verification=abc123"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in DNS records. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
dns_delete
Delete a DNS record · destructive · permission dns:write · REST equivalent DELETE /sites/{site_id}/dns/{record_id}
Deletes a record; it is removed at the DNS provider within a minute or two. Needs the dns:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
record_id | integer | yes | The DNS record id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "dns_delete",
"arguments": {
"site_id": 123,
"record_id": 5501
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in DNS records. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
dns_list
List DNS records · read-only · permission dns:read · REST equivalent GET /sites/{site_id}/dns
The site's own DNS records (the DNS records tab), and the publishing state: the DNS provider, when the records were last published and any record the provider refused (with its error). Records the platform manages for the CDN are not listed and are never changed through this API. Needs the dns:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "dns_list",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in DNS records. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
dns_update
Change a DNS record · destructive · permission dns:write · REST equivalent PATCH /sites/{site_id}/dns/{record_id}
Changes a record; send only the fields that change. Needs the dns:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
record_id | integer | yes | The DNS record id. |
type | string (one of: A, AAAA, CNAME, TXT, MX, SRV, CAA, NS) | no | Record type. |
name | string | no | "@" for the domain itself, or a name like blog, shop.eu, _dmarc, _sip._tcp. |
value | string | no | IPv4 (A), IPv6 (AAAA), host name (CNAME, MX, SRV target, NS), text (TXT) or CA domain (CAA). |
priority | integer | no | MX and SRV. |
weight | integer | no | SRV. |
port | integer | no | SRV. |
caa_flags | integer (one of: 0, 128) | no | CAA: 0 or 128 (critical). |
caa_tag | string (one of: issue, issuewild, iodef) | no | CAA tag. |
proxied | boolean | no | Cloudflare only, A/AAAA/CNAME: proxy through the CDN (off = DNS only). |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "dns_update",
"arguments": {
"site_id": 123,
"record_id": 5501,
"value": "google-site-verification=xyz789"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in DNS records. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_nameservers
Nameserver status · read-only · permission dns:read · REST equivalent GET /sites/{site_id}/nameservers
The nameservers the domain must use (required), what it uses now (current, checked daily), whether it is pointed, whether the DNS zone expired at the provider (zone_expired: re-create it from the site page), and the registrar autopilot status when a registrar connection sets them for you. Needs the dns:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_nameservers",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in DNS records. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Backups
List, create, download and restore backups.
backups_create
Create a backup now · write · permission backups:write · REST equivalent POST /sites/{site_id}/backups
Takes a full backup (files + database) now, as Create backup in the panel. A job is returned; the backup reads Ok when it is done. Needs the backups:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backups_create",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backups. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backups_delete
Delete a backup · destructive · permission backups:write · REST equivalent DELETE /sites/{site_id}/backups/{backup_id}
Deletes a backup. A backup that a blueprint uses cannot be deleted. Needs the backups:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
backup_id | integer | yes | The backup id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backups_delete",
"arguments": {
"site_id": 123,
"backup_id": 88001
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backups. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backups_download
Download link · read-only · permission backups:read · REST equivalent POST /sites/{site_id}/backups/{backup_id}/download-link
A temporary link to download the backup archive (tar.gz) - valid about 4 hours. Needs the backups:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
backup_id | integer | yes | The backup id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backups_download",
"arguments": {
"site_id": 123,
"backup_id": 88001
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backups. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backups_get
Get one backup · read-only · permission backups:read · REST equivalent GET /sites/{site_id}/backups/{backup_id}
One backup of the site. Needs the backups:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
backup_id | integer | yes | The backup id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backups_get",
"arguments": {
"site_id": 123,
"backup_id": 88001
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backups. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backups_list
List backups · read-only · permission backups:read · REST equivalent GET /sites/{site_id}/backups
The site's backups, newest first (automatic daily ones, manual ones and uploaded ones). Needs the backups:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
state | string (one of: Pending, Creating, Ok, Error, Storing) | no | Only backups in this state. |
limit | integer | no | Items per page (1-200). Default: 50. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backups_list",
"arguments": {
"site_id": 123,
"limit": 10
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backups. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backups_restore
Restore a backup · destructive · permission backups:write · REST equivalent POST /sites/{site_id}/backups/{backup_id}/restore
Replaces the site's files and database with the backup (as Restore in the panel). Refused while the site is busy, switched off or the plan has expired. A job is returned. Needs the backups:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
backup_id | integer | yes | The backup id. |
confirm | boolean | yes | Must be true: this action overwrites the site. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backups_restore",
"arguments": {
"site_id": 123,
"backup_id": 88001,
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backups. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Files
Browse, read, upload, rename and delete the files of a site.
files_delete
Delete a file or folder · destructive · permission files:write · REST equivalent DELETE /sites/{site_id}/files
Deletes a file, or a folder (with recursive=true when it is not empty). There is no undo - take a backup first for anything important. Needs the files:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
path | string | yes | Path relative to the site folder, e.g. "wp-content/uploads" ("" or "/" = the site folder). |
recursive | boolean | no | Required to delete a folder that is not empty. Default: False. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "files_delete",
"arguments": {
"site_id": 123,
"path": "hello.txt"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Files. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
files_list
List a folder · read-only · permission files:read · REST equivalent GET /sites/{site_id}/files
Folders first, then files; up to 5,000 entries. Symbolic links are listed (type "link") but never followed. Available under the same rule as the File Manager: the site is installed, the plan is active and the site is not suspended. Needs the files:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
path | string | no | Folder path relative to the site folder (default: the site folder itself). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "files_list",
"arguments": {
"site_id": 123,
"path": "wp-content"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Files. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
files_mkdir
Create a folder · write · permission files:write · REST equivalent POST /sites/{site_id}/files/folders
Creates a folder (and any missing parent folders). Needs the files:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
path | string | yes | The new folder path. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "files_mkdir",
"arguments": {
"site_id": 123,
"path": "wp-content/uploads/reports"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Files. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
files_move
Rename or move · write · permission files:write · REST equivalent POST /sites/{site_id}/files/move
Renames or moves a file or folder inside the site folder. Needs the files:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
path | string | yes | What to move. |
to | string | yes | The new path. |
overwrite | boolean | no | Replace an existing file at the destination. Default: False. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "files_move",
"arguments": {
"site_id": 123,
"path": "hello.txt",
"to": "old/hello.txt"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Files. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
files_read
Read (download) a file · read-only · permission files:read · REST equivalent GET /sites/{site_id}/files/content
Returns a file of up to 5 MB (the account's limits give the exact size). encoding=raw streams the bytes directly. Needs the files:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
path | string | yes | Path relative to the site folder, e.g. "wp-content/uploads" ("" or "/" = the site folder). |
encoding | string (one of: base64, text, raw) | no | base64 (JSON, any file), text (JSON, UTF-8 files) or raw (the bytes themselves, with a Content-Type). Default: base64. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "files_read",
"arguments": {
"site_id": 123,
"path": "robots.txt",
"encoding": "text"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Files. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
files_stat
File or folder details · read-only · permission files:read · REST equivalent GET /sites/{site_id}/files/stat
Type, size, modification time and mode of one path. Needs the files:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
path | string | yes | Path relative to the site folder, e.g. "wp-content/uploads" ("" or "/" = the site folder). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "files_stat",
"arguments": {
"site_id": 123,
"path": "index.php"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Files. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
files_write
Upload (write) a file · write · permission files:write · REST equivalent PUT /sites/{site_id}/files/content
Writes a file of up to 25 MB atomically (a temporary file renamed into place), owned by the site's web server user. Refuses to write through symbolic links and into folders the platform manages. Needs the files:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
path | string | yes | Where to write it, relative to the site folder. |
content | string | no | Text content (UTF-8). Or use content_base64. |
content_base64 | string | no | The file, base64-encoded. Or send the raw bytes as the request body (Content-Type application/octet-stream) or a multipart form with a "file" field. |
overwrite | boolean | no | Replace an existing file. Default: False. |
mkdirs | boolean | no | Create missing folders. Default: True. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "files_write",
"arguments": {
"site_id": 123,
"path": "hello.txt",
"overwrite": "true",
"content": "Hello world\n"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Files. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Logs
Error log and access log of a site.
logs_access
Access log · read-only · permission logs:read · REST equivalent GET /sites/{site_id}/logs/access
Requests that reached the web server for this site's hostnames, newest last. The client IP is the visitor as the CDN reported it. 30 fetches per 10 minutes per account. Needs the logs:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
hours | integer | no | How far back to look. Default: 1. |
lines | integer | no | At most this many (the newest) lines. Default: 200. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "logs_access",
"arguments": {
"site_id": 123,
"hours": 1,
"lines": 100
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Logs. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
logs_errors
Error log · read-only · permission logs:read · REST equivalent GET /sites/{site_id}/logs/errors
Recent PHP and web server errors of THIS site (the Error log tab): last 7 days, grouped, sanitised (paths shown relative to the site folder, secrets hidden). php_hint=true when the errors look like code written for an older PHP version. Cached 60 s; 20 fetches per 10 minutes per account. Needs the logs:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "logs_errors",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Logs. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Support tickets
Open support tickets and reply to them.
tickets_create
Open a ticket · write · permission tickets:write · REST equivalent POST /tickets
Opens a ticket (support is e-mailed as for a panel ticket). The ticket limits apply: at most 2 open tickets at a time (409 ticket_limit). Needs the tickets:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
title | string | yes | Short summary. |
message | string | yes | What happened, what you expected. |
queue | string | no | Category slug, one of the ticket queues. Default: general-support-request. |
priority | string (one of: low, normal, high) | no | Priority. Default: normal. |
site_id | integer | no | The site it is about (its domain is added to the ticket). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tickets_create",
"arguments": {
"title": "Question about my site",
"message": "How do I add a subdomain?",
"queue": "general-support-request",
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Support tickets. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
tickets_get
Read a ticket · read-only · permission tickets:read · REST equivalent GET /tickets/{ticket_id}
A ticket with every public message (yours and support's). can_reply says if you may add a message now (ticket limits: one message before support answers). Needs the tickets:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
ticket_id | integer | yes | The ticket id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tickets_get",
"arguments": {
"ticket_id": 4412
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Support tickets. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
tickets_list
List tickets · read-only · permission tickets:read · REST equivalent GET /tickets
Your tickets, newest first. Needs the tickets:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
status | string (one of: open, closed) | no | Only open or only closed tickets. |
limit | integer | no | Items per page (1-200). Default: 50. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tickets_list",
"arguments": {
"status": "open"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Support tickets. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
tickets_queues
Ticket categories · read-only · permission tickets:read · REST equivalent GET /tickets/queues
The categories (queues) a ticket can be opened in. Needs the tickets:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tickets_queues",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Support tickets. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
tickets_reply
Reply to a ticket · write · permission tickets:write · REST equivalent POST /tickets/{ticket_id}/messages
Adds your message to the ticket (support is notified). One message until support answers. Needs the tickets:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
ticket_id | integer | yes | The ticket id. |
message | string | yes | Your message. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "tickets_reply",
"arguments": {
"ticket_id": 4412,
"message": "Thanks, that worked."
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Support tickets. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Knowledge base
Search the knowledge base.
kb_article
Read an article · read-only · permission kb:read · REST equivalent GET /kb/articles/{slug}
One article as plain text and as sanitised HTML, with related articles. Needs the kb:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
slug | string | yes | Article slug from a search result. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "kb_article",
"arguments": {
"slug": "change-nameservers"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Knowledge base. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
kb_search
Search the knowledge base · read-only · permission kb:read · REST equivalent GET /kb/search
The dashboard's knowledge-base search (keyword + meaning). Every key may use it. Needs the kb:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
q | string | yes | What you are looking for, in plain words. |
limit | integer | no | At most this many. Default: 8. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "kb_search",
"arguments": {
"q": "change nameservers"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Knowledge base. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_kb_suggestions
Help articles for this site · read-only · permission sites:read · REST equivalent GET /sites/{site_id}/help
Knowledge-base articles that fit what is going on with this site right now (why it is paused, nameservers not pointed, offline...), with app and public links. Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_kb_suggestions",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Knowledge base. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Jobs
Progress of the long-running actions the API started.
jobs_get
Job status · read-only · permission account:read · REST equivalent GET /jobs/{job_id}
The live status of a job: running, succeeded or failed, with a message. Each read counts against the rate limit like any call. Needs the account:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | The id returned as job.id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "jobs_get",
"arguments": {
"job_id": "job_4f1c0a9e2b7d6c5a3e10"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Jobs. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
jobs_list
List jobs · read-only · permission account:read · REST equivalent GET /jobs
Jobs the API started for this account, newest first. Needs the account:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
status | string (one of: running, succeeded, failed) | no | Only jobs in this state. |
site_id | integer | no | Only jobs of this site. |
limit | integer | no | Items per page (1-200). Default: 50. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "jobs_list",
"arguments": {
"status": "running"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Jobs. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
jobs_wait
Wait for a job to finish · read-only · permission account:read · REST equivalent GET /jobs/{job_id}, polled until it finishes
Waits for a job (site create, backup, restore, delete, reinstall, DNS publish) and returns it once it has succeeded or failed, or when the wait runs out. Needs the account:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
job_id | string | yes | The job id returned by the tool that started it (job_...). |
timeout_seconds | integer | no | How long to wait before giving up and returning the job as it is. Default: 120. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "jobs_wait",
"arguments": {
"job_id": "job_4f1c0a9e2b7d6c5a3e10",
"timeout_seconds": 120
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Jobs. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Content and publishing
Posts, pages, pictures and the AI auto-posting campaigns, on every site type.
autopost_article_action
An article's buttons · write · permission content:write · REST equivalent POST /autopost/articles/{article_id}/{action}
The same buttons as an article's page. Needs the content:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
article_id | integer | yes | The article (a post id from the content endpoints). |
action | string (one of: approve, publish_now, cancel, retry, unpublish, delete) | yes | approve (a campaign that asks for review), publish_now, cancel, retry (a failed one), unpublish (take it off the site), delete (forget a finished one here - it stays on the site). |
confirm | boolean | no | Needed for unpublish: must be true. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "autopost_article_action",
"arguments": {
"article_id": "article_id",
"action": "scan"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
autopost_campaign_create
Create a campaign · write · permission content:write · REST equivalent POST /campaigns
Creates an auto-posting campaign exactly as the New campaign page does (same fields, same checks). It writes with one of your AI keys, so add a key on the AI keys page first. Needs the content:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
campaign | object | yes | The campaign fields, e.g. {"name": "...", "site_ids": [123], "text_connection": 12, "text_model": 3, "schedule": "daily", "times": "09:00"}. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "autopost_campaign_create",
"arguments": {
"campaign": "<campaign>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
autopost_campaign_delete
Delete a campaign · destructive · permission content:write · REST equivalent DELETE /campaigns/{campaign_id}
Deletes the campaign. Articles not written yet are cancelled; articles already published stay on your sites. Needs the content:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
campaign_id | integer | yes | The campaign. |
confirm | boolean | yes | Must be true. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "autopost_campaign_delete",
"arguments": {
"campaign_id": 44,
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
autopost_campaign_form
The fields of a campaign · read-only · permission content:read · REST equivalent GET /autopost/campaign-fields
Every field a campaign takes when it is created or changed, from the page's own form: label, whether it is required, the allowed values and the help text. site_ids are your site ids, text_connection / image_connection are AI key ids and text_model / image_model are model ids. Needs the content:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "autopost_campaign_form",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
autopost_campaign_update
Change a campaign · write · permission content:write · REST equivalent PATCH /campaigns/{campaign_id}
Changes only the fields you send (the rest stay as they are), with the Edit campaign page's checks. Sending site_ids replaces the campaign's sites. Needs the content:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
campaign_id | integer | yes | The campaign. |
campaign | object | yes | The campaign fields, e.g. {"name": "...", "site_ids": [123], "text_connection": 12, "text_model": 3, "schedule": "daily", "times": "09:00"}. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "autopost_campaign_update",
"arguments": {
"campaign_id": 44,
"campaign": "<campaign>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
autopost_key_delete
Remove an AI key · destructive · permission content:write · REST equivalent DELETE /autopost/keys/{key_id}
Removes the key from your account (nothing changes at the provider). Campaigns using it are paused until you choose another key. Needs the content:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
key_id | integer | yes | The AI key. |
confirm | boolean | yes | Must be true. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "autopost_key_delete",
"arguments": {
"key_id": "key_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
autopost_key_test
Test an AI key · write · permission content:write · REST equivalent POST /autopost/keys/{key_id}/test
Asks the provider whether the key works (the page's Test button). A key that works again resumes the campaigns that were paused because of it. Needs the content:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
key_id | integer | yes | The AI key. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "autopost_key_test",
"arguments": {
"key_id": "key_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
autopost_keys
Your AI keys · read-only · permission content:read · REST equivalent GET /autopost/keys
The keys to your own AI accounts that campaigns write with: provider, whether the last test worked and how many campaigns use each. The key itself is never returned, and a key is only ever added on the AI keys page (https://app.pbn.ltd/autopost/keys/). Needs the content:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "autopost_keys",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
autopost_models
AI models a campaign can use · read-only · permission content:read · REST equivalent GET /autopost/models
The text and picture models on offer. A campaign's model must belong to the provider of the key it writes with. Needs the content:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "autopost_models",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
autopost_overview
AI auto posting: overview · read-only · permission content:read · REST equivalent GET /autopost
Whether auto posting is available on the account (and why not), how many campaigns and AI keys it has and how many articles are in each state. Needs the content:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "autopost_overview",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
campaigns_get
Read one campaign · read-only · permission content:read · REST equivalent GET /campaigns/{campaign_id}
One campaign with its last ten runs. Needs the content:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
campaign_id | integer | yes | The campaign. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "campaigns_get",
"arguments": {
"campaign_id": 44
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
campaigns_list
List auto-posting campaigns · read-only · permission content:read · REST equivalent GET /campaigns
The AI auto-posting campaigns on the account: what they write, when they run next and how many articles they have made. Needs the content:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
limit | integer | no | How many to return. Default: 20. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
status | string (one of: active, paused, problem, finished) | no |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "campaigns_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
campaigns_status
Pause or resume · write · permission content:write · REST equivalent PUT /campaigns/{campaign_id}/status
Pauses a campaign or starts it again. A campaign paused by our staff or by a problem with an AI key cannot be resumed from here - fix the cause first. Needs the content:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
campaign_id | integer | yes | |
status | string (one of: active, paused) | yes | "paused" stops it writing; "active" starts it again. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "campaigns_status",
"arguments": {
"campaign_id": 44,
"status": "paused"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
campaigns_write_now
Write one now · write · permission content:write · REST equivalent POST /campaigns/{campaign_id}/write-now
Asks a campaign to write and publish now, the same as the "Write now" button. Returns the run. Needs the content:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
campaign_id | integer | yes | |
site_ids | array | no | Only these sites of the campaign (default: all of them). |
count | integer | no | Articles per site. Default: 1. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "campaigns_write_now",
"arguments": {
"campaign_id": 44,
"count": 1
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
content_create
Publish a post or page · write · permission content:write · REST equivalent POST /sites/{site_id}/content
Writes the post and puts it on the site. Works for every site type: WordPress, Joomla, Drupal, PrestaShop, OpenCart, Grav and MediaWiki get a native post/article/page, and Static HTML and PHP hosting sites get a page built in the look of their own pages, with a blog index and sitemap.xml kept up to date. The answer carries a job; the finished post has its address. Needs the content:write permission. Starts a job that finishes later: the answer carries job.id, and the job reads succeeded or failed when it is done.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
title | string | yes | The title of the post. |
body_html | string | no | The text as HTML. Or send body_markdown. |
body_markdown | string | no | The text as Markdown (headings, lists, links, bold, code, quotes). |
status | string (one of: publish, draft) | no | "draft" only on site types that have drafts. Default: publish. |
category | string | no | Category id or name, on site types that have them. |
author | string | no | Author id, on site types that have authors. |
tags | array | no | Tags for the post. |
slug | string | no | The address of the post; one is made from the title when you leave it out. |
publish_at | string | no | ISO date and time to publish it (default: now). |
featured_image_base64 | string | no | The main picture, base64. It leads the post and becomes the featured image on site types that have one. |
images_base64 | array | no | More pictures, base64; they are placed in the text. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "content_create",
"arguments": {
"site_id": 123,
"title": "Five ways to speed up your shop",
"body_markdown": "## Why speed matters\n\nA faster shop sells more.",
"status": "publish",
"tags": [
"speed",
"shop"
]
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
content_get
Read one post · read-only · permission content:read · REST equivalent GET /sites/{site_id}/content/{post_id}
One post in full, with its text and the history of what happened to it. Needs the content:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
post_id | integer | yes | The post id this API gave you when it was created. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "content_get",
"arguments": {
"site_id": 123,
"post_id": 90210
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
content_list
Posts on this site · read-only · permission content:read · REST equivalent GET /sites/{site_id}/content
The latest posts the site itself reports, and every post this account has written for it through PBN.LTD (including ones still being written or waiting to go out). Needs the content:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
limit | integer | no | How many to return. Default: 20. |
state | string (one of: queued, writing, images, review, ready, publishing, done, failed, cancelled) | no | Only posts in this state. |
on_site | boolean | no | Also ask the site itself for its latest posts (slower). Default: True. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "content_list",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
content_media
Upload a picture or file · write · permission content:write · REST equivalent POST /sites/{site_id}/content/media
Puts a picture or file on the site and gives back the address to use in a post. On WordPress it goes into the media library; on every other site type it goes into the site's own files. Needs the content:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
name | string | yes | The file name, e.g. "hero.jpg". |
content_base64 | string | yes | The file itself, base64. |
alt | string | no | Alt text (WordPress media library). |
folder | string | no | Where to put it on site types with no media library. Default: assets. |
overwrite | boolean | no | Replace a file of the same name. Default: False. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "content_media",
"arguments": {
"site_id": 123,
"name": "hero.jpg",
"content_base64": "iVBORw0KGgo=",
"alt": "The shop front"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
content_options
What a post on this site can have · read-only · permission content:read · REST equivalent GET /sites/{site_id}/content/options
Before writing anything, ask this: it says how a post appears on this site type, which fields it supports (featured picture, categories, tags, author, drafts) and the real categories and authors the site has. Site types with no drafts publish straight away - the answer says so. Needs the content:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "content_options",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
content_queue
Everything being written or published · read-only · permission content:read · REST equivalent GET /content/queue
Every post on the account that is queued, being written, waiting for approval, scheduled, publishing, published, failed or cancelled - newest first, across all sites. Needs the content:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
limit | integer | no | How many to return. Default: 20. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
state | string (one of: queued, writing, images, review, ready, publishing, done, failed, cancelled) | no | Only posts in this state. |
site_id | integer | no | Only this site. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "content_queue",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
content_remove
Take a post off the site · destructive · permission content:write · REST equivalent DELETE /sites/{site_id}/content/{post_id}
Removes a published post from the site, or cancels one that has not gone out yet. There is no undo. Needs the content:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
post_id | integer | yes | The post id this API gave you when it was created. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "content_remove",
"arguments": {
"site_id": 123,
"post_id": 90210
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
content_update
Change a post · write · permission content:write · REST equivalent PATCH /sites/{site_id}/content/{post_id}
Changes a post that has not gone out yet. A post that is already on the site cannot be edited from here - remove it and write a new one. Needs the content:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
post_id | integer | yes | The post id this API gave you when it was created. |
title | string | no | A new title. |
body_html | string | no | New text as HTML. |
body_markdown | string | no | New text as Markdown. |
tags | array | no | Replace the tags. |
status | string (one of: publish, draft) | no | |
publish_at | string | no | Move when it goes out. |
approve | boolean | no | Approve a post that is waiting for approval. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "content_update",
"arguments": {
"site_id": 123,
"post_id": 90210,
"title": "Five ways to speed up your shop (updated)"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
runs_get
How a run is going · read-only · permission content:read · REST equivalent GET /runs/{run_id}
One run of a campaign and every article in it. Needs the content:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
run_id | integer | yes | The run. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "runs_get",
"arguments": {
"run_id": 7782
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Content and publishing. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Building, plugins and themes
Upload a built site, set the home page, install and test plugins and themes, and the sites you publish to other hosts.
code_check
Check PHP code for errors · read-only · permission sites:read · REST equivalent POST /sites/{site_id}/code-check
Runs PHP's own syntax check over a file or every .php file in a folder, in the exact PHP version the site runs. Do this before switching a plugin or theme on - a syntax error there takes the whole site down. Needs the sites:read permission. This can take up to a minute.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
path | string | yes | A file or folder in the site, e.g. "wp-content/plugins/my-plugin". |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "code_check",
"arguments": {
"site_id": 123,
"path": "wp-content/plugins/my-plugin"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extdeploy_connection_remove
Disconnect a hosting account · destructive · permission extdeploy:write · REST equivalent DELETE /external-connections/{connection_id}
Forgets the account's credentials here. Nothing is changed at the provider. Refused while sites still publish through it. Needs the extdeploy:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
connection_id | integer | yes | The connection id. |
confirm | boolean | yes | Must be true. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extdeploy_connection_remove",
"arguments": {
"connection_id": "connection_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extdeploy_connection_test
Test a connected account · write · permission extdeploy:write · REST equivalent POST /external-connections/{connection_id}/test
Asks the provider whether the stored credentials still work (the page's Test button). Needs the extdeploy:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
connection_id | integer | yes | The connection id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extdeploy_connection_test",
"arguments": {
"connection_id": "connection_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extdeploy_connections
Your connected hosting accounts · read-only · permission extdeploy:read · REST equivalent GET /external-connections
The accounts at GitHub, GitLab, Cloudflare, Netlify, Vercel, Render, AWS or Azure you have connected, and whether each still works. The credentials are never returned; connecting an account is done on the connections page (https://app.pbn.ltd/extdeploy/connections). Needs the extdeploy:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extdeploy_connections",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extsites_deploy
Deploy again or roll back · destructive · permission sites:write · REST equivalent POST /external-sites/{ext_site_id}/deploy
Publishes the site to its provider again, or rolls it back to a deploy that is already there. This replaces what is live at that provider. No files travel through this call: it publishes the files the PBN.LTD site already has. Needs the sites:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
ext_site_id | integer | yes | |
kind | string (one of: redeploy, rollback) | no | Build and publish again, or go back to an earlier deploy. Default: redeploy. |
rollback_to | string | no | The id of an earlier deploy of this site. Needed for a rollback. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extsites_deploy",
"arguments": {
"ext_site_id": 9,
"kind": "redeploy"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extsites_domain_add
Attach a custom domain · write · permission extdeploy:write · REST equivalent POST /external-sites/{ext_site_id}/domains
Attaches the domain at the provider and returns the DNS records to publish wherever that domain's DNS is answered. Needs the extdeploy:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
ext_site_id | integer | yes | The external site id. |
hostname | string | yes | e.g. landing.example.com |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extsites_domain_add",
"arguments": {
"ext_site_id": 9,
"hostname": "<hostname>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extsites_domain_refresh
Check a custom domain again · write · permission extdeploy:write · REST equivalent POST /external-sites/{ext_site_id}/domains/{domain_id}/refresh
Asks the provider again whether the domain's DNS and certificate are in place. Needs the extdeploy:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
ext_site_id | integer | yes | The external site id. |
domain_id | integer | yes | The domain id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extsites_domain_refresh",
"arguments": {
"ext_site_id": 9,
"domain_id": "domain_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extsites_domain_remove
Detach a custom domain · destructive · permission extdeploy:write · REST equivalent DELETE /external-sites/{ext_site_id}/domains/{domain_id}
Detaches the domain at the provider (its DNS records are yours to remove). Needs the extdeploy:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
ext_site_id | integer | yes | The external site id. |
domain_id | integer | yes | The domain id. |
confirm | boolean | yes | Must be true. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extsites_domain_remove",
"arguments": {
"ext_site_id": 9,
"domain_id": "domain_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extsites_get
One external site · read-only · permission extdeploy:read · REST equivalent GET /external-sites/{ext_site_id}
One site on a third-party host, as its page shows it: state, address, source, build settings, what its provider supports (can), its custom domains with the DNS records each needs, and the recent deploys. Needs the extdeploy:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
ext_site_id | integer | yes | The external site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extsites_get",
"arguments": {
"ext_site_id": 9
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extsites_history
Deploys of an external site · read-only · permission sites:read · REST equivalent GET /external-sites/{ext_site_id}/deployments
The recent deploys of one external site, newest first - what to pass to a rollback. Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
ext_site_id | integer | yes | |
limit | integer | no | Default: 25. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extsites_history",
"arguments": {
"ext_site_id": 9
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extsites_list
Sites on third-party hosts · read-only · permission sites:read · REST equivalent GET /external-sites
The sites this account publishes to outside PBN.LTD (GitHub Pages, Cloudflare Pages, Netlify, Vercel and the rest), with their address and the state of the last deploy. Connecting a provider and adding a site stay in the panel, because they need your own provider credentials. Needs the sites:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
limit | integer | no | How many to return. Default: 20. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
provider | string | no | Only this provider. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extsites_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extsites_log
The log of one deploy · read-only · permission extdeploy:read · REST equivalent GET /external-sites/deployments/{deployment_id}/log
What happened during one deploy, line by line (the page's "Log"). Needs the extdeploy:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
deployment_id | integer | yes | The deploy id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extsites_log",
"arguments": {
"deployment_id": "deployment_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extsites_remove
Remove an external site · destructive · permission extdeploy:write · REST equivalent DELETE /external-sites/{ext_site_id}
Stops managing the site here. With delete_remote the project is deleted at the provider too, and whatever it serves goes offline. Needs the extdeploy:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
ext_site_id | integer | yes | The external site id. |
delete_remote | boolean | no | true = also delete the project at the provider (where the provider allows it). Default: leave it there. Default: False. |
confirm | boolean | yes | Must be true. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extsites_remove",
"arguments": {
"ext_site_id": 9,
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
files_upload_archive
Upload a built site (zip) · write · permission files:write · REST equivalent POST /sites/{site_id}/files/archive
Unpacks a zip of a built website (or a plugin or theme) into the site. Every file goes through the same path a single upload uses, so the same rules hold for each one: inside the site folder only, symbolic links are never followed and the platform's own folders are refused. Up to 60 files and 25 MB in one call - send a bigger site in parts. Needs the files:write permission. This can take up to a minute.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
zip_base64 | string | yes | The .zip file, base64. |
path | string | no | Folder inside the site to unpack into (default: the site root). |
strip_top_folder | boolean | no | Drop the single top folder the zip may have ("mysite/index.html" -> "index.html"). Default: False. |
overwrite | boolean | no | Replace files that already exist. Default: False. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "files_upload_archive",
"arguments": {
"site_id": 123,
"zip_base64": "UEsDBAoAAAAAA...",
"path": "",
"strip_top_folder": true,
"overwrite": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
plugins_delete
Remove a plugin · destructive · permission sites:write · REST equivalent DELETE /sites/{site_id}/plugins/{slug}
Switches a plugin off and deletes its files. There is no undo; the plugin's own data in the database is removed the way the plugin asks for. Needs the sites:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
slug | string | yes | The plugin folder name. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "plugins_delete",
"arguments": {
"site_id": 123,
"slug": "my-plugin"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
plugins_install
Install a plugin · destructive · permission sites:write · REST equivalent POST /sites/{site_id}/plugins
Installs a plugin on a WordPress site, from wordpress.org or from a zip you send. A plugin that is on our blocked list is refused. Activating a plugin can break a site, so installing and activating are separate steps. Needs the sites:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true. This can take up to a minute.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
slug | string | no | A wordpress.org plugin slug, e.g. "classic-editor". |
zip_base64 | string | no | Or your own plugin as a .zip file, base64. |
activate | boolean | no | true switches it on straight away. Default: False. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "plugins_install",
"arguments": {
"site_id": 123,
"slug": "classic-editor",
"activate": false
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
plugins_list
Plugins on this site · read-only · permission sites:read · REST equivalent GET /sites/{site_id}/plugins
Every plugin installed on a WordPress site, whether it is active, its version and whether an update is waiting. Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "plugins_list",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
plugins_state
Switch a plugin on or off · destructive · permission sites:write · REST equivalent POST /sites/{site_id}/plugins/{slug}/{action}
Activates or deactivates a plugin. Activating can take a site down; deactivating is how you put it back. Needs the sites:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
slug | string | yes | The plugin folder name. |
action | string (one of: activate, deactivate) | yes | What to do. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "plugins_state",
"arguments": {
"site_id": 123,
"slug": "my-plugin",
"action": "activate"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_set_home
Set the home page · destructive · permission sites:write · REST equivalent POST /sites/{site_id}/home-page
Makes a page the front page of the site. On WordPress this sets the site's own "front page" setting; on the other site types the file you name is copied over index.html (or index.php), which replaces what is there now. Needs the sites:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
page | string | yes | WordPress: the page id or its exact title. Other site types: the file to use, e.g. "home.html". |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_set_home",
"arguments": {
"site_id": 123,
"page": "home.html"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
sites_verify
Fetch a page and check it · read-only · permission sites:read · REST equivalent POST /sites/{site_id}/verify
Fetches a page of the site and says exactly what came back: the HTTP status, how long it took, its size, its title and any redirect. The page is always fetched on the site's own server (so it works even before the domain points at us) and, when the address allows it, from the internet as well. The newest PHP errors are read at the same time. This is the honest test after changing anything - a plugin, a theme, a file or a setting. Needs the sites:read permission. This can take up to a minute.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
path | string | no | The page to fetch, e.g. "/about". Default: /. |
public | boolean | no | Also try the page from the internet. Default: True. |
errors | boolean | no | Also read the PHP error log afterwards. Default: True. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "sites_verify",
"arguments": {
"site_id": 123,
"path": "/"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
themes_activate
Use this theme · destructive · permission sites:write · REST equivalent POST /sites/{site_id}/themes/{slug}/activate
Switches the site to another theme. This changes how every page looks at once; switching back undoes it. Needs the sites:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
slug | string | yes | The theme folder name. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "themes_activate",
"arguments": {
"site_id": 123,
"slug": "twentytwentyfive"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
themes_list
Themes on this site · read-only · permission sites:read · REST equivalent GET /sites/{site_id}/themes
Every theme on a WordPress site and which one is in use. Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "themes_list",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Building, plugins and themes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
SEO metrics and backlinks
The SEO figures measured for each site, and the backlink tracker with its bulk link editor.
backlinks_tracker_get
Every link to one domain · read-only · permission sites:read · REST equivalent GET /backlink-tracker/{domain_id}
One backlink domain: each distinct link to it (address + text) with how many times, posts and sites carry it, and which of your sites each address is found on. A link id is what the link editor endpoints take. Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain_id | integer | yes | The backlink domain id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_tracker_get",
"arguments": {
"domain_id": "domain_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in SEO metrics and backlinks. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_tracker_link_change
Change a link everywhere · write · permission content:write · REST equivalent PATCH /backlink-tracker/links/{anchor_id}
The bulk link editor's "Edit": the link is searched and replaced in the posts of every site that carries it (one job per site, in each site's operations log). Needs the content:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
anchor_id | integer | yes | The link id. |
url | string | no | The new address (default: unchanged). |
text | string | no | The new link text (default: unchanged). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_tracker_link_change",
"arguments": {
"anchor_id": "anchor_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in SEO metrics and backlinks. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_tracker_link_remove
Remove a link everywhere · destructive · permission content:write · REST equivalent DELETE /backlink-tracker/links/{anchor_id}
The bulk link editor's "Delete": the whole link, its text too, is removed from the posts of every site that carries it (one job per site). It cannot be undone except from a backup. Needs the content:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
anchor_id | integer | yes | The link id. |
confirm | boolean | yes | Must be true: the link (with its text) is removed from every post. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_tracker_link_remove",
"arguments": {
"anchor_id": "anchor_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in SEO metrics and backlinks. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_tracker_list
Domains your posts link to · read-only · permission sites:read · REST equivalent GET /backlink-tracker
The backlink tracker: every domain the posts on your sites link to, with how many links, posts and sites carry them (your_site_id when the domain is one of your own sites). Needs the sites:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_tracker_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in SEO metrics and backlinks. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
seo_metrics_site
SEO metrics history of a site · read-only · permission sites:read · REST equivalent GET /sites/{site_id}/seo-metrics
The same figures as the site's SEO metrics charts tab: Trust Flow, Citation Flow, backlinks and referring domains at every reading, with the change since the reading before. latest is null until the first reading. Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
limit | integer | no | How many readings, newest first. Default: 90. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "seo_metrics_site",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in SEO metrics and backlinks. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Registrar connections
Connect your domain registrar accounts so we set your sites' nameservers for you: connections, automatic updates, per-site status and history.
registrars_automatic
Automatic nameserver updates on or off · write · permission registrars:write · REST equivalent POST /registrars/connections/{connection_id}/automatic
Switches automatic nameserver updates for this connection on or off (the page's toggle, but with an explicit value, so repeating the call is safe). Needs the registrars:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
connection_id | integer | yes | The connection id. |
enabled | boolean | yes | true = we set nameservers for waiting sites on this account's domains. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "registrars_automatic",
"arguments": {
"connection_id": "connection_id",
"enabled": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Registrar connections. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
registrars_connect
Connect a registrar account · write · permission registrars:write · REST equivalent POST /registrars/connections
Checks the key with the registrar FIRST and only saves a working account (same as the Registrar connections page). We then read the domain list; sites waiting for nameservers on those domains are updated automatically within a minute or two. Some registrars need our IP addresses on an allow-list first. Needs the registrars:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
registrar | string | yes | The registrar code (e.g. namecheap, godaddy, porkbun, dynadot, namesilo, spaceship, namebright, zinn). |
secret_credentials | object | yes | The fields that registrar needs, by name (its fields in the registrar providers), e.g. {"username": "...", "api_key": "..."}. Checked with the registrar before anything is saved; stored encrypted; never returned and never written to the API call log. |
label | string | no | Your own name for this account (optional, 80 characters). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "registrars_connect",
"arguments": {
"registrar": "<registrar>",
"secret_credentials": "<secret_credentials>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Registrar connections. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
registrars_disconnect
Disconnect a registrar account · destructive · permission registrars:write · REST equivalent DELETE /registrars/connections/{connection_id}
Deletes the connection and its stored keys (the nameserver update history is kept). Nothing changes at the registrar. Needs "confirm": true. Needs the registrars:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
connection_id | integer | yes | The connection id. |
confirm | boolean | yes | Must be true: the stored keys are deleted and automatic nameserver updates through this account stop. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "registrars_disconnect",
"arguments": {
"connection_id": "connection_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Registrar connections. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
registrars_domain_check
Will this domain get its nameservers set for me? · read-only · permission registrars:read · REST equivalent GET /registrars/domain-check
The question the add-a-site form asks while you type: is this domain in one of your connected accounts (or registered with Zinn Digital), so we point it at the site ourselves? Needs the registrars:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain | string | yes | The domain (no site needed yet). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "registrars_domain_check",
"arguments": {
"domain": "<domain>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Registrar connections. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
registrars_get
One registrar connection · read-only · permission registrars:read · REST equivalent GET /registrars/connections/{connection_id}
One connection, with the domain names we can see in that registrar account (up to 1,000). Needs the registrars:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
connection_id | integer | yes | The connection id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "registrars_get",
"arguments": {
"connection_id": "connection_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Registrar connections. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
registrars_history
Nameserver update history · read-only · permission registrars:read · REST equivalent GET /registrars/history
Every nameserver change we made (or tried) at your registrars: what the registrar had before (the value to go back to), what we set, the result, and whether the domain registry already shows it. Needs the registrars:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | no | Only this site. |
domain | string | no | Only this domain. |
limit | integer | no | How many, newest first. Default: 30. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "registrars_history",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Registrar connections. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
registrars_list
List registrar connections · read-only · permission registrars:read · REST equivalent GET /registrars/connections
Your connected registrar accounts: status, how many domains we can see in each, and whether automatic nameserver updates are on. The keys are never returned - only a masked hint such as "key …a1b2". Needs the registrars:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "registrars_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Registrar connections. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
registrars_providers
Registrars you can connect · read-only · permission registrars:read · REST equivalent GET /registrars/providers
Every registrar we can set nameservers at, with the steps to create an API key there, the IP addresses to allow (when the registrar needs an allow-list) and the fields to send in secret_credentials when you connect it. Needs the registrars:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "registrars_providers",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Registrar connections. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
registrars_refresh
Re-read the domain list · write · permission registrars:write · REST equivalent POST /registrars/connections/{connection_id}/refresh
Reads the domain list of this registrar account again (about a minute). Once every 2 minutes. Needs the registrars:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
connection_id | integer | yes | The connection id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "registrars_refresh",
"arguments": {
"connection_id": "connection_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Registrar connections. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
registrars_site_status
Automatic nameservers for a site · read-only · permission registrars:read · REST equivalent GET /sites/{site_id}/registrar
What the site page says about automatic nameserver updates for this site: whether we set its nameservers for you, through which registrar, what happened last, and the nameservers it needs. Needs the registrars:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "registrars_site_status",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Registrar connections. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
registrars_site_update_ns
Set this site's nameservers at the registrar now · write · permission registrars:write · REST equivalent POST /sites/{site_id}/registrar/update-nameservers
The site page's "Update nameservers at my registrar" button: sets the nameservers this site needs at the registrar that holds its domain, now, and returns the history entry. "already" means the registrar already had them - the site goes live as soon as DNS catches up. Needs the registrars:write permission. This can take up to a minute.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
connection_id | integer | no | The registrar connection to use (optional; by default the one holding the domain). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "registrars_site_update_ns",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Registrar connections. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
registrars_test
Test a registrar connection · write · permission registrars:write · REST equivalent POST /registrars/connections/{connection_id}/test
Asks the registrar whether the stored key still works and records the answer on the connection. Needs the registrars:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
connection_id | integer | yes | The connection id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "registrars_test",
"arguments": {
"connection_id": "connection_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Registrar connections. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
registrars_update_waiting
Set nameservers for every waiting site now · write · permission registrars:write · REST equivalent POST /registrars/update-waiting
Sets the nameservers now for every site waiting for DNS whose domain is in a connected account (the page's "update all" button). Paced to stay inside the registrars' limits, so large accounts take a few minutes; each change is recorded in the registrar history. Once every 15 minutes. Needs the registrars:write permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "registrars_update_waiting",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Registrar connections. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Site security
For sites on Cloudflare: "I'm Under Attack" mode, the site's own firewall rules and blocking AI crawlers.
security_bots
Change bot protection · write · permission security:write · REST equivalent PUT /sites/{site_id}/security/bots
The same as the two bot switches on the Security tab. The change is saved at once and applied at Cloudflare within a few minutes (status reads "applying", then "active"). Needs the security:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
setting | string (one of: ai, fight) | yes | "ai" = block the AI crawlers; "fight" = Cloudflare bot fight mode. |
on | boolean | yes | true = on, false = off. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "security_bots",
"arguments": {
"site_id": 123,
"setting": "<setting>",
"on": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site security. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
security_email_protection
Email address protection on or off · write · permission security:write · REST equivalent PUT /sites/{site_id}/security/email-protection
The CDN hides e-mail addresses on the site's pages from spam bots (on by default): each address becomes a /cdn-cgi/l/email-protection link plus a small script, which SEO crawlers can report as broken links. Switch it off (or on) for this site - the same switch as the Security tab. The choice is kept if the site's DNS zone is re-created or the site moves CDN and back. choice is null while the site uses the default. Needs the security:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
on | boolean | yes | true = on, false = off. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "security_email_protection",
"arguments": {
"site_id": 123,
"on": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site security. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
security_get
Security settings of a site · read-only · permission security:read · REST equivalent GET /sites/{site_id}/security
The same as the site's Security tab: whether "I'm Under Attack" is on (and when it switches itself off), the site's firewall rules and rate-limiting rules with the Cloudflare plan's limits, bot protection (AI crawlers blocked, bot fight mode), and the fields, operators and actions a new rule may use. 409 for a site that is not on Cloudflare. Needs the security:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "security_get",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site security. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
security_rule_add
Add a firewall rule · write · permission security:write · REST equivalent POST /sites/{site_id}/security/rules
Adds a firewall rule (or a rate-limiting rule) to the site at Cloudflare, within the plan's limit. Returns every rule of the site. Needs the security:write permission.
| Argument | Type | Required | Description | |
|---|---|---|---|---|
site_id | integer | yes | The site id. | |
rule | object | yes | The rule, exactly as the tab builds it: {"phase": "http_request_firewall_custom" (default) or "http_ratelimit", "name": "...", "action": one of actions[phase], "enabled": true, and EITHER "builder": {"match": "all" | "any", "conditions": [{"field": one of fields, "op": one of that field's ops, "value": "..." }]} OR "mode": "advanced" with "expression": a Cloudflare rule expression; a rate-limiting rule also takes "requests_per_period" (per 10 seconds per visitor)}. The same checks as the tab apply. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "security_rule_add",
"arguments": {
"site_id": 123,
"rule": "<rule>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site security. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
security_rule_delete
Delete a firewall rule · destructive · permission security:write · REST equivalent DELETE /sites/{site_id}/security/rules/{rule_id}
Removes one rule from the site at Cloudflare. Needs the security:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
rule_id | string | yes | The rule id (see GET .../security). |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "security_rule_delete",
"arguments": {
"site_id": 123,
"rule_id": "rule_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site security. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
security_rule_state
Switch a rule on or off, or move it · write · permission security:write · REST equivalent POST /sites/{site_id}/security/rules/{rule_id}/{action}
Rules run in order: the first that matches decides. Needs the security:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
rule_id | string | yes | The rule id (see GET .../security). |
action | string (one of: enable, disable, up, down) | yes | enable / disable the rule, or move it up / down the order. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "security_rule_state",
"arguments": {
"site_id": 123,
"rule_id": "rule_id",
"action": "scan"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site security. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
security_rule_update
Change a firewall rule · write · permission security:write · REST equivalent PUT /sites/{site_id}/security/rules/{rule_id}
Replaces one rule (same shape as when adding it). Only rules made on this dashboard can be changed here. Needs the security:write permission.
| Argument | Type | Required | Description | |
|---|---|---|---|---|
site_id | integer | yes | The site id. | |
rule_id | string | yes | The rule id (see GET .../security). | |
rule | object | yes | The rule, exactly as the tab builds it: {"phase": "http_request_firewall_custom" (default) or "http_ratelimit", "name": "...", "action": one of actions[phase], "enabled": true, and EITHER "builder": {"match": "all" | "any", "conditions": [{"field": one of fields, "op": one of that field's ops, "value": "..." }]} OR "mode": "advanced" with "expression": a Cloudflare rule expression; a rate-limiting rule also takes "requests_per_period" (per 10 seconds per visitor)}. The same checks as the tab apply. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "security_rule_update",
"arguments": {
"site_id": 123,
"rule_id": "rule_id",
"rule": "<rule>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site security. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
security_under_attack
"I'm Under Attack" on or off · write · permission security:write · REST equivalent PUT /sites/{site_id}/security/under-attack
Every visitor gets a short browser check before the site loads while it is on - use it while the site is being hammered, then switch it off. Needs the security:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
on | boolean | yes | true = on, false = off. |
auto_off | string (one of: 1h, 6h, 24h, never) | no | When switching on: switch it off again by itself after this long. Default: never. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "security_under_attack",
"arguments": {
"site_id": 123,
"on": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site security. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Wayback restore
Rebuild a website from the public web archive: look a domain up, pick a day, see what would be rebuilt and order it with a restore credit.
wayback_archive
Days the archive holds · read-only · permission wayback:read · REST equivalent GET /wayback/archive/{domain}
The days the public web archive has a copy of the domain's home page on, as the calendar shows. The first look-up of a domain reads the archive in the background: state is "pending" - ask again in a minute until it reads "ready" (or "error", with the reason). Needs the wayback:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain | string | yes | The domain, e.g. old-site.com. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "wayback_archive",
"arguments": {
"domain": "domain"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Wayback restore. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
wayback_get
One restore · read-only · permission wayback:read · REST equivalent GET /wayback/restores/{restore_id}
One restore: its progress and, while it is "planned" (ready to order), a sample of the pages that would be rebuilt and your existing sites it could be restored into. Needs the wayback:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
restore_id | integer | yes | The restore id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "wayback_get",
"arguments": {
"restore_id": "restore_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Wayback restore. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
wayback_order
Order a restore with a restore credit · write · permission wayback:write · REST equivalent POST /wayback/restores/{restore_id}/order
Uses ONE restore credit and starts the rebuild (restore credits are bought in packs on the Wayback page; paying one restore by card through FastSpring, PayPal or crypto is done there too). Restoring into an existing site replaces what it serves. Needs the wayback:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
restore_id | integer | yes | The restore id. |
output | string (one of: static, wordpress) | yes | Static HTML or converted to WordPress. |
target | string (one of: new, existing) | yes | "new" makes a new site (needs a free site slot); "existing" restores into one of your sites of that type (it is overwritten). |
new_domain | string | no | For a new site: its domain (default: the old domain). |
site_id | integer | no | For an existing site: its id. |
accept_terms | boolean | yes | Must be true: you agree to the Terms and Conditions (https://pbn.ltd/terms/), recorded exactly like the box on the order page. |
ack_rights | boolean | yes | Must be true: you confirm you have the right to republish this content (the trademark / copyright acknowledgement on the order page). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "wayback_order",
"arguments": {
"restore_id": "restore_id",
"output": "<output>",
"target": "<target>",
"accept_terms": true,
"ack_rights": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Wayback restore. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
wayback_start
Start a restore (free) · write · permission wayback:write · REST equivalent POST /wayback/restores
Reads that day's copy from the archive and works out what would be rebuilt. Nothing is charged: the restore waits at "planned" until you order it. Needs the wayback:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain | string | yes | The domain to rebuild. |
day | string | yes | A day the archive has a copy of the domain (YYYY-MM-DD). |
output | string (one of: static, wordpress) | no | Static HTML, or converted to WordPress (changeable when ordering). Default: static. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "wayback_start",
"arguments": {
"domain": "<domain>",
"day": "<day>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Wayback restore. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
wayback_status
Wayback restore: credits, prices and restores · read-only · permission wayback:read · REST equivalent GET /wayback
Your restore credits, the price of a restore of each kind (what the page would charge, with your VAT), how many new sites your plan still has room for, and your restores, newest first. Needs the wayback:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "wayback_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Wayback restore. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Hourly backups
The hourly backups add-on of a site: its restore points, a backup now, rolling the site back to an hour, and downloading one.
hourly_backups_download_prepare
Prepare a download of a restore point · write · permission backups:read · REST equivalent POST /sites/{site_id}/hourly-backups/{backup_id}/download
Builds a .tar.gz of that restore point (files and database), as the tab's Download button. The site's hourly backups show the download as "ready" when it can be fetched. Kept for 24 hours. Needs the backups:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
backup_id | integer | yes | The restore point id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "hourly_backups_download_prepare",
"arguments": {
"site_id": 123,
"backup_id": 88001
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Hourly backups. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
hourly_backups_get
Hourly backups of a site · read-only · permission backups:read · REST equivalent GET /sites/{site_id}/hourly-backups
The same as the hourly part of the site's Backups tab: whether hourly backups are on for this site (and paid until when), when the next one runs, every restore point kept, any roll-back in progress and the downloads being prepared. Switching the add-on on is a purchase made in the Backups tab (manage_url); it is never bought over the API. Needs the backups:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "hourly_backups_get",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Hourly backups. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
hourly_backups_now
Take an hourly backup now · write · permission backups:write · REST equivalent POST /sites/{site_id}/hourly-backups/now
Takes a restore point now, as the "Back up now" button (once per site every 10 minutes). It appears among the site's hourly backups within a minute or two. Needs the backups:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "hourly_backups_now",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Hourly backups. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
hourly_backups_restore
Roll the site back to a restore point · destructive · permission backups:write · REST equivalent POST /sites/{site_id}/hourly-backups/{backup_id}/restore
Rolls the site back to exactly how it was at that restore point, as the tab's "Restore this backup" dialog. A backup of how the site looks now is taken first. One roll-back per site at a time; you get an e-mail when it is done. Needs the backups:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
backup_id | integer | yes | The restore point id. |
what | string (one of: both, files, db) | no | Files and database (default), files only, or database only. Default: both. |
confirm | boolean | yes | Must be true: the site is rolled back to that hour. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "hourly_backups_restore",
"arguments": {
"site_id": 123,
"backup_id": 88001,
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Hourly backups. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Mailboxes
Mailboxes on your sites' domains, aliases, forwarders, the catch-all and out-of-office replies. Passwords are never returned.
mail_alias_delete
Remove an alias, forwarder or the catch-all · destructive · permission mail:write · REST equivalent DELETE /sites/{site_id}/mail/aliases
Removes one alias, forwarder or the catch-all. No mailbox or mail is touched. Needs the mail:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
kind | string (one of: alias, forwarder, catchall) | yes | alias = another address for one of your mailboxes; forwarder = mail passed on to another address; catchall = every address that does not exist. |
local | string | no | The name before the @ (not for catchall). |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mail_alias_delete",
"arguments": {
"site_id": 123,
"kind": "<kind>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Mailboxes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mail_alias_save
Add or change an alias, forwarder or the catch-all · write · permission mail:write · REST equivalent PUT /sites/{site_id}/mail/aliases
Saves one alias, forwarder or the catch-all (the same checks as the Mail tab). Needs the mail:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
kind | string (one of: alias, forwarder, catchall) | yes | alias = another address for one of your mailboxes; forwarder = mail passed on to another address; catchall = every address that does not exist. |
local | string | no | The name before the @ (not for catchall). |
destinations | array | yes | Where the mail goes: one or more addresses. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mail_alias_save",
"arguments": {
"site_id": 123,
"kind": "<kind>",
"destinations": "<destinations>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Mailboxes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mail_get
Mail of a site · read-only · permission mail:read · REST equivalent GET /sites/{site_id}/mail
The same as the site's Mail tab: whether PBN.LTD Mail is set up (where = "external" when the domain's mail is at an outside provider), whether its records are published, how many mailboxes the site may have and has, each mailbox with its size and use and out-of-office reply, the aliases, forwarders and catch-all. No password is ever included. Needs the mail:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mail_get",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Mailboxes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mail_mailbox_create
Create a mailbox · write · permission mail:write · REST equivalent POST /sites/{site_id}/mail/mailboxes
Creates a mailbox within what the site may have (402 when an extra mailbox has to be bought first - in the Mail tab). Returns the mail state; the password is never in it. Needs the mail:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
local | string | yes | The name before the @, e.g. "info". |
password | string | no | A password of your own (at least 12 characters and strong enough for the mail server). Write-only: never returned. |
generate | boolean | no | true = we make a strong password; the customer reads it with Show in the Mail tab. It is never returned here. Default: False. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mail_mailbox_create",
"arguments": {
"site_id": 123,
"local": "<local>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Mailboxes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mail_mailbox_delete
Delete a mailbox · destructive · permission mail:write · REST equivalent DELETE /sites/{site_id}/mail/mailboxes/{local}
Deletes the mailbox with everything in it. The site's first (included) mailbox can only go once it is the last one. Needs the mail:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
local | string | yes | The mailbox name before the @, e.g. "info". |
confirm | boolean | yes | Must be true: the mailbox and every message in it are deleted. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mail_mailbox_delete",
"arguments": {
"site_id": 123,
"local": "local",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Mailboxes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mail_mailbox_password
Set a new mailbox password · write · permission mail:write · REST equivalent PUT /sites/{site_id}/mail/mailboxes/{local}/password
Sets a new password (yours, or a generated one read with Show in the Mail tab). Every phone and mail program using the mailbox must then be given the new one. The password is never returned. Needs the mail:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
local | string | yes | The mailbox name before the @, e.g. "info". |
password | string | no | A password of your own (at least 12 characters and strong enough for the mail server). Write-only: never returned. |
generate | boolean | no | true = we make a strong password; the customer reads it with Show in the Mail tab. It is never returned here. Default: False. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mail_mailbox_password",
"arguments": {
"site_id": 123,
"local": "local"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Mailboxes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mail_out_of_office
Out-of-office reply on or off · write · permission mail:write · REST equivalent PUT /sites/{site_id}/mail/mailboxes/{local}/out-of-office
The same as the out-of-office form on the Mail tab. Needs the mail:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
local | string | yes | The mailbox name before the @, e.g. "info". |
enabled | boolean | yes | On or off. |
subject | string | no | The reply's subject. |
body | string | no | The reply's text. |
starts_at | string | no | Optional start (YYYY-MM-DD or an ISO date-time). |
ends_at | string | no | Optional end (YYYY-MM-DD or an ISO date-time). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mail_out_of_office",
"arguments": {
"site_id": 123,
"local": "local",
"enabled": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Mailboxes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mail_setup
Set mail up for a site · write · permission mail:write · REST equivalent POST /sites/{site_id}/mail/set-up
The Mail tab's "Set up mail": makes the site's mail account and its signing keys and publishes its records where we answer DNS for the domain. Needs the mail:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mail_setup",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Mailboxes. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Rank tracking
Where do your keywords rank in Google? Track any domain - hosted with us or not - in any country, language and device, with the full position history.
rank_domain
One tracked domain with its keywords · read-only · permission rank:read · REST equivalent GET /rank/domains/{domain_id}
The domain, each Google version it is tracked in (country, language, device), and every keyword in each with its current position (null = not in the first 100 results). Needs the rank:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain_id | integer | yes | The tracked domain id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_domain",
"arguments": {
"domain_id": "domain_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Rank tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
rank_domain_add
Track a domain · write · permission rank:write · REST equivalent POST /rank/domains
Starts tracking a domain (hosted with us or anywhere else). Then add a Google version and keywords. Adding a domain you track already returns it. Needs the rank:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain | string | yes | The domain, e.g. example.com (a URL or www. is accepted). |
label | string | no | An optional label of your own. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_domain_add",
"arguments": {
"domain": "<domain>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Rank tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
rank_domain_remove
Stop tracking a domain · destructive · permission rank:write · REST equivalent DELETE /rank/domains/{domain_id}
Stops tracking the domain and all its keywords. The history is kept, but re-adding the domain does not restart its keywords - they have to be added again. Needs "confirm": true. Needs the rank:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
domain_id | integer | yes | The tracked domain id. |
confirm | boolean | yes | Must be true: this cannot be undone from the API. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_domain_remove",
"arguments": {
"domain_id": "domain_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Rank tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
rank_domains
List tracked domains · read-only · permission rank:read · REST equivalent GET /rank/domains
Every domain you track, with its keyword count, average position and how many keywords are in the top 10 and top 3. Needs the rank:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_domains",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Rank tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
rank_group_add
Add a Google version to a domain · write · permission rank:write · REST equivalent POST /rank/domains/{domain_id}/groups
Which Google to check the keywords in: country or city, language and device. Your plan sets how many per domain. Adding one that exists returns it. Needs the rank:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain_id | integer | yes | The tracked domain id. |
location_code | integer | yes | A rank-tracking location code (2826 = United Kingdom, 2840 = United States). |
language_code | string | yes | A rank-tracking language code. |
device | string (one of: desktop, mobile) | yes | Desktop or mobile results. |
name | string | no | An optional name of your own. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_group_add",
"arguments": {
"domain_id": "domain_id",
"location_code": 1,
"language_code": "<language_code>",
"device": "<device>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Rank tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
rank_keyword
One keyword and its position history · read-only · permission rank:read · REST equivalent GET /rank/keywords/{keyword_id}
The keyword and every completed check in the period: the position (null = not in the first 100 results) and the page of yours that ranked. Needs the rank:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
keyword_id | integer | yes | The keyword id. |
days | integer | no | How many days of history (1-400). Default: 90. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_keyword",
"arguments": {
"keyword_id": "keyword_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Rank tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
rank_keyword_check
Check a keyword now · write · permission rank:write · REST equivalent POST /rank/keywords/{keyword_id}/check
Asks for an extra check of this keyword now (results usually within the hour). The same bounds as the button: once per keyword in 24 hours, a daily number per account, the month's check budget (past it the check goes in the standard queue; once the month's extra checks are used up it is refused until the 1st), and not while checks are paused. Scheduled checks carry on regardless. Needs the rank:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
keyword_id | integer | yes | The keyword id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_keyword_check",
"arguments": {
"keyword_id": "keyword_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Rank tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
rank_keyword_remove
Remove a keyword · destructive · permission rank:write · REST equivalent DELETE /rank/keywords/{keyword_id}
Removes the keyword AND its position history (the same as the Remove button). Needs "confirm": true. Needs the rank:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
keyword_id | integer | yes | The keyword id. |
confirm | boolean | yes | Must be true: this cannot be undone from the API. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_keyword_remove",
"arguments": {
"keyword_id": "keyword_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Rank tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
rank_keywords_add
Add keywords · write · permission rank:write · REST equivalent POST /rank/groups/{group_id}/keywords
Adds keywords to a Google version with the panel's own rule: what fits inside your plan is added, the rest is listed in not_added (add a keyword pack or move up a plan). The first check runs within the hour. Keywords you track already are skipped. Needs the rank:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
group_id | integer | yes | The Google version (keyword group) id of the domain. |
keywords | array | yes | The keywords (or one string, one per line or comma separated). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_keywords_add",
"arguments": {
"group_id": "group_id",
"keywords": "<keywords>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Rank tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
rank_languages
Search languages · read-only · permission rank:read · REST equivalent GET /rank/languages
The language codes to use for a Google version. Needs the rank:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_languages",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Rank tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
rank_locations
Find a Google location · read-only · permission rank:read · REST equivalent GET /rank/locations
The location codes to use for a Google version. Up to 40 matches. Needs the rank:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
q | string | no | Part of a country, region or city name. Empty = the countries. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_locations",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Rank tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
rank_plans
Rank tracking plans and prices · read-only · permission rank:read · REST equivalent GET /rank/plans
The plans (keywords, Google versions per domain, cadence), the extra-keyword pack and the extra Google versions pack with their live prices (US dollars a month, before VAT). Buying happens on plans_url in the browser - the payment needs your own approval at the payment provider and the Terms tick, so the API never charges. Needs the rank:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_plans",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Rank tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
rank_status
Rank tracking: plan and usage · read-only · permission rank:read · REST equivalent GET /rank
Whether rank tracking is on this account, the plan, how many keywords it covers and how many are tracked, how often they are checked (weekly or daily), the Google versions allowed per domain, the number of tracked domains and where the month's check budget stands (ok: daily plans checked daily and fast extra checks; budget: checked weekly and extra checks in the standard queue; limit: "Check now" paused until resets_on, weekly checks carry on). When it is not on the account, plans_url is the page to buy it. Needs the rank:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "rank_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Rank tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
AI visibility
Do AI assistants (ChatGPT, Google AI answers and others) name your brand when people ask the questions you care about? Track prompts, answers and competitors.
aivis_brand
One brand: prompts, latest answers, competitors, trend · read-only · permission aivis:read · REST equivalent GET /ai-visibility/brands/{brand_id}
The brand, every prompt with the latest answer from each AI engine, the domains cited instead of you, the daily visibility trend and starter prompts you could add. Needs the aivis:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
brand_id | integer | yes | The tracked brand id. |
days | integer | no | Days of daily visibility trend (1-400). Default: 90. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "aivis_brand",
"arguments": {
"brand_id": "brand_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in AI visibility. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
aivis_brand_add
Track a brand · write · permission aivis:write · REST equivalent POST /ai-visibility/brands
Starts tracking a brand (any domain, hosted with us or not). Then add prompts. Adding one you track already returns it. Needs the aivis:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain | string | yes | The brand's domain, e.g. example.com. |
brand_name | string | no | The name people use for it (optional). |
location_code | integer | no | Country the answers should be for (a rank-tracking location code; default United States). |
language_code | string | no | Language of the answers (default English). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "aivis_brand_add",
"arguments": {
"domain": "<domain>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in AI visibility. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
aivis_brand_remove
Stop tracking a brand · destructive · permission aivis:write · REST equivalent DELETE /ai-visibility/brands/{brand_id}
Stops tracking the brand and all its prompts. The history is kept, but re-adding the brand does not restart its prompts. Needs "confirm": true. Needs the aivis:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
brand_id | integer | yes | The tracked brand id. |
confirm | boolean | yes | Must be true: this cannot be undone from the API. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "aivis_brand_remove",
"arguments": {
"brand_id": "brand_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in AI visibility. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
aivis_brand_update
Change a brand's name or market · write · permission aivis:write · REST equivalent PATCH /ai-visibility/brands/{brand_id}
The next round of answers uses the new settings. Needs the aivis:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
brand_id | integer | yes | The tracked brand id. |
brand_name | string | no | The name people use for it. |
location_code | integer | no | Country of the answers. |
language_code | string | no | Language of the answers. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "aivis_brand_update",
"arguments": {
"brand_id": "brand_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in AI visibility. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
aivis_brands
List tracked brands · read-only · permission aivis:read · REST equivalent GET /ai-visibility/brands
Every brand (domain) you track, with its visibility numbers. Needs the aivis:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "aivis_brands",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in AI visibility. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
aivis_plans
AI visibility plans and engines · read-only · permission aivis:read · REST equivalent GET /ai-visibility/plans
The plans and the extra-prompt pack with their live prices (US dollars a month, before VAT), and the AI engines a prompt can be asked of (their keys are what engines takes). Buying happens on plans_url in the browser - the API never charges. Needs the aivis:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "aivis_plans",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in AI visibility. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
aivis_prompt
One prompt and the AI engines' answers · read-only · permission aivis:read · REST equivalent GET /ai-visibility/prompts/{prompt_id}
What each AI engine answered last time (the full answer text, as on the prompt page) and the last 30 results. Needs the aivis:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt_id | integer | yes | The prompt id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "aivis_prompt",
"arguments": {
"prompt_id": "prompt_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in AI visibility. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
aivis_prompt_check
Ask the AI engines again · write · permission aivis:write · REST equivalent POST /ai-visibility/prompts/{prompt_id}/check
Asks the prompt's AI engines again now (answers usually within the hour). The same bounds as the button: once per prompt in 24 hours and a daily number per account, and not while checks are paused. Needs the aivis:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt_id | integer | yes | The prompt id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "aivis_prompt_check",
"arguments": {
"prompt_id": "prompt_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in AI visibility. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
aivis_prompt_engines
Choose the AI engines for a prompt · write · permission aivis:write · REST equivalent PATCH /ai-visibility/prompts/{prompt_id}
Sets which AI engines the next round asks for this prompt. Needs the aivis:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt_id | integer | yes | The prompt id. |
engines | array | yes | AI engine keys, as the AI visibility plans list them. Keys not on sale are ignored; none left means the default set. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "aivis_prompt_engines",
"arguments": {
"prompt_id": "prompt_id",
"engines": "<engines>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in AI visibility. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
aivis_prompt_remove
Remove a prompt · destructive · permission aivis:write · REST equivalent DELETE /ai-visibility/prompts/{prompt_id}
Removes the prompt AND its answers history (the same as the Remove button). Needs "confirm": true. Needs the aivis:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
prompt_id | integer | yes | The prompt id. |
confirm | boolean | yes | Must be true: this cannot be undone from the API. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "aivis_prompt_remove",
"arguments": {
"prompt_id": "prompt_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in AI visibility. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
aivis_prompts_add
Add prompts · write · permission aivis:write · REST equivalent POST /ai-visibility/brands/{brand_id}/prompts
Adds prompts with the panel's own rule: what fits inside your plan is added, the rest is listed in not_added (add a prompt pack or move up a plan). The first answers usually arrive within the hour. Needs the aivis:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
brand_id | integer | yes | The tracked brand id. |
prompts | array | yes | Whole questions, the way somebody would ask them (or one string, one per line). 6-400 characters each. |
engines | array | no | AI engine keys, as the AI visibility plans list them; absent means the default set. Keys that are not on sale are ignored. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "aivis_prompts_add",
"arguments": {
"brand_id": "brand_id",
"prompts": "<prompts>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in AI visibility. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
aivis_status
AI visibility: plan and usage · read-only · permission aivis:read · REST equivalent GET /ai-visibility
Whether AI visibility is on this account, the plan, how many prompts it covers and how many are tracked, how often they are asked, the number of tracked brands and your average visibility (% of answers that named you). When it is not on the account, plans_url is the page to buy it. Needs the aivis:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "aivis_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in AI visibility. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Index checker
Is each page in Google? Track any URL - on your sites or any other - and read its history.
index_add
Track pages · write · permission index:write · REST equivalent POST /index-checker/urls
Adds pages with the panel's own rules: a page that would pass the plan's URL limit or its checks a month is not added (see not_added). The first check runs within a few minutes. Needs the index:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
urls | array | yes | Page addresses (up to 5,000). Any site, hosted with us or not. |
frequency | string (one of: daily, weekly, monthly) | no | How often the page is checked. Daily uses ~30 checks a month, weekly ~4.3, monthly 1. Default: weekly. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "index_add",
"arguments": {
"urls": "<urls>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Index checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
index_check
Check a page now · write · permission index:write · REST equivalent POST /index-checker/urls/{url_id}/check
Checks the page immediately (usually 1-2 seconds). Uses one check of the monthly allowance; at most once an hour per page and a daily number per account. Needs the index:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
url_id | integer | yes | The tracked page id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "index_check",
"arguments": {
"url_id": "url_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Index checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
index_delete
Stop tracking a page · destructive · permission index:write · REST equivalent DELETE /index-checker/urls/{url_id}
Stops tracking. Its history is kept and comes back if you add the page again. Needs the index:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
url_id | integer | yes | The tracked page id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "index_delete",
"arguments": {
"url_id": "url_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Index checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
index_get
One tracked page and its history · read-only · permission index:read · REST equivalent GET /index-checker/urls/{url_id}
The page and up to 100 of its most recent checks. Needs the index:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
url_id | integer | yes | The tracked page id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "index_get",
"arguments": {
"url_id": "url_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Index checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
index_list
List tracked pages · read-only · permission index:read · REST equivalent GET /index-checker/urls
Every page you track, newest first, with its current status. Needs the index:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
status | string (one of: indexed, not_indexed, pending) | no | Only pages in this state. |
host | string | no | Only pages on this domain (www. ignored). |
search | string | no | Part of the address. |
limit | integer | no | Items per page. Default: 50. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "index_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Index checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
index_status
Index checker: plan and usage · read-only · permission index:read · REST equivalent GET /index-checker
The plan, how many pages may be tracked, checks a month included and used, the checks your chosen frequencies plan for, and how many tracked pages are indexed. Needs the index:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "index_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Index checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
index_update
Change how often a page is checked · write · permission index:write · REST equivalent PATCH /index-checker/urls/{url_id}
Refused when the new frequency would pass the plan's checks a month. Needs the index:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
url_id | integer | yes | The tracked page id. |
frequency | string (one of: daily, weekly, monthly) | no | How often the page is checked. Daily uses ~30 checks a month, weekly ~4.3, monthly 1. Default: weekly. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "index_update",
"arguments": {
"url_id": "url_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Index checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Redis
The Redis object cache add-on: whether it is on, and switching it on or off per site.
redis_site
Redis on one site · read-only · permission redis:read · REST equivalent GET /sites/{site_id}/redis
Whether Redis is on for this site: "queued" while a switch is being applied (up to a minute), then "on" or "off"; "error" with the reason in detail. Needs the redis:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "redis_site",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Redis. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
redis_status
Redis: the add-on and your sites · read-only · permission redis:read · REST equivalent GET /redis
Whether Redis is on for the account (plan, memory per server, paid until) and its state on each of your sites. Buying, renewing and cancelling are done on the Redis page (page_url). Needs the redis:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "redis_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Redis. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
redis_switch
Switch Redis on or off for a site · write · permission redis:write · REST equivalent PUT /sites/{site_id}/redis
The same as the site's Redis switch. WordPress sites get the object cache installed and configured for them (and removed again when switched off, the site works exactly as before); other site types get the connection settings on the Redis page. Needs Redis on the account (402 otherwise - it is bought on the Redis page). Needs the redis:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
on | boolean | yes | true = on, false = off. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "redis_switch",
"arguments": {
"site_id": 123,
"on": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Redis. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Website firewall
The firewall in front of every site: whether it is on, and what it recently blocked.
firewall_get
Website firewall of a site · read-only · permission sites:read · REST equivalent GET /sites/{site_id}/firewall
The same as the site's "Website firewall" tab: whether the firewall is on for this site, and the requests it recently refused (when, what was asked for, why, and the reference number the visitor was shown). Signing in, editing, uploads, plugin installs, the database tool and the file manager are never blocked. If something ordinary was blocked, open a ticket with its reference number. Switching the firewall off for a site is done by support. Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
limit | integer | no | How many recent blocks to return (newest first). Default: 25. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "firewall_get",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Website firewall. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
SEO tools
The SEO tools suite: every tool, your subscription, and prices with the bundle and yearly discounts.
seo_quote
Price a selection of SEO tools · read-only · permission seo:read · REST equivalent POST /seo/quote
The exact price the checkout would charge for a NEW order of these tools (before any existing subscription is taken into account), VAT for your account included. Nothing is stored. Needs the seo:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
tools | array | yes | [{"tool": "rank", "plan": "pro", "packs": 0, "extras": 0}, ...] - SEO tool keys; "extras" = the tool's second pack (its extra_pack). |
months | integer | no | 1, 3, 6 or 12. Default: 1. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "seo_quote",
"arguments": {
"tools": "<tools>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in SEO tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
seo_subscription
Your SEO tools subscription · read-only · permission seo:read · REST equivalent GET /seo/subscription
What your SEO tools order covers today (tools, plans, period, discounts) and the next period if it is already paid. Tools bought on their own (not through the SEO checkout) are not in this order. Needs the seo:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "seo_subscription",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in SEO tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
seo_tools
List the SEO tools · read-only · permission seo:read · REST equivalent GET /seo/tools
Every SEO tool, whether it needs hosting, whether your account has it, its plans and pack (prices per month before VAT, from the live price rows), and the current bundle and yearly discounts. Needs the seo:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "seo_tools",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in SEO tools. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Keyword research + domain overview
Keyword ideas with volume, CPC, competition and difficulty; any domain's ranked keywords, traffic, top pages, competitors and keyword gaps.
research_domain
Domain overview report · write · permission research:run · REST equivalent POST /domain-overview
Ranked keywords (top 100 by traffic), estimated monthly traffic, position spread, top pages and competitors. Uses 1 credit - or none if this account asked in the last 14 days. Needs the research:run permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain | string | yes | Any domain, like example.com. |
location_code | integer | no | A research market country code (2840 = United States). Default: 2840. |
language_code | string | no | A research market language code (default: the country's main language). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "research_domain",
"arguments": {
"domain": "<domain>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Keyword research + domain overview. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
research_gap
Keyword gap vs competitors · write · permission research:run · REST equivalent POST /domain-overview/gap
Keywords the competitors rank for and your domain does not, most-shared first. One credit per competitor not asked in the last 14 days. Needs the research:run permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain | string | yes | Your domain. |
competitors | array | yes | 1 to 3 competitor domains. |
location_code | integer | no | A research market country code (2840 = United States). Default: 2840. |
language_code | string | no | A research market language code (default: the country's main language). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "research_gap",
"arguments": {
"domain": "<domain>",
"competitors": "<competitors>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Keyword research + domain overview. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
research_keywords
Research a keyword · write · permission research:run · REST equivalent POST /keyword-research
Up to 100 keywords, by search volume. Uses 1 credit - or none if this account asked the same question in the last 30 days. Needs the research:run permission.
| Argument | Type | Required | Description |
|---|---|---|---|
keyword | string | yes | The seed keyword (up to 80 characters), or for kind=site a site or page address (up to 255 characters). |
kind | string (one of: matching, related, questions, ideas, site) | no | matching = longer terms containing the keyword; related = what people also search; questions = question searches; ideas = broader ideas from the same topic; site = the searches a whole site or one page (its full address) is found for. Default: matching. |
location_code | integer | no | A research market country code (2840 = United States). Default: 2840. |
language_code | string | no | A research market language code (default: the country's main language). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "research_keywords",
"arguments": {
"keyword": "<keyword>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Keyword research + domain overview. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
research_list
One keyword list · read-only · permission research:read · REST equivalent GET /keyword-research/lists/{list_id}
The keywords in one of your lists, with their saved metrics. Needs the research:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
list_id | integer | yes | The list id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "research_list",
"arguments": {
"list_id": "list_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Keyword research + domain overview. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
research_lists
Saved keyword lists · read-only · permission research:read · REST equivalent GET /keyword-research/lists
Your saved keyword lists. Needs the research:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "research_lists",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Keyword research + domain overview. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
research_local
Keyword search volume in a region or city · write · permission research:run · REST equivalent POST /keyword-research/local-volumes
Monthly searches for each keyword in that area. Uses 4 credits (or none if asked before). Needs the research:run permission.
| Argument | Type | Required | Description |
|---|---|---|---|
keywords | array | yes | Up to 1,000 keywords. |
location_code | integer | yes | A research market country code (2840 = United States). |
language_code | string | no | A research market language code (default: the country's main language). Default: en. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "research_local",
"arguments": {
"keywords": "<keywords>",
"location_code": 1
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Keyword research + domain overview. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
research_markets
Countries and languages covered · read-only · permission research:read · REST equivalent GET /research/markets
The countries (location_code) and languages (language_code) keyword research and domain overview answer for. Free. Needs the research:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "research_markets",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Keyword research + domain overview. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
research_status
Research: plans and credits used · read-only · permission research:read · REST equivalent GET /research
For keyword research and domain overview: whether it is on the account, the plan, credits a month and credits used this month. Needs the research:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "research_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Keyword research + domain overview. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Domain vetting
Check a domain before you buy it, and get told when a new aged domain matches a search you saved.
alerts_create
Save a domain search · write · permission vetting:write · REST equivalent POST /domain-alerts
Domains matching it today are the starting point, not news: from now on you get an e-mail when a NEW one matches. Needs the vetting:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
name | string | no | What to call it (we name it after the filters if empty). |
filters | string | no | The aged-domain list's own filter, as a query string, e.g. "tld=.com&dr_min=30&price_max=300". |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "alerts_create",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Domain vetting. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
alerts_delete
Delete a saved search · destructive · permission vetting:write · REST equivalent DELETE /domain-alerts/{alert_id}
Deletes the saved search and stops its e-mails. What it already told you about is forgotten with it. Needs the vetting:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
alert_id | integer | yes | The saved search id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "alerts_delete",
"arguments": {
"alert_id": "alert_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Domain vetting. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
alerts_list
List your saved domain searches · read-only · permission vetting:read · REST equivalent GET /domain-alerts
Every aged-domain search you saved, what it looks for and how many domains match it now. Needs the vetting:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "alerts_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Domain vetting. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
alerts_matches
The domains a saved search matches now · read-only · permission vetting:read · REST equivalent GET /domain-alerts/{alert_id}/matches
The aged domains this saved search matches at this moment, with the price you would pay and a link to each listing. Needs the vetting:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
alert_id | integer | yes | The saved search id. |
limit | integer | no | How many to return. Default: 50. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "alerts_matches",
"arguments": {
"alert_id": "alert_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Domain vetting. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
vetting_get
One vetting report · read-only · permission vetting:read · REST equivalent GET /domain-vetting/reports/{report_id}
The whole report: the verdict, every reason, the key numbers, the anchor texts, the link and traffic history and what the site was in the web archive. Needs the vetting:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
report_id | integer | yes | The report id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "vetting_get",
"arguments": {
"report_id": "report_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Domain vetting. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
vetting_list
List your vetting reports · read-only · permission vetting:read · REST equivalent GET /domain-vetting/reports
Every vetting report this account has run, newest first, with its verdict and score. Needs the vetting:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
verdict | string (one of: clean, care, risk) | no | Only reports with this verdict. |
search | string | no | Part of the domain name. |
limit | integer | no | Items per page. Default: 50. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "vetting_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Domain vetting. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
vetting_run
Vet a domain · write · permission vetting:write · REST equivalent POST /domain-vetting/reports
Runs a full report and returns it. Spends one report credit, unless you already vetted this domain recently - then the report you already have comes back and nothing is charged. Needs the vetting:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain | string | yes | The domain to vet, e.g. example.com. |
location_code | integer | no | The market its search data is read for (2840 = United States). Default: 2840. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "vetting_run",
"arguments": {
"domain": "<domain>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Domain vetting. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
vetting_status
Domain vetting: credits and usage · read-only · permission vetting:read · REST equivalent GET /domain-vetting
How many report credits this account holds, how many reports it has run, and the prices. Needs the vetting:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "vetting_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Domain vetting. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Footprint checker
What publicly joins your sites together - shared addresses, nameservers, tracking codes, themes, icons, footers, links, mail records and certificate history - with a fix for each.
footprint_check
Run a check now · write · permission footprint:write · REST equivalent POST /footprint/check
Queues a check. Results are usually ready within a few minutes, in the footprint report it returns. Uses one of your monthly "Check now" runs; the automatic checks never count against that. Needs the footprint:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
scope | string (one of: site, group, account, custom) | no | What to check: one site, a site group, the whole account, or a selection of domains you own. Default: account. |
scope_id | integer | no | The site id or site group id, for those scopes. |
domains | array | no | For scope=custom: domains on your account. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "footprint_check",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Footprint checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
footprint_get
One report and its findings · read-only · permission footprint:read · REST equivalent GET /footprint/reports/{run_id}
The report with every finding: what it is, what it means, which of your sites it affects and how to fix it. A finding marked owner: platform is one we are handling for you - there is nothing for you to do about it. Needs the footprint:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
run_id | integer | yes | The report id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "footprint_get",
"arguments": {
"run_id": 7782
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Footprint checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
footprint_runs
List footprint reports · read-only · permission footprint:read · REST equivalent GET /footprint/reports
Every finished report, newest first. Needs the footprint:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
limit | integer | no | Items per page. Default: 25. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "footprint_runs",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Footprint checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
footprint_site_add
Include a site hosted elsewhere · write · permission footprint:write · REST equivalent POST /footprint/external-sites
Adds a site hosted elsewhere. If you have no slots left this answers 422 naming the pack that would cover it - nothing is bought automatically. Needs the footprint:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain | string | yes | e.g. example.com |
group | string | no | Your own grouping for it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "footprint_site_add",
"arguments": {
"domain": "<domain>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Footprint checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
footprint_site_remove
Stop including a site hosted elsewhere · destructive · permission footprint:write · REST equivalent DELETE /footprint/external-sites/{site_id}
Removes it and frees its slot straight away. Needs the footprint:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The id from /footprint/external-sites. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "footprint_site_remove",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Footprint checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
footprint_sites
Sites you host elsewhere · read-only · permission footprint:read · REST equivalent GET /footprint/external-sites
The sites hosted elsewhere that are included in your checks. Sites hosted with us are always included and never use a slot. Needs the footprint:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "footprint_sites",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Footprint checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
footprint_status
Footprint checker: plan, usage and latest score · read-only · permission footprint:read · REST equivalent GET /footprint
Your plan, how often checks run, how many external sites you may hold and how many you are using, and the score from the most recent check. Needs the footprint:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "footprint_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Footprint checker. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Site audit
Crawl a site you own and find what is holding it back, with a fix for each finding. Richer for sites hosted with us.
audit_get
One audit and its findings · read-only · permission audit:read · REST equivalent GET /site-audit/audits/{audit_id}
The audit with every finding: what it is, what it means, which pages it affects and how to fix it. A finding with source: server comes from your hosting with us rather than from the crawl. Needs the audit:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
audit_id | integer | yes | The audit id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "audit_get",
"arguments": {
"audit_id": "audit_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site audit. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
audit_list
List audits · read-only · permission audit:read · REST equivalent GET /site-audit/audits
Your finished audits, newest first. Needs the audit:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
host | string | no | Only audits of this site. |
limit | integer | no | Default: 25. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "audit_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site audit. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
audit_pages
The pages an audit fetched · read-only · permission audit:read · REST equivalent GET /site-audit/audits/{audit_id}/pages
Every page the crawl fetched, with what was measured on it. Needs the audit:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
audit_id | integer | yes | The audit id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "audit_pages",
"arguments": {
"audit_id": "audit_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site audit. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
audit_start
Audit a site · write · permission audit:write · REST equivalent POST /site-audit/audits
Queues an audit; results are usually ready within a few minutes, in the audit it returns. A site whose ownership you have not proved is crawled shallowly (see pages in the response); verifying it unlocks a full crawl. Needs the audit:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
url | string | yes | The site to audit, e.g. https://example.com/ |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "audit_start",
"arguments": {
"url": "<url>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site audit. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
audit_status
Site audit: plan and usage · read-only · permission audit:read · REST equivalent GET /site-audit
Your plan, audits a month included and used, the page cap per audit, and your most recent audit. Needs the audit:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "audit_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site audit. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
audit_verification
How to prove a site is yours · read-only · permission audit:read · REST equivalent GET /site-audit/verification
The three ways to prove a site is yours. Any one of them is enough, and a site hosted with us needs none. Needs the audit:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
host | string | yes | e.g. example.com |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "audit_verification",
"arguments": {
"host": "<host>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site audit. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
audit_verify
Check the proof now · write · permission audit:write · REST equivalent POST /site-audit/verification
Looks for the DNS record, the meta tag and the file, in that order. Needs the audit:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
host | string | yes | e.g. example.com |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "audit_verify",
"arguments": {
"host": "<host>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Site audit. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Backlink monitor
Are the links you built still there? Watch individual links and whole backlink profiles.
backlinks_add_domain
Watch a backlink profile · write · permission backlinks:write · REST equivalent POST /backlinks/domains
Refused when it would pass the plan's domain limit, or when the chosen cadence would plan more refreshes a month than the plan includes. Needs the backlinks:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain | string | yes | Any domain. |
cadence | string (one of: weekly, monthly, manual) | no | How often the backlink profile is refreshed. A weekly domain uses about 4.3 refreshes a month, monthly 1; "manual" only when you ask. Default: weekly. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_add_domain",
"arguments": {
"domain": "<domain>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backlink monitor. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_add_links
Watch links · write · permission backlinks:write · REST equivalent POST /backlinks/links
Adds links with the panel's own rules: anything past the plan's link limit is not added (see not_added). Checking a link costs nothing - we fetch the page ourselves. Needs the backlinks:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
links | array | yes | Up to 2,000 objects: {"source_url": "...", "target_url": "...", "anchor": "optional expected anchor text"}. |
frequency | string (one of: daily, weekly, monthly) | no | How often the link is checked. Checking links is included in every plan. Default: weekly. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_add_links",
"arguments": {
"links": "<links>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backlink monitor. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_check_link
Check a link now · write · permission backlinks:write · REST equivalent POST /backlinks/links/{link_id}/check
Fetches the page immediately and re-reads the link. Costs nothing and uses no allowance; at most once every 10 minutes per link. Needs the backlinks:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
link_id | integer | yes | The watched link id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_check_link",
"arguments": {
"link_id": "link_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backlink monitor. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_delete_domain
Stop watching a backlink profile · destructive · permission backlinks:write · REST equivalent DELETE /backlinks/domains/{domain_id}
Stops watching the profile: no more scheduled refreshes, and it no longer counts towards your plan. Nothing is charged. Needs the backlinks:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
domain_id | integer | yes | The watched domain id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_delete_domain",
"arguments": {
"domain_id": "domain_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backlink monitor. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_delete_link
Stop watching a link · destructive · permission backlinks:write · REST equivalent DELETE /backlinks/links/{link_id}
Stops watching. Its history is kept and comes back if you add the link again. Needs the backlinks:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
link_id | integer | yes | The watched link id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_delete_link",
"arguments": {
"link_id": "link_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backlink monitor. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_domain
One backlink profile · read-only · permission backlinks:read · REST equivalent GET /backlinks/domains/{domain_id}
The profile with its top referring domains, anchors, linked pages and monthly history. Reads what is stored - it never spends a refresh. Needs the backlinks:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain_id | integer | yes | The watched domain id. |
show | string (one of: live, new, lost) | no | Which referring domains to return. Default: live. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_domain",
"arguments": {
"domain_id": "domain_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backlink monitor. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_domains
List watched backlink profiles · read-only · permission backlinks:read · REST equivalent GET /backlinks/domains
Every domain whose backlink profile you watch, most recently added first, with its latest totals (backlinks, referring domains, referring domains won and lost in the last 30 days) and when it was last refreshed. Reads what is stored - it never spends a refresh. Needs the backlinks:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
limit | integer | no | Items per page. Default: 50. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_domains",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backlink monitor. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_link
One watched link and its history · read-only · permission backlinks:read · REST equivalent GET /backlinks/links/{link_id}
The link and up to 100 of its most recent checks. Needs the backlinks:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
link_id | integer | yes | The watched link id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_link",
"arguments": {
"link_id": "link_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backlink monitor. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_links
List watched links · read-only · permission backlinks:read · REST equivalent GET /backlinks/links
Every link you watch, problems first. Needs the backlinks:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
status | string (one of: live, lost, changed, pending, error, problem) | no | Only links in this state. "problem" means gone or changed. |
host | string | no | Only links from or to this domain (www. ignored). |
search | string | no | Part of an address or an anchor. |
limit | integer | no | Items per page. Default: 50. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_links",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backlink monitor. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_refresh_domain
Refresh a backlink profile now · write · permission backlinks:write · REST equivalent POST /backlinks/domains/{domain_id}/refresh
Uses one profile refresh of the monthly allowance, unless a recent shared snapshot of that domain can be reused, in which case it costs nothing. At most once a day per domain. Needs the backlinks:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain_id | integer | yes | The watched domain id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_refresh_domain",
"arguments": {
"domain_id": "domain_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backlink monitor. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_status
Backlink monitor: plan and usage · read-only · permission backlinks:read · REST equivalent GET /backlinks
The plan, how many links and profiles may be watched, profile refreshes a month included and used, the refreshes your chosen cadences plan for, and how many watched links are live, gone or changed. Needs the backlinks:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backlink monitor. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
backlinks_update_link
Change how often a link is checked · write · permission backlinks:write · REST equivalent PATCH /backlinks/links/{link_id}
Sets how often this one link is re-checked (daily, weekly or monthly) and schedules its next check to match. The answer is the link with its new frequency. Needs the backlinks:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
link_id | integer | yes | The watched link id. |
frequency | string (one of: daily, weekly, monthly) | no | How often the link is checked. Checking links is included in every plan. Default: weekly. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "backlinks_update_link",
"arguments": {
"link_id": "link_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Backlink monitor. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Brand mentions
Where your brand, domain or product is talked about on the web, and whether the tone is positive or negative.
mentions_add
Listen for a brand · write · permission mentions:write · REST equivalent POST /brand-mentions/brands
Refused when it would pass the plan's brand limit, or when the chosen schedule would plan more checks a month than the plan includes. Needs the mentions:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
phrase | string | yes | A brand, domain, product or person to listen for. |
frequency | string (one of: daily, weekly, monthly) | no | How often we listen. Daily uses ~30 checks a month, weekly ~4.3, monthly 1. Default: weekly. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mentions_add",
"arguments": {
"phrase": "<phrase>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Brand mentions. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mentions_brand
One brand and its mentions · read-only · permission mentions:read · REST equivalent GET /brand-mentions/brands/{brand_id}
Reads what is stored - it never spends a check. Needs the mentions:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
brand_id | integer | yes | The tracked brand id. |
tone | string (one of: positive, neutral, negative) | no | Only mentions with this tone. |
limit | integer | no | How many mentions to return. Default: 100. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mentions_brand",
"arguments": {
"brand_id": "brand_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Brand mentions. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mentions_brands
List brands tracked for mentions · read-only · permission mentions:read · REST equivalent GET /brand-mentions/brands
Every brand phrase you track, most recently added first, with its mention counts by sentiment, visibility and when it was last checked. Reads what is stored - it never runs a check. Needs the mentions:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
limit | integer | no | Items per page. Default: 50. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mentions_brands",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Brand mentions. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mentions_check
Check a brand now · write · permission mentions:write · REST equivalent POST /brand-mentions/brands/{brand_id}/check
Uses one check of the monthly allowance, unless a recent shared snapshot of that phrase can be reused, in which case it costs nothing. At most once a day per brand. Needs the mentions:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
brand_id | integer | yes | The tracked brand id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mentions_check",
"arguments": {
"brand_id": "brand_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Brand mentions. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mentions_delete
Stop listening for a brand · destructive · permission mentions:write · REST equivalent DELETE /brand-mentions/brands/{brand_id}
Stops listening. Everything already found is kept. Needs the mentions:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
brand_id | integer | yes | The tracked brand id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mentions_delete",
"arguments": {
"brand_id": "brand_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Brand mentions. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mentions_list
Every mention across all your brands · read-only · permission mentions:read · REST equivalent GET /brand-mentions/mentions
Newest first. Needs the mentions:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
tone | string (one of: positive, neutral, negative) | no | Only mentions with this tone. |
brand_id | integer | no | Only mentions of this brand. |
search | string | no | Part of a title, domain or snippet. |
limit | integer | no | Items per page. Default: 50. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mentions_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Brand mentions. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mentions_status
Brand mentions: plan and usage · read-only · permission mentions:read · REST equivalent GET /brand-mentions
The plan, how many phrases may be tracked, checks a month included and used, the checks your chosen schedules plan for, and the overall sentiment split. Needs the mentions:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mentions_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Brand mentions. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mentions_update
Change how often we listen · write · permission mentions:write · REST equivalent PATCH /brand-mentions/brands/{brand_id}
Sets how often we search for new mentions of this phrase. Refused with validation_failed when the new pace would plan more checks a month than your plan includes. The next check is scheduled from now at the new pace. Needs the mentions:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
brand_id | integer | yes | The tracked brand id. |
frequency | string (one of: daily, weekly, monthly) | no | How often we listen. Daily uses ~30 checks a month, weekly ~4.3, monthly 1. Default: weekly. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mentions_update",
"arguments": {
"brand_id": "brand_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Brand mentions. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Local rankings
Where a business sits in Google's map results and local results, town by town.
local_add_keywords
Track more local keywords · write · permission local:write · REST equivalent POST /local-rankings/keywords
Adds keywords to one of your towns. Refused before anything is spent if the month would not fit inside your plan. Needs the local:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
town_id | integer | yes | The id of one of your towns. |
keywords | array | yes | The keywords to track there. |
frequency | string (one of: daily, weekly, monthly) | no | How often to check them. Lowered silently if your plan checks less often. Default: weekly. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "local_add_keywords",
"arguments": {
"town_id": 1,
"keywords": "<keywords>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Local rankings. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
local_business
One business · read-only · permission local:read · REST equivalent GET /local-rankings/businesses/{business_id}
One business: its profile facts, the towns it is searched from, and every change we have seen to its listing. Needs the local:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
business_id | integer | yes | The business id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "local_business",
"arguments": {
"business_id": "business_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Local rankings. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
local_businesses
List your businesses · read-only · permission local:read · REST equivalent GET /local-rankings/businesses
Every business you track, with the facts of its Google business profile as we last read them and how it is doing in the map results. Needs the local:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "local_businesses",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Local rankings. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
local_check_now
Check keywords now · write · permission local:write · REST equivalent POST /local-rankings/check
Puts those keywords at the front of the queue. They are checked within a few minutes and each one uses a check from this month's allowance. Needs the local:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
keyword_ids | array | yes | The keyword ids to check (up to 100). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "local_check_now",
"arguments": {
"keyword_ids": "<keyword_ids>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Local rankings. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
local_history
The history of one keyword · read-only · permission local:read · REST equivalent GET /local-rankings/keywords/{keyword_id}/history
Every check we have made of that keyword, so you can chart it yourself. Needs the local:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
keyword_id | integer | yes | The keyword id. |
limit | integer | no | How many checks to return, newest first. Default: 90. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "local_history",
"arguments": {
"keyword_id": "keyword_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Local rankings. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
local_keywords
List your local keywords · read-only · permission local:read · REST equivalent GET /local-rankings/keywords
Every keyword you track, where it sits in the map results and in the ordinary results, and how it moved since the check before. Needs the local:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
business_id | integer | no | Only keywords of this business. |
state | string (one of: pack, map, nomap) | no | pack = in the top 3 of the map, map = anywhere in the map results, nomap = not in them at all. |
search | string | no | Part of the keyword, business or town. |
limit | integer | no | Items per page. Default: 50. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "local_keywords",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Local rankings. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
local_status
Local rankings: plan and usage · read-only · permission local:read · REST equivalent GET /local-rankings
Your plan, what it covers, how much of this month's checks you have used, and how your businesses are doing on the map overall. Needs the local:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "local_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Local rankings. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Client reports
White-label reports for an agency's clients, built from the SEO tools the account already has.
reports_clients
List your clients · read-only · permission reports:read · REST equivalent GET /client-reports/clients
Every client you report on, what of theirs a report covers and when the next one is due. Needs the reports:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reports_clients",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Client reports. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reports_get
One report · read-only · permission reports:read · REST equivalent GET /client-reports/reports/{report_id}
The whole report: every section as it was frozen when it was made, the plain "what changed" summary, and the share link while it is live. Needs the reports:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
report_id | integer | yes | The report id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reports_get",
"arguments": {
"report_id": "report_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Client reports. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reports_list
List the reports you have made · read-only · permission reports:read · REST equivalent GET /client-reports/reports
Every report made on this account, newest first. The share link itself is only returned by the single-report endpoint. Needs the reports:read permission. Paginated: the answer's next_cursor is the cursor of the next page.
| Argument | Type | Required | Description |
|---|---|---|---|
client_id | integer | no | Only reports for this client. |
limit | integer | no | Items per page. Default: 25. |
cursor | string | no | The next_cursor value of the previous page; absent for the first page. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reports_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Client reports. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reports_make
Make a report now · write · permission reports:write · REST equivalent POST /client-reports/reports
Builds the report from what the account has already collected - it never spends any of your search credits - and returns it with its share link. Needs the reports:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
client_id | integer | yes | The client. |
send | boolean | no | Also e-mail it to that client's addresses. Default: False. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reports_make",
"arguments": {
"client_id": 1
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Client reports. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reports_revoke
Turn a share link off · destructive · permission reports:write · REST equivalent POST /client-reports/reports/{report_id}/revoke
The link stops working at once for everybody who has it. The report itself is kept and you can turn the link back on from the panel. Needs the reports:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
report_id | integer | yes | The report id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reports_revoke",
"arguments": {
"report_id": "report_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Client reports. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reports_status
Client reports: plan and usage · read-only · permission reports:read · REST equivalent GET /client-reports
Your plan, how many clients and reports it covers and how many you have used this month. Needs the reports:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reports_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Client reports. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Held plugin updates
Plugin updates that stopped a site working were put back automatically; list them and ask for one to be tried again.
updates_holds
List held plugin updates · read-only · permission updates:read · REST equivalent GET /plugin-updates/held
Every plugin update we held back across your sites because it stopped the site working (the same list as the "Held plugin updates" page). "holding" = tried again on the next update run; "blocked" = it broke the site twice, so it waits for a newer version or for you to ask us to try again. Needs the updates:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | no | Only this site. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "updates_holds",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Held plugin updates. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
updates_site_holds
Held plugin updates of one site · read-only · permission updates:read · REST equivalent GET /sites/{site_id}/plugin-updates/held
The held plugin updates of one site (the site page's "Plugin updates" section). Needs the updates:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "updates_site_holds",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Held plugin updates. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
updates_try_again
Try a held plugin update again · write · permission updates:write · REST equivalent POST /plugin-updates/held/{hold_id}/try-again
The "Try again" button. Nothing is installed now: the site's next update run tries this version again, loading the site before and after. If it stops the site working again we put it straight back, as before. Needs the updates:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
hold_id | integer | yes | The held update id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "updates_try_again",
"arguments": {
"hold_id": "hold_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Held plugin updates. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Extra databases
More databases for one site (any site type with a database), each with its own daily backup you can restore.
extradb_cancel
Cancel (or keep) an extra database at the end of its paid months · destructive · permission extradb:write · REST equivalent POST /sites/{site_id}/extra-databases/{db_id}/cancel
Cancelling stops the renewal reminders and removes the database (full copy first) when its paid months end; nothing more is charged. "cancel": false keeps it. Needs "confirm": true. Needs the extradb:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
db_id | integer | yes | The extra database id. |
cancel | boolean | no | true = remove it when its paid months end (a full copy is taken first); false = keep it (withdraw the cancellation). Default: True. |
confirm | boolean | yes | Must be true. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extradb_cancel",
"arguments": {
"site_id": 123,
"db_id": "db_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Extra databases. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extradb_create
Add an extra database · write · permission extradb:write · REST equivalent POST /sites/{site_id}/extra-databases
Adds an extra database where your account gets them free of charge (created in a minute or two). Every other account buys one in the browser: this answers 402 payment_required with details.checkout_url and the price, and never starts a payment. Needs the extradb:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
label | string | yes | The name suffix: 1 to 16 lowercase letters and digits. The database is called site{site_id}_{label}. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extradb_create",
"arguments": {
"site_id": 123,
"label": "<label>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Extra databases. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extradb_delete
Remove an extra database now · destructive · permission extradb:write · REST equivalent DELETE /sites/{site_id}/extra-databases/{db_id}
Removes the database now. A full copy is taken first and kept for the days in removed_copy_kept_days (ask support to put it back). Needs "confirm": true and the database name typed exactly in "name". Paid months are not refunded. Needs the extradb:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
db_id | integer | yes | The extra database id. |
name | string | yes | The database name, typed exactly (e.g. site12345_shop) - the same check as the page. |
confirm | boolean | yes | Must be true. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extradb_delete",
"arguments": {
"site_id": 123,
"db_id": "db_id",
"name": "<name>",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Extra databases. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extradb_get
One extra database · read-only · permission extradb:read · REST equivalent GET /sites/{site_id}/extra-databases/{db_id}
One extra database, with its restore points (its own daily backups, newest first; each id is a point the database can be restored to). Needs the extradb:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
db_id | integer | yes | The extra database id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extradb_get",
"arguments": {
"site_id": 123,
"db_id": "db_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Extra databases. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extradb_list
List extra databases · read-only · permission extradb:read · REST equivalent GET /extra-databases
Every extra database in your account (all sites), with its state, size, paid period and last backup. Credentials are shown on the site's Extra databases page, never here. Needs the extradb:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extradb_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Extra databases. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extradb_restore
Restore an extra database from a backup · destructive · permission extradb:write · REST equivalent POST /sites/{site_id}/extra-databases/{db_id}/restore
Puts the database back as it was at the chosen daily backup: everything written since is replaced. A copy of the database as it is now is taken first. Usually done within a few minutes (you get an e-mail). Needs "confirm": true and the database name typed exactly in "name". Needs the extradb:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
db_id | integer | yes | The extra database id. |
backup | string | yes | A restore point id of this database (restore_points[].id). |
name | string | yes | The database name, typed exactly (e.g. site12345_shop) - the same check as the page. |
confirm | boolean | yes | Must be true. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extradb_restore",
"arguments": {
"site_id": 123,
"db_id": "db_id",
"backup": "<backup>",
"name": "<name>",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Extra databases. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
extradb_site
Extra databases of a site, price and allowance · read-only · permission extradb:read · REST equivalent GET /sites/{site_id}/extra-databases
Whether this site can have extra databases (every site type with a database), the price per database per month (before VAT, from the live price row), how many a site may have, the site's database allowance shared by its main and extra databases, and its extra databases. Buying or renewing is done on checkout_url in the browser: the API never starts a payment. Needs the extradb:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "extradb_site",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Extra databases. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Staging
Staging sites: a private copy of a live WordPress or Static HTML site to try changes on, then copy to the live site (or refresh from it).
staging_access
The share login of a staging site · write · permission staging:write · REST equivalent POST /staging/sites/{staging_id}/access
The username and password that protect the staging site, to share it with someone who has no account (the same "Password to share" the staging page shows the account holder). Account holder only. Needs the staging:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
staging_id | integer | yes | The staging site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "staging_access",
"arguments": {
"staging_id": "staging_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Staging. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
staging_cancel
Cancel the staging add-on · destructive · permission staging:write · REST equivalent POST /staging/cancel
Ends the staging add-on now and removes EVERY staging site of the account. Months already paid are not refunded. Your live sites are not affected. Needs "confirm": true. Needs the staging:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
confirm | boolean | yes | Must be true. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "staging_cancel",
"arguments": {
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Staging. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
staging_copy_from_live
Refresh staging from the live site · destructive · permission staging:write · REST equivalent POST /staging/sites/{staging_id}/copy-from-live
Copies the live site over the staging copy (files and/or database), replacing any changes made on staging. The live site is not changed. Needs "confirm": true. Needs the staging:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
staging_id | integer | yes | The staging site id. |
what | string (one of: full, db, files) | no | What to copy: full (files and database), db (database only, WordPress) or files (files only). Default: full. |
confirm | boolean | yes | Must be true. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "staging_copy_from_live",
"arguments": {
"staging_id": "staging_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Staging. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
staging_copy_to_live
Copy staging to the live site · destructive · permission staging:write · REST equivalent POST /staging/sites/{staging_id}/copy-to-live
Publishes the staging copy: OVERWRITES the live site's files and/or database with the staging ones. An undo copy of what it replaced is kept for 7 days (support can put it back). Needs "confirm": true. The staging site reads "ready" again when it is done. Needs the staging:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
staging_id | integer | yes | The staging site id. |
what | string (one of: full, db, files) | no | What to copy: full (files and database), db (database only, WordPress) or files (files only). Default: full. |
confirm | boolean | yes | Must be true. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "staging_copy_to_live",
"arguments": {
"staging_id": "staging_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Staging. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
staging_create
Create a staging site · write · permission staging:write · REST equivalent POST /staging/sites
Makes a private staging copy of one of your live sites (files and database). It takes a few minutes for a typical site; the staging site reads "ready" when it is done. Needs the staging add-on and a free slot; the live site is not changed. Needs the staging:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The live site to copy (one of yours that can have a staging copy). |
label | string | no | An optional name for this copy (60 characters). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "staging_create",
"arguments": {
"site_id": 1
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Staging. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
staging_delete
Remove a staging site · destructive · permission staging:write · REST equivalent DELETE /staging/sites/{staging_id}
Removes the staging copy (its files, database and address). The live site is not touched and the slot is free again straight away. Needs "confirm": true. Needs the staging:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
staging_id | integer | yes | The staging site id. |
confirm | boolean | yes | Must be true. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "staging_delete",
"arguments": {
"staging_id": "staging_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Staging. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
staging_eligible
Which sites can be staged · read-only · permission staging:read · REST equivalent GET /staging/eligible
Your live sites and, for each, whether a staging copy can be made of it now and, when not, the reason in plain words (only WordPress and Static HTML sites that are running). Needs the staging:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "staging_eligible",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Staging. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
staging_get
One staging site · read-only · permission staging:read · REST equivalent GET /staging/sites/{staging_id}
One staging site with its last ten jobs (create, copy to live, copy from live, remove). Needs the staging:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
staging_id | integer | yes | The staging site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "staging_get",
"arguments": {
"staging_id": "staging_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Staging. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
staging_list
List staging sites · read-only · permission staging:read · REST equivalent GET /staging/sites
Every staging site in your account that exists now (being created, ready, copying, paused, needs attention or being removed), newest first, with its last copy job. The state goes back to "ready" when a copy is done. Needs the staging:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "staging_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Staging. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
staging_sftp
Switch on SFTP / reset its password · write · permission staging:write · REST equivalent POST /staging/sites/{staging_id}/sftp
SFTP for one staging site. The first call switches it on and returns the login WITH a new password; later calls return the login with "password": "" (it is shown only once and never stored). "reset": true sets a new password (the old one stops working). Needs the staging:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
staging_id | integer | yes | The staging site id. |
reset | boolean | no | true = make a NEW password (the old one stops working). Default: False. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "staging_sftp",
"arguments": {
"staging_id": "staging_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Staging. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
staging_status
Staging: add-on, slots and price · read-only · permission staging:read · REST equivalent GET /staging
Whether staging is on for your account, until when it is paid, how many staging sites you have and may have at once, the size limits, and the monthly price (before VAT, from the live price row) with the page where you buy or renew it. Buying happens in the browser: the API never starts a payment. Needs the staging:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "staging_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Staging. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Turnstile bot check
Cloudflare Turnstile on your WordPress forms (login, registration, lost password, comments and the common form plugins): status, switch on or off, choose forms, new keys.
turnstile_disable
Switch Turnstile off · destructive · permission turnstile:write · REST equivalent POST /sites/{site_id}/turnstile/disable
Takes the plugin off the site first (read back), then deletes the widget. Your forms are no longer protected by the bot check. Needs "confirm": true. You can switch it on again at any time. Needs the turnstile:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true. This can take up to a minute.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
confirm | boolean | yes | Must be true: switching Turnstile off removes the bot check from the site's forms. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "turnstile_disable",
"arguments": {
"site_id": 123,
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Turnstile bot check. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
turnstile_enable
Switch Turnstile on (or change its settings) · write · permission turnstile:write · REST equivalent POST /sites/{site_id}/turnstile
Switches the bot check on for this site, or saves new settings when it is already on. We create the Turnstile widget, install our small WordPress plugin with the keys and read it back from the site. If there is no room yet the status is "waiting" and it finishes by itself. Turnstile that our team switched off ("revoked") cannot be switched back on here - contact support. Needs the turnstile:write permission. This can take up to a minute.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
mode | string (one of: managed, non-interactive, invisible) | no | How visitors are checked. managed (recommended) shows a checkbox only when needed; non-interactive never asks; invisible shows nothing. Default: managed. |
forms | array | no | Which forms to protect: login, register, lostpassword, comments, cf7 (Contact Form 7), wpforms, spectra, ninja (Ninja Forms), kadence (Kadence Blocks form block), elementor (Elementor Pro), everest (Everest Forms), mc4wp (Mailchimp for WP), metform, otter, forminator, happyforms, fluent (Fluent Forms), formidable. Default: all of them. |
extra_hosts | array | no | Up to 4 more hostnames the check must accept - domains of your OTHER sites with us (e.g. a subdomain site). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "turnstile_enable",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Turnstile bot check. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
turnstile_get
Turnstile status of a site · read-only · permission turnstile:read · REST equivalent GET /sites/{site_id}/turnstile
What the site's Turnstile tab shows: whether the bot check can be used here (WordPress sites), whether it is on, the mode, which forms it protects, the extra hostnames it accepts, when it was last read back from the site and when the keys were last replaced. The secret key is never returned. Needs the turnstile:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "turnstile_get",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Turnstile bot check. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
turnstile_rotate
Replace the Turnstile secret key · write · permission turnstile:write · REST equivalent POST /sites/{site_id}/turnstile/rotate
Issues a new secret key for the site's widget and installs it on the site straight away. The new key is never shown - it only lives on your site. For a key that may have leaked. Needs the turnstile:write permission. This can take up to a minute.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "turnstile_rotate",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Turnstile bot check. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Cron jobs
Scheduled tasks for a site: WordPress scheduled tasks, a PHP script, a web address or a command, every 5 minutes at most, stopped after 15 minutes, as the site's own user. Free on every plan; 5 per site, 25 per account. Times are UTC.
cron_account
List every cron job on the account · read-only · permission cron:read · REST equivalent GET /cron-jobs
All cron jobs on every site of the account (at most 25), each with its site id and domain. Needs the cron:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cron_account",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Cron jobs. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
cron_create
Add a cron job · write · permission cron:write · REST equivalent POST /sites/{site_id}/cron-jobs
Adds a job and puts it on the site's server within about a minute. It runs as the site's own user, in the site folder, with the site's PHP version, and is stopped after 15 minutes. Refused with limit_reached at 5 jobs on the site or 25 on the account, and with validation_failed for a schedule more often than every 5 minutes, a multi-line command, or a script path outside the site folder. Needs the cron:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
name | string | no | A name you recognise (up to 80 characters). |
kind | string (one of: wpcron, php, url, command) | no | What runs. wpcron: WordPress scheduled tasks (wp cron event run --due-now, WordPress sites only); php: a PHP script, target = path inside the site folder ending in .php (not for Static HTML); url: open a web address, target = http(s) address; command: a shell command, target = the command (one line, up to 1,000 characters). Required when creating. |
target | string | no | The script path, web address or command (see kind). Not used for wpcron. |
schedule_mode | string (one of: minutes, hourly, daily, weekly, advanced) | no | How the schedule is given. minutes: every N minutes (every); hourly: once an hour at minute; daily: at hour:minute UTC; weekly: on weekday at hour:minute UTC; advanced: a 5-field cron expression. Required when creating. |
every | integer (one of: 5, 10, 15, 20, 30) | no | minutes mode: run every 5, 10, 15, 20 or 30 minutes. We pick a fixed start offset inside each window (e.g. :07, :22, :37, :52), so sites do not all start at the same second. |
minute | integer | no | hourly / daily / weekly: the minute (0-59). Default: a fixed minute picked for the job. |
hour | integer | no | daily / weekly: the hour, UTC. |
weekday | integer | no | weekly: 0 = Sunday, 1 = Monday ... 6 = Saturday. |
expression | string | no | advanced: five fields "minute hour day-of-month month day-of-week", UTC, e.g. "*/15 * * * *" or "30 2 * * 1-5". It may never run more often than every 5 minutes (checked across the whole hour, including from :55 to :00). A "*/N" minute field is moved to a fixed offset. |
enabled | boolean | no | Switch the job on (default) or off. |
wp_pseudo_cron_off | boolean | no | wpcron only: also stop WordPress running its scheduled tasks on page visits (sets DISABLE_WP_CRON in wp-config.php, only if it is not set already; taken out again when the job is deleted or switched off). Default true for wpcron. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cron_create",
"arguments": {
"site_id": 123,
"name": "WordPress scheduled tasks",
"kind": "wpcron",
"schedule_mode": "minutes",
"every": 15,
"wp_pseudo_cron_off": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Cron jobs. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
cron_delete
Delete a cron job · destructive · permission cron:write · REST equivalent DELETE /sites/{site_id}/cron-jobs/{cron_id}
Deletes the job and its run history, and takes it off the server within about a minute. A run already going finishes. Needs the cron:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
cron_id | integer | yes | The cron job id (see the list). |
confirm | boolean | yes | Must be true: the job and its run history are deleted. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cron_delete",
"arguments": {
"site_id": 123,
"cron_id": 42,
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Cron jobs. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
cron_get
One cron job with its last runs · read-only · permission cron:read · REST equivalent GET /sites/{site_id}/cron-jobs/{cron_id}
The job and its last 10 runs: when, how long, the exit code, and the output (the first 1,000 and last 7,000 bytes of long output are kept). Needs the cron:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
cron_id | integer | yes | The cron job id (see the list). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cron_get",
"arguments": {
"site_id": 123,
"cron_id": 42
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Cron jobs. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
cron_list
List a site's cron jobs · read-only · permission cron:read · REST equivalent GET /sites/{site_id}/cron-jobs
Every cron job of the site with its schedule (as written and in words, UTC), what it runs, whether it is on, why it is paused if it is (the site is frozen or suspended, it timed out 3 times in a row, or our team paused it), its next 3 run times and its last result. kinds lists what this site type may run. limits shows the per-site and per-account counts. Needs the cron:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cron_list",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Cron jobs. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
cron_run
Run a cron job now · write · permission cron:write · REST equivalent POST /sites/{site_id}/cron-jobs/{cron_id}/run
Starts the job on its server at once (once a minute per job, 10 times in 10 minutes per account). The run is recorded like a scheduled one, with trigger "manual", a few seconds later. Refused while the site is frozen or suspended. Needs the cron:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
cron_id | integer | yes | The cron job id (see the list). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cron_run",
"arguments": {
"site_id": 123,
"cron_id": 42
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Cron jobs. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
cron_runs
The last runs of a cron job · read-only · permission cron:read · REST equivalent GET /sites/{site_id}/cron-jobs/{cron_id}/runs
Newest first. status: ok, failed (non-zero exit code), timeout (stopped at 15 minutes), skipped (the previous run was still going, or the server was paused) or error (could not start). trigger: schedule or manual (the Run now button). Needs the cron:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
cron_id | integer | yes | The cron job id (see the list). |
limit | integer | no | How many (newest first, at most 20 are kept). Default: 20. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cron_runs",
"arguments": {
"site_id": 123,
"cron_id": 42
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Cron jobs. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
cron_update
Change a cron job · write · permission cron:write · REST equivalent PATCH /sites/{site_id}/cron-jobs/{cron_id}
Change any of the fields; the others stay as they are. To change the schedule give schedule_mode with its fields. Switching a job on again (enabled: true) also clears a pause after repeated timeouts. On the server within about a minute. Needs the cron:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
cron_id | integer | yes | The cron job id (see the list). |
name | string | no | A name you recognise (up to 80 characters). |
kind | string (one of: wpcron, php, url, command) | no | What runs. wpcron: WordPress scheduled tasks (wp cron event run --due-now, WordPress sites only); php: a PHP script, target = path inside the site folder ending in .php (not for Static HTML); url: open a web address, target = http(s) address; command: a shell command, target = the command (one line, up to 1,000 characters). Required when creating. |
target | string | no | The script path, web address or command (see kind). Not used for wpcron. |
schedule_mode | string (one of: minutes, hourly, daily, weekly, advanced) | no | How the schedule is given. minutes: every N minutes (every); hourly: once an hour at minute; daily: at hour:minute UTC; weekly: on weekday at hour:minute UTC; advanced: a 5-field cron expression. Required when creating. |
every | integer (one of: 5, 10, 15, 20, 30) | no | minutes mode: run every 5, 10, 15, 20 or 30 minutes. We pick a fixed start offset inside each window (e.g. :07, :22, :37, :52), so sites do not all start at the same second. |
minute | integer | no | hourly / daily / weekly: the minute (0-59). Default: a fixed minute picked for the job. |
hour | integer | no | daily / weekly: the hour, UTC. |
weekday | integer | no | weekly: 0 = Sunday, 1 = Monday ... 6 = Saturday. |
expression | string | no | advanced: five fields "minute hour day-of-month month day-of-week", UTC, e.g. "*/15 * * * *" or "30 2 * * 1-5". It may never run more often than every 5 minutes (checked across the whole hour, including from :55 to :00). A "*/N" minute field is moved to a fixed offset. |
enabled | boolean | no | Switch the job on (default) or off. |
wp_pseudo_cron_off | boolean | no | wpcron only: also stop WordPress running its scheduled tasks on page visits (sets DISABLE_WP_CRON in wp-config.php, only if it is not set already; taken out again when the job is deleted or switched off). Default true for wpcron. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "cron_update",
"arguments": {
"site_id": 123,
"cron_id": 42,
"kind": "php",
"target": "scripts/nightly.php",
"schedule_mode": "daily",
"hour": 3,
"minute": 20
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Cron jobs. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Reputation monitoring
Star rating, review count and the latest reviews on Google, Trustpilot and Tripadvisor for the businesses you watch (poor unanswered reviews first), plus brand page one.
reputation_add
Watch a business · write · permission reputation:write · REST equivalent POST /reputation/businesses
Adds a business and searches Google, Trustpilot and Tripadvisor for its profiles. The results arrive as candidates within a minute or two, for the owner to confirm which one is theirs. Refused if your plan has no room. Needs the reputation:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
name | string | yes | The business name as customers know it. |
country | integer | yes | The country it is in: a reputation location_code (2826 = United Kingdom, 2840 = United States). |
website | string | no | Its own website, optional (e.g. testcafe.com). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reputation_add",
"arguments": {
"name": "<name>",
"country": 1
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Reputation monitoring. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reputation_confirm
Confirm which profile is yours · write · permission reputation:write · REST equivalent POST /reputation/businesses/{business_id}/profiles
Only a profile you confirm is ever read. Its first reading starts at once. Needs the reputation:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
business_id | integer | yes | The watched business id. |
platform | string (one of: google, trustpilot, tripadvisor) | yes | The platform. |
candidate | string | yes | The id of the business candidate that is yours, or "none" when none of them is. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reputation_confirm",
"arguments": {
"business_id": "business_id",
"platform": "<platform>",
"candidate": "<candidate>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Reputation monitoring. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reputation_countries
Countries a business can be in · read-only · permission reputation:read · REST equivalent GET /reputation/countries
The countries you can choose when adding a business (pass location_code as country). Needs the reputation:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reputation_countries",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Reputation monitoring. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reputation_delete
Stop watching a business · destructive · permission reputation:write · REST equivalent DELETE /reputation/businesses/{business_id}
Removes the business with its profiles, reviews, history and brand terms. Needs the reputation:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
business_id | integer | yes | The watched business id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reputation_delete",
"arguments": {
"business_id": "business_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Reputation monitoring. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reputation_get
One watched business · read-only · permission reputation:read · REST equivalent GET /reputation/businesses/{business_id}
One business: per platform its confirmed profile (or the candidates found, waiting for you to confirm which is yours), the latest reviews (poor unanswered first), the rating history, and each brand term with its latest page one and what dropped off it. Needs the reputation:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
business_id | integer | yes | The watched business id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reputation_get",
"arguments": {
"business_id": "business_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Reputation monitoring. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reputation_list
List your watched businesses · read-only · permission reputation:read · REST equivalent GET /reputation/businesses
Every business you watch with its confirmed review profiles and their latest reading (null = not read yet, never zero). covered is false for a business your plan no longer pays to read. Needs the reputation:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reputation_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Reputation monitoring. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reputation_profile_remove
Stop watching one profile · destructive · permission reputation:write · REST equivalent DELETE /reputation/businesses/{business_id}/profiles/{platform}
Forgets the confirmed profile on one platform (search again to pick another). Needs the reputation:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
business_id | integer | yes | The watched business id. |
platform | string (one of: google, trustpilot, tripadvisor) | yes | The platform. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reputation_profile_remove",
"arguments": {
"business_id": "business_id",
"platform": "platform"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Reputation monitoring. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reputation_refresh
Read a business now · write · permission reputation:write · REST equivalent POST /reputation/businesses/{business_id}/refresh
Asks for a fresh reading of every confirmed profile and brand term of this business within the next few minutes. The same bound as the "Read now" button: once per business in the interval the page states (24 hours today). Weekly readings carry on regardless. Needs the reputation:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
business_id | integer | yes | The watched business id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reputation_refresh",
"arguments": {
"business_id": "business_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Reputation monitoring. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reputation_search
Search for its profiles again · write · permission reputation:write · REST equivalent POST /reputation/businesses/{business_id}/search
Searches the three platforms again for this business's profiles (the same daily limit per business as the button). New candidates replace the old ones. Needs the reputation:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
business_id | integer | yes | The watched business id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reputation_search",
"arguments": {
"business_id": "business_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Reputation monitoring. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reputation_status
Reputation monitoring: plan and usage · read-only · permission reputation:read · REST equivalent GET /reputation
Your plan, how many businesses and brand terms it covers and how many you watch. Needs the reputation:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reputation_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Reputation monitoring. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reputation_term_add
Watch a brand term · write · permission reputation:write · REST equivalent POST /reputation/businesses/{business_id}/terms
Adds a brand term whose Google page one is read every week (within your plan's brand terms, up to 10 per business). Needs the reputation:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
business_id | integer | yes | The watched business id. |
term | string | yes | The search term, e.g. the brand name. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reputation_term_add",
"arguments": {
"business_id": "business_id",
"term": "<term>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Reputation monitoring. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
reputation_term_delete
Stop watching a brand term · destructive · permission reputation:write · REST equivalent DELETE /reputation/businesses/{business_id}/terms/{term_id}
Removes a brand term and its page-one history. Needs the reputation:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
business_id | integer | yes | The watched business id. |
term_id | integer | yes | The brand term id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "reputation_term_delete",
"arguments": {
"business_id": "business_id",
"term_id": "term_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Reputation monitoring. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Product price tracking
Your products on Google Shopping and Amazon: on the shelf or not, position, the cheapest comparable listing and how far above it you are.
products_add
Track a product · write · permission products:write · REST equivalent POST /product-tracking/products
Adds a product and reads both shelves at once. Refused before anything is spent if your plan has no room. Needs the products:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
title | string | yes | The product the way shoppers search for it, e.g. "Sony WH-1000XM5". |
country | string (one of: GB, US, DE, FR, ES, IT, CA, AU) | yes | The country you sell it in (the list is kept by us and may grow). |
asin | string | no | Your Amazon ASIN for it, to recognise your listing. |
sku | string | no | Your SKU or GTIN (for your own reference). |
competitor | boolean | no | True for a competitor's product (watched, never "yours"). Default: False. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "products_add",
"arguments": {
"title": "<title>",
"country": "<country>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Product price tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
products_delete
Stop tracking a product · destructive · permission products:write · REST equivalent DELETE /product-tracking/products/{product_id}
Removes the product and its history. Needs the products:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
product_id | integer | yes | The product id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "products_delete",
"arguments": {
"product_id": "product_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Product price tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
products_get
One product · read-only · permission products:read · REST equivalent GET /product-tracking/products/{product_id}
One product with every listing we read on each shelf ("counted" = comparable to your product; "yours" = recognised by your seller name or ASIN). Needs the products:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
product_id | integer | yes | The product id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "products_get",
"arguments": {
"product_id": "product_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Product price tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
products_list
List your tracked products · read-only · permission products:read · REST equivalent GET /product-tracking/products
Every product you track, with the latest reading of each shelf. Needs the products:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "products_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Product price tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
products_status
Product price tracking: plan and usage · read-only · permission products:read · REST equivalent GET /product-tracking
Your plan, how many products it covers and how your products are doing on the shelves. Needs the products:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "products_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Product price tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Competitor tracking
Competitor domains read every week: organic keywords, traffic estimate, top pages, domain rank and referring domains, with the history.
competitors_add
Watch a competitor domain · write · permission competitors:write · REST equivalent POST /competitors/domains
Adds a domain to your watch-list; its first reading arrives within minutes. Refused before anything is spent if your packs have no room. Needs the competitors:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domain | string | yes | The domain, e.g. competitor.com. |
country | string (one of: US, GB, DE, FR, ES, IT, CA, AU) | yes | The country to read it in (the list is kept by us and may grow). |
note | string | no | Your own note (up to 120 characters). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "competitors_add",
"arguments": {
"domain": "<domain>",
"country": "<country>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Competitor tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
competitors_delete
Stop watching a domain · destructive · permission competitors:write · REST equivalent DELETE /competitors/domains/{watch_id}
Removes the domain from your watch-list. Needs the competitors:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
watch_id | integer | yes | The watched domain id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "competitors_delete",
"arguments": {
"watch_id": "watch_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Competitor tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
competitors_get
One watched domain · read-only · permission competitors:read · REST equivalent GET /competitors/domains/{watch_id}
One domain with its top pages and the history of its weekly readings. Needs the competitors:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
watch_id | integer | yes | The watched domain id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "competitors_get",
"arguments": {
"watch_id": "watch_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Competitor tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
competitors_list
List your watched domains · read-only · permission competitors:read · REST equivalent GET /competitors/domains
Every domain you watch, with its latest weekly reading (null = not measured, never zero). Needs the competitors:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "competitors_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Competitor tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
competitors_status
Competitor tracking: packs and usage · read-only · permission competitors:read · REST equivalent GET /competitors
Your packs, how many domains they cover (plus any free domain) and how many you watch. Needs the competitors:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "competitors_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Competitor tracking. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Agency SEO data
Authority and link data for up to 200 domains hosted anywhere, read every week: domain rank, referring domains, backlinks, spam score and the organic traffic estimate.
agency_add
Track domains · write · permission agency:write · REST equivalent POST /agency-seo-data/domains
Adds domains to your list; their first reading arrives within minutes. Adds as many as your plan has room for and says why each other one was skipped. Nothing is spent on a refusal. Needs the agency:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
domains | array | yes | The domains, e.g. ["client-site.com", "other-client.co.uk"] (up to 500 per call). |
country | string (one of: US, GB, DE, FR, ES, IT, CA, AU) | yes | The country for the organic traffic estimate (the list is kept by us and may grow). |
label | string | no | A client label for all of them (up to 60 characters). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "agency_add",
"arguments": {
"domains": "<domains>",
"country": "<country>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Agency SEO data. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
agency_delete
Stop tracking a domain in Agency SEO data · destructive · permission agency:write · REST equivalent DELETE /agency-seo-data/domains/{item_id}
Removes the domain from your list. Needs the agency:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
item_id | integer | yes | The tracked domain id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "agency_delete",
"arguments": {
"item_id": "item_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Agency SEO data. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
agency_get
One tracked domain · read-only · permission agency:read · REST equivalent GET /agency-seo-data/domains/{item_id}
One domain with the history of its weekly readings (newest first, up to two years). Needs the agency:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
item_id | integer | yes | The tracked domain id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "agency_get",
"arguments": {
"item_id": "item_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Agency SEO data. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
agency_list
List your tracked domains · read-only · permission agency:read · REST equivalent GET /agency-seo-data/domains
Every domain you track, with its latest weekly reading (null = not measured, never zero). Needs the agency:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
label | string | no | Only the domains with this client label. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "agency_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Agency SEO data. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
agency_status
Agency SEO data: plan and usage · read-only · permission agency:read · REST equivalent GET /agency-seo-data
Your plan, how many domains it covers and how many you track. Needs the agency:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "agency_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Agency SEO data. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
agency_update
Label or switch a tracked domain · write · permission agency:write · REST equivalent PATCH /agency-seo-data/domains/{item_id}
Changes the client label or note, or switches the domain off / on. Needs the agency:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
item_id | integer | yes | The tracked domain id. |
label | string | no | The client label (up to 60 characters). |
note | string | no | Your note (up to 120 characters). |
switched_on | boolean | no | false = keep it with its history but stop reading and counting it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "agency_update",
"arguments": {
"item_id": "item_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Agency SEO data. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Website e-mail sending
Send a website's e-mail through your own provider (Resend, SendGrid, Brevo, Mailgun, Amazon SES, Postmark or any SMTP server) instead of our mail servers, and test it.
mailroute_get
Where a site's e-mail goes out · read-only · permission sites:read · REST equivalent GET /sites/{site_id}/mail-sending
"route": "ours" = our mail servers (the default); "own" = the customer's own provider, with its state ("pending" while being set up on the server, "active", "error" + state_note). The key is never returned, only key_hint. Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mailroute_get",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Website e-mail sending. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mailroute_off
Send through our mail servers again · destructive · permission sites:write · REST equivalent DELETE /sites/{site_id}/mail-sending
Switches the site back to our mail servers within a minute. The settings are kept unless forget=true. Needs the sites:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
forget | boolean | no | Also delete the stored key and settings. Default: False. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mailroute_off",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Website e-mail sending. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mailroute_providers
Providers you can send through · read-only · permission sites:read · REST equivalent GET /mail-sending/providers
The providers a site can send through and what each needs: a key only (Resend, SendGrid, Postmark), a login and key (Brevo, Mailgun, Amazon SES, which also need a region), or a server, port, user name and password (provider "smtp"). Needs the sites:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mailroute_providers",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Website e-mail sending. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mailroute_set
Send through my own provider · write · permission sites:write · REST equivalent PUT /sites/{site_id}/mail-sending
Stores the settings (the key encrypted) and switches the site's e-mail to that provider within a minute. The answer's "state" says whether it is sending; a test message confirms it. Needs the sites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
provider | string (one of: resend, sendgrid, brevo, mailgun, ses, postmark, smtp) | yes | The provider key, one of the mail-sending providers. |
secret | string | no | The API key / SMTP key / SMTP password. Required the first time and when the provider or server changes; leave out to keep the stored one. |
username | string | no | The SMTP login (Brevo, Mailgun, Amazon SES, smtp). |
region | string | no | Amazon SES: e.g. eu-west-1. Mailgun: us or eu. |
host | string | no | provider "smtp" only: the SMTP server name. |
port | integer (one of: 465, 587) | no | 465 (TLS) or 587 (STARTTLS). |
from_address | string | no | The address the website sends as (default noreply@ the site domain). Must be verified at the provider. |
force_from | boolean | no | true sends every message as from_address (recommended: providers refuse unverified senders). Default: True. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mailroute_set",
"arguments": {
"site_id": 123,
"provider": "<provider>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Website e-mail sending. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
mailroute_test
Send a test e-mail · write · permission sites:write · REST equivalent POST /sites/{site_id}/mail-sending/test
Sends one real e-mail the way the website does (from inside the site, through the provider) and returns the provider's answer in plain words. At most 5 tests per site per 10 minutes. Needs the sites:write permission. This can take up to a minute.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
to | string | yes | Where to send the test e-mail. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "mailroute_test",
"arguments": {
"site_id": 123,
"to": "<to>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Website e-mail sending. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Country lock
Limit a site to the countries you choose; everyone else gets a "not available in your country" page.
country_lock_get
Country lock of a site · read-only · permission sites:read · REST equivalent GET /sites/{site_id}/country-lock
Whether the site is locked to certain countries, which ones, whether search-engine crawlers are let in, the addresses that are always let in, and whether the change is live yet (status: pending = being applied, applied = live, waiting = the site is not live on its server yet, off). Needs the sites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "country_lock_get",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Country lock. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
country_lock_set
Set the country lock of a site · write · permission sites:write · REST equivalent PUT /sites/{site_id}/country-lock
Locks the site to the countries given (or everyone except them), or switches the lock off. Live on the site within about a minute - read it back with GET until status is "applied". Needs the sites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The site id. |
enabled | boolean | yes | true = lock the site; false = open it to every country (the saved countries are kept). |
mode | string (one of: allow, block) | no | "allow" = only these countries can open the site; "block" = everyone except these. Default: allow. |
countries | array | no | Two-letter country codes (ISO 3166), e.g. ["GB"]. Required when enabled. |
allow_search_engines | boolean | no | Let Google, Bing, Apple and DuckDuckGo crawlers in (by their published addresses). false = the site drops out of search results. Default: True. |
allow_ips | array | no | Addresses or ranges always let in (at most 50), e.g. ["203.0.113.7"]. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "country_lock_set",
"arguments": {
"site_id": 123,
"enabled": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Country lock. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Performance Boost
More CPU and memory for every site of the account: the level, and the price of each level.
boost_status
Performance Boost: your level and prices · read-only · permission boost:read · REST equivalent GET /performance-boost
Whether Performance Boost is on for the account (level, multiplier, last paid day), how many sites it covers, and what each level costs a month for the sites you have today (before VAT). Buying, upgrading and cancelling are done on the Performance Boost page (page_url). Needs the boost:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "boost_status",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Performance Boost. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Pro plugin discount
Hosting customers get 50% off the first payment of our Pro plugins: eligibility and offers.
prodisc_offers
Pro plugin discount: eligibility and offers · read-only · permission prodisc:read · REST equivalent GET /pro-discount
Whether the account gets 50% off the first payment of our Pro plugins (an active, paid hosting plan), and each plugin in the offer with its state for you: available, active (you have an unused code) or redeemed. The code itself is only shown on the page (page_url), where you also ask for it. Needs the prodisc:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "prodisc_offers",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Pro plugin discount. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
Money sites
Hosting on Zinn Digital's platform: plans, orders, sites, usage, and the free WooCommerce tick on a PBN-line WordPress site.
moneysites_buy
Order a money-site plan · write · permission moneysites:write · REST equivalent POST /money-sites/orders
Place a money-site order (a WordPress plan, optionally with WooCommerce, or an application plan). Zinn Digital LTD bills it, so the answer carries a one-time pay_url on Zinn Digital's own secure page - open it to pay by card, PayPal or crypto. Nothing is charged by this call. If Zinn Digital cannot take that order online (a term it does not price online, or its partner ordering is not open), the order is recorded as a request, a support ticket is opened, our team sends the payment link, and the answer says so plainly instead of pretending. Needs the moneysites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
plan | string | yes | A plan code from /money-sites/plans. |
months | integer (one of: 1, 3, 6, 12) | no | How many months to pay for. Default: 1. |
domain | string | no | The domain for the site; absent starts it on a temporary address. |
woocommerce | boolean | no | WordPress plans only: deploy with WooCommerce installed and set up, ready to sell (shop, cart, checkout and account pages, store open). Ignored for application plans. Default: False. |
application | string | no | Web and developer plans: what to build, one of the plan's stacks keys (web: php = an empty PHP account, the default, or static; developer: node, python or ruby). A WordPress plan installs WordPress and an application or LMS plan installs its own application, so it is not needed there. |
notes | string | no | Anything our team should know. |
addons | array | no | Optional add-on codes for this plan, from addons_offered on /money-sites/plans. They go on the same order and the same payment; each is priced by the server and checked to the cent before the pay_url is returned. |
accept_terms | boolean | no | Must be true: it records that this account accepts the Terms and Conditions for this purchase, exactly as the tick box on the website does. Default: False. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_buy",
"arguments": {
"plan": "<plan>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_get
One money site · read-only · permission moneysites:read · REST equivalent GET /money-sites/{money_site_id}
One money site in full: state, plan, hostnames, PHP version, region, usage against the plan's allowances, recent jobs and errors, and the links for the few jobs that are finished in the Zinn Digital panel. Needs the moneysites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
money_site_id | integer | yes | The money site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_get",
"arguments": {
"money_site_id": "money_site_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_list
My money sites · read-only · permission moneysites:read · REST equivalent GET /money-sites
Every money site on this account, with its state, plan, application and last known usage. Needs the moneysites:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_list",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_more
More hosting from Zinn Digital · read-only · permission moneysites:read · REST equivalent GET /money-sites/zinn-digital
The other hosting lines of our sister company Zinn Digital - agency, reseller, enterprise, cloud, AI, developer, LMS and mail hosting - each with its live "from" price (USD a month, read from Zinn Digital's catalogue) and its sign-up page. These are links only: the account, billing and support for them are at Zinn Digital. Needs the moneysites:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_more",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_move
One move · read-only · permission moneysites:read · REST equivalent GET /money-site-moves/{move_id}
One move: the step it is on, what it is doing now, and its log (what was checked and when). Needs the moneysites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
move_id | integer | yes | The move id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_move",
"arguments": {
"move_id": "move_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_move_cancel
Cancel a move · write · permission moneysites:write · REST equivalent POST /money-site-moves/{move_id}/cancel
Cancels a move before the domain is switched. The site stays exactly as it is on PBN hosting. Refused once the domain switch has started. Needs the moneysites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
move_id | integer | yes | The move id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_move_cancel",
"arguments": {
"move_id": "move_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_move_check
Can this PBN site move to money-site hosting? · read-only · permission moneysites:read · REST equivalent GET /sites/{site_id}/money-site-move
Whether the site can be moved now, into which money-site plan and slot, and what happens. When it cannot, reason_code says why (no_plan, no_free_slot, type_unsupported, site_busy, already_moving, dns_unsupported, ...) and buy_url points at the plan to buy. current_move is the move in progress, if any. Needs the moneysites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The PBN site id (the same id the /sites endpoints use). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_move_check",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_move_start
Move a PBN site to money-site hosting · write · permission moneysites:write · REST equivalent POST /sites/{site_id}/money-site-move
Starts the one-click move. Needs the sites:delete scope too, because the PBN copy is deleted at the end. The domain keeps its nameservers and DNS account: only its web records are pointed at the new hosting, after the copy has been checked; email and other records are not touched. Nothing is charged. The move it returns shows each step. Needs the moneysites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | The PBN site id (the same id the /sites endpoints use). |
confirm | boolean | yes | Must be true: you accept that once the site is live on money-site hosting its PBN copy and its PBN backups are deleted automatically (the PBN slot is freed). |
subscription_id | string | no | Optional: which money-site plan to move into, when you have more than one (target.subscription_id from the GET). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_move_start",
"arguments": {
"site_id": 123,
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_moves
Moves to money-site hosting · read-only · permission moneysites:read · REST equivalent GET /money-site-moves
Every move of a PBN site to money-site hosting on this account, newest first, with its steps and state. Needs the moneysites:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_moves",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_order
One money-site order · read-only · permission moneysites:read · REST equivalent GET /money-sites/orders/{order_id}
One order, re-read from Zinn Digital if it is still open. Needs the moneysites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
order_id | integer | yes | The order id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_order",
"arguments": {
"order_id": "order_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_order_cancel
Cancel an unpaid money-site order · destructive · permission moneysites:write · REST equivalent POST /money-sites/orders/{order_id}/cancel
Cancel an order that has not been paid. Nothing was charged, so nothing is refunded. Needs the moneysites:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
order_id | integer | yes | The order id. |
confirm | boolean | yes | Must be true: this deletes or overwrites something, and the call is refused without it. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_order_cancel",
"arguments": {
"order_id": "order_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_orders
My money-site orders · read-only · permission moneysites:read · REST equivalent GET /money-sites/orders
Every money-site order on this account, newest first, with its state and what it cost. Needs the moneysites:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_orders",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_plans
Money-site plans and prices · read-only · permission moneysites:read · REST equivalent GET /money-sites/plans
Every money-site hosting plan on sale - Managed WordPress hosting (Start to Enterprise; any of them can be ordered with WooCommerce installed and set up, ready to sell), application hosting (each application's Business and/or Pro tier), PHP web hosting, developer hosting and LMS hosting - with the price for 1, 3, 6 and 12 months, what the plan includes, and which terms Zinn Digital takes online (online_terms; any other term is set up by our team, who send the payment link). Money sites run on Zinn Digital's platform - separate infrastructure from the PBN network - and Zinn Digital LTD bills them: pay by card, PayPal or crypto. Needs the moneysites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
line | string (one of: wordpress, applications, web, developer, lms, all) | no | wordpress = Managed WordPress hosting (Start to Enterprise, with the "Install WooCommerce" option); applications = application hosting (every application's Business and/or Pro tier); web = PHP web hosting (an empty PHP account or a static site); developer = Node.js / Python / Ruby apps from Git; lms = LMS hosting (WordPress LMS or Moodle); all = every line. Default: all. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_plans",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_refresh
Re-read everything from Zinn Digital · read-only · permission moneysites:read · REST equivalent POST /money-sites/refresh
Asks Zinn Digital for this account's sites and orders again: after paying, or when a site set up by our team is not listed yet. Needs the moneysites:read permission.
Takes no arguments.
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_refresh",
"arguments": {}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_site_addon_pay
A fresh pay link for an add-on order · write · permission moneysites:write · REST equivalent POST /money-sites/{money_site_id}/addons/{addon_order_id}/pay
For an add-on order that is awaiting payment: the same order's pay link again (never a second order). Refused when there is nothing to pay. Needs the moneysites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
money_site_id | integer | yes | The money site id. |
addon_order_id | integer | yes | The add-on order id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_site_addon_pay",
"arguments": {
"money_site_id": "money_site_id",
"addon_order_id": "addon_order_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_site_addons
Add-ons for one money site · read-only · permission moneysites:read · REST equivalent GET /money-sites/{money_site_id}/addons
What the site's plan already includes, the add-ons that can be added to THIS site (valid for its plan, priced by the server), and the add-on orders already made for it with their status. online says whether an add-on can be placed and paid online right now (answered with a pay link) or is taken as a request that our team places and sends the payment link for - nothing is charged either way until you pay on Zinn Digital LTD's own page. Needs the moneysites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
money_site_id | integer | yes | The money site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_site_addons",
"arguments": {
"money_site_id": "money_site_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_site_addons_request
Add add-ons to a money site · write · permission moneysites:write · REST equivalent POST /money-sites/{money_site_id}/addons
Asks for add-ons on this site. The server checks every code against the site's plan and prices it. When add-ons can be placed online, the answer carries Zinn Digital LTD's one-time pay_url (open it to pay); otherwise it is recorded as a request, our team places it and sends you the payment link (requested: true, pay_url null). Nothing is charged by this call. The same set asked twice while the first is still open returns the first. Needs the moneysites:write permission.
| Argument | Type | Required | Description |
|---|---|---|---|
money_site_id | integer | yes | The money site id. |
addons | array | yes | Add-on codes from the site's offered add-ons (at most 20). |
accept_terms | boolean | no | Must be true (once per Terms version): records that this account accepts the Terms and Conditions, exactly as the tick box on the website does. Default: False. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_site_addons_request",
"arguments": {
"money_site_id": "money_site_id",
"addons": "<addons>"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_site_plan
The plan that pays for a money site · read-only · permission moneysites:read · REST equivalent GET /money-sites/{money_site_id}/plan
The Zinn Digital subscription that pays for this money site, read live: its plan, price, whether it renews and on which date, or the date it ends when it will not renew, and whether it can be cancelled here (can_cancel). Needs the moneysites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
money_site_id | integer | yes | The money site id. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_site_plan",
"arguments": {
"money_site_id": "money_site_id"
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_site_plan_cancel
Cancel the plan for a money site (at period end, no refund) · destructive · permission moneysites:write · REST equivalent POST /money-sites/{money_site_id}/plan/cancel
Cancels the plan that pays for this money site AT THE END OF THE PAID PERIOD: renewal is switched off, the site stays live until ends_on, then the plan ends and nothing more is charged. No refund is made. Safe to repeat: a plan that is already cancelled answers its current state. A plan paid through a PayPal subscription is cancelled in PayPal instead (the error says how). Needs the moneysites:write permission. DESTRUCTIVE: this cannot be undone, and the call is refused without "confirm": true.
| Argument | Type | Required | Description |
|---|---|---|---|
money_site_id | integer | yes | The money site id. |
confirm | boolean | yes | Must be true: you understand the site stays live until the period end, then the plan ends, and that no refund is made. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_site_plan_cancel",
"arguments": {
"money_site_id": "money_site_id",
"confirm": true
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_woocommerce
WooCommerce on a PBN-line site · read-only · permission moneysites:read · REST equivalent GET /sites/{site_id}/woocommerce
Whether WooCommerce is installed on one of your PBN-line WordPress sites, which version, and the health checks: plugin active, shop/cart/checkout pages, a currency, pretty permalinks, HTTPS, and cart and checkout kept out of any page cache. Needs the moneysites:read permission.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | A PBN-line site id (the same id the /sites endpoints use). |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_woocommerce",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.
moneysites_woocommerce_set
Install or remove WooCommerce on a WordPress site · write · permission moneysites:write · REST equivalent POST /sites/{site_id}/woocommerce
Adds WooCommerce to a PBN-line WordPress site, free of charge, or switches it off again. The install runs in the background and usually takes a minute or two; the site's WooCommerce state shows the result. WooCommerce is a WordPress plugin, so a site of another type is refused with the reason - a WordPress money-site plan with the WooCommerce option is the answer there. A NEW site can have it installed as it is built (install_woocommerce: true when creating the site). Needs the moneysites:write permission. Starts a job that finishes later: the answer carries job.id, and the job reads succeeded or failed when it is done.
| Argument | Type | Required | Description |
|---|---|---|---|
site_id | integer | yes | A PBN-line site id (the same id the /sites endpoints use). |
on | boolean | no | true installs and activates WooCommerce; false deactivates it (products and orders stay in the database). Default: True. |
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "moneysites_woocommerce_set",
"arguments": {
"site_id": 123
}
}
}
The answer carries the same data as the REST call, as structuredContent, with an example of every field in Money sites. The exact JSON Schema the answer is validated against is the tool's own outputSchema in tools/list.