Developers

A public API and MCP server for the Ex2 catalogue

Plans, prices, domain names and their availability, in JSON for your code or as tools for AI assistants: free, read-only, no key. Ex2 customers can also connect their own account.

Connect an AI assistant

With the MCP server (Model Context Protocol), an assistant answers with today’s plans and prices and real order links, instead of figures it remembers.

Claude Code

In a terminal:

claude mcp add --transport http ex2 https://www.ex2.com/mcp

Claude, ChatGPT and other apps

Add a custom connector (a remote MCP server) with this URL, without authentication:

https://www.ex2.com/mcp

Cursor, VS Code and other editors

In the editor’s MCP configuration, for example Cursor’s .cursor/mcp.json:

{
  "mcpServers": {
    "ex2": { "url": "https://www.ex2.com/mcp" }
  }
}

The tools

All read-only: they cannot order or change anything.

list_product_lines
The product lines (green hosting, WordPress, email, VPS…) with their pages and plan ids.
list_plans
Plans with their prices per billing cycle, first-year discount and main features; all of them or one product line.
get_plan
One plan with its full specification table.
compare_plans
Two to ten plans side by side, one row per specification.
get_domain_pricing
One-year register, transfer and renewal prices per domain extension.
check_domain
Whether a domain name can be registered now, its prices and the link to order it (or to transfer it, when taken).

Streamable HTTP, no session, no authentication. Protocol versions 2025-03-26, 2025-06-18, 2025-11-25, 2026-07-28.

Your Ex2 account in your AI assistant

A second MCP server, for Ex2 customers: once you sign in, your assistant can read your services, domain names, invoices and support tickets and answer your questions about them, and act for you only where you allow it when connecting (the tools below say what each one does). You can disconnect it at any time.

Claude, ChatGPT and other apps

Add a custom connector with this URL. The first time, the app opens Ex2’s sign-in page:

https://api.ex2.com/mcp/account

Claude Code

In a terminal, then /mcp in Claude Code to sign in:

claude mcp add --transport http ex2-account https://api.ex2.com/mcp/account

Cursor, VS Code and other editors

In the editor’s MCP configuration; the editor asks you to sign in:

{
  "mcpServers": {
    "ex2-account": { "url": "https://api.ex2.com/mcp/account" }
  }
}

Your account’s tools

On top of the catalogue tools above. The first five read your account, and the quotes change nothing. The ones that order, renew, change a plan or cancel work only if you allowed billing actions when connecting, and the ones that change a domain's nameservers, lock or registrar only if you allowed domain actions. An order, a renewal or a plan change makes an invoice you pay as usual. None can pay, see your payment details or get a domain's transfer code.

get_my_account
Your client account: name, company, email, country, currency and credit balance.
list_my_services
Your hosting plans and other services: status, billing cycle, next due date and price, with the link to manage each one.
list_my_domains
Your domain names: status, expiry date, renewal price and whether they renew automatically.
list_my_invoices
Your invoices, the unpaid ones by default (or paid, or all), most recent first: number, dates, total, whether one is overdue, and the link to pay it.
list_my_tickets
Your support tickets: subject, department, status and date of the last reply. Never the messages themselves.
quote_domain_order
Whether a domain name can be registered or transferred in, its price, the registry's rules (.ca, .fr) and the terms to accept. Changes nothing.
order_domain
Orders a domain name, registration or transfer in: an order and its invoice, once you accept the price and the terms.
quote_plan_order
The price of a plan for your site, first payment and renewal, and the terms to accept. Changes nothing.
order_plan
Orders a plan for your site: an order and its invoice; Ex2 sets it up once it is paid.
set_domain_auto_renew
Turns the automatic renewal of one of your domain names on or off.
renew_domain
Renews a domain name for 1 to 10 years: an order and its invoice, which you pay as usual.
quote_plan_change
What moving a service to another plan would cost now and at renewal. Changes nothing.
change_plan
Moves a service to another plan; an amount due makes an invoice.
cancel_service
Cancels a service, at the end of its billing period or immediately, after saying what would happen.
get_payment_methods_link
The client area page where you add or change a payment method.
get_domain_registrar_settings
A domain name's nameservers and whether it is locked against transfers.
set_domain_nameservers
Points a domain name to other nameservers.
set_domain_lock
Locks or unlocks a domain name at its registrar.
list_dns_zones
The DNS zones of a hosting service on Ex2's servers.
get_dns_zone
The records of a DNS zone: MX, SPF, DKIM and DMARC among them.
change_dns_records
Adds, changes and removes DNS records of a zone, in one go (not those carrying the mail of the account's addresses).
export_dns_zone
A DNS zone as a zone file, to keep or move elsewhere.
get_service_ssl
The SSL certificates of a service's sites and when they expire.
get_service_usage
What a service uses of its plan: disk, bandwidth, databases, mailboxes.
get_site_errors
The latest errors of a site, from the web server's log.
get_php_errors
The latest lines of a site's PHP error log.
list_mailboxes
The mailboxes of a hosting service: address, space used and limit.
create_mailbox
Creates a mailbox; its password, made by Ex2, is answered once.
change_mailbox
Gives a mailbox a new password or size limit.
delete_mailbox
Deletes a mailbox and its messages, after a preview.
list_forwarders
The forwarders of a hosting service's domains.
add_forwarder
Sends an address's mail on to another address.
remove_forwarder
Stops a forwarder.
list_wordpress_sites
The WordPress sites of a hosting service, with their versions.
get_wordpress_status
A site's WordPress, plugins and themes, with the updates offered.
update_wordpress
Updates WordPress, plugins or themes as a job, after a copy of the database.
install_wordpress
Installs WordPress on a site whose folder is empty, as a job, with its database; the administrator's password is shown once, or set by the customer where the service holds the account's mail.
list_wordpress_copies
The copies of a WordPress site's database made before an update or a restore.
restore_wordpress_database
Puts a WordPress site's database back as one of its copies was, after a new copy.
list_stagings
The staging copies of your WordPress sites, each with its live site, its address and its database.
create_staging
Copies a WordPress site to a staging subdomain, as a job, with a database of its own, to try changes away from the live site; search engines are asked not to index it. On Ex2's recent servers.
push_staging
Puts a staging copy's files, database or both live, as a job, after a copy of the live database; with the database, what changed on the live site since the copy is lost. On Ex2's recent servers.
delete_staging
Deletes a staging copy's files and database; its subdomain stays.
export_site
Archives a site's folder and WordPress database as a job, to download for a week.
export_account
Archives a whole hosting account as a job (files, databases, DNS zones; never the mail), to move it elsewhere.
list_site_exports
The archives of a hosting service's sites, with their download address.
get_job
Where a job stands, step by step.
list_databases
The databases of a hosting service, with their users.
create_database
Creates a database and its user; the password is answered once.
change_database_password
Gives a database user a new password, answered once.
list_subdomains
The subdomains of a hosting service.
create_subdomain
Creates a subdomain with its folder and DNS record.
list_addon_domains
The addon domains of a hosting service, with their folders.
add_addon_domain
Adds one of your domain names at Ex2 to a hosting service as a site of its own.
list_domain_aliases
The aliases (parked domains) of a hosting service.
add_domain_alias
Makes one of your domain names at Ex2 show a hosting service's main site.
list_ssh_keys
The SSH keys of a hosting service, with their fingerprints.
add_ssh_key
Authorizes a public key to log in to a hosting service over SSH.
remove_ssh_key
Takes an SSH key away from a hosting service.
list_backups
The backups of a hosting service, newest first, and what each holds.
get_backup
The parts of one backup: the home folder, each database, the mail and the others.
backup_now
Makes a backup of a hosting service now, as a job.
restore_backup
Puts files of a hosting service, or one of its databases, back as they were in a backup, as a job.
list_php_versions
The PHP versions installed, and each site's.
set_php_version
Moves a site to another PHP version.
get_php_settings
The PHP settings of a hosting service (memory, upload size, time limit...) and the values allowed.
set_php_settings
Changes PHP settings of a hosting service, for all its sites.
list_cron_jobs
The cron jobs of a hosting service, and what those made through the API run.
add_cron_job
Schedules a PHP script or a call to one of the site's addresses (every 5 minutes at most).
remove_cron_job
Removes a cron job made through the API.
get_mail_authentication
Whether each domain's SPF, DKIM and DMARC are in place.
list_support_departments
The departments of Ex2's support a ticket can go to.
open_ticket
Opens a support ticket in your name, about a service or a domain name, with a note naming the assistant and what it last did.
reply_to_ticket
Adds your reply to one of your tickets. The answers come by email and in the client area.
transfer_domain_out
Prepares a domain name's move to another registrar: unlocks it and emails its transfer code to you, never to the assistant.

Also as an HTTP API for agents and scripts, behind the same sign-in (OAuth 2.1, with this address as the resource): https://api.ex2.com/api/v1/account. Its OpenAPI description lists the endpoints: the account, services, domain names, invoices, tickets, the same actions as the tools, and the audit log of what each connection did. For your own scripts, make an API token on the connected assistants page, ticking only the actions it needs.

You decide

Before you log in, Ex2’s own page names the application and lists what it will read. You log in with your Ex2 client area login, and choose the account if your login manages several.

Your permissions apply

A contact of an account only sees what their client area permissions allow, checked again at every request. Passwords, payment details and ticket messages are never shared.

Disconnect at any time

See the assistants connected to your account and disconnect any of them on the connected assistants page. Access lasts an hour and is renewed only while the connection exists.

The catalogue API

JSON over HTTPS, GET only, open to any origin (CORS). Every answer names its currency; amounts exclude taxes.

EndpointAnswerTry it
GET /api/v1What the API offers, its parameters and the product lines with their plan ids.Try it
GET /api/v1/plansEvery plan with its prices, first-year discount, features and order link. line=email keeps one product line.Try it
GET /api/v1/plans/{id}One plan, with its specification table.Try it
GET /api/v1/compareTwo to ten plans side by side: plans=id1,id2.Try it
GET /api/v1/domains/pricingOne-year register, transfer and renewal price per extension: tld=com,ca or all of them.Try it
GET /api/v1/domains/availabilityWhether domain=… can be registered now, its prices and the cart link.Try it

Parameters on every endpoint: currency (CAD, EUR or USD; USD by default) and lang (en or fr; en by default).

The OpenAPI 3.1 description of the API, to import into a custom GPT (Actions), Postman or a code generator:

https://www.ex2.com/api/v1/openapi.json

Example

The price of a .com, in your currency (a live answer):

curl "https://www.ex2.com/api/v1/domains/pricing?tld=com&currency=CAD"
{
    "currency": "CAD",
    "period_years": 1,
    "order_url": "https://www.ex2.com/clients/cart.php?a=add&domain=register&currency=6&language=english",
    "domains": [
        {
            "tld": ".com",
            "register": 18.9200000000000017053025658242404460906982421875,
            "transfer": 18.9200000000000017053025658242404460906982421875,
            "renew": 22.07000000000000028421709430404007434844970703125
        }
    ]
}

Good to know

No key for the catalogue

The catalogue is public: no key, no account. Your own account needs your Ex2 login, through the sign-in page, and an assistant or a token acts on it only where you ticked a box. Nothing is paid through either: an order or a renewal makes an invoice you pay in the client area.

Live prices

Read from Ex2’s billing system and kept 10 minutes at most (5 for a domain check). Cache them on your side too.

Fair use

Domain availability: 30 checks per 10 minutes per address, 120 through the MCP server. Your account: 120 requests a minute per connection, and limits per hour or per day on actions, given in its OpenAPI description. Over a limit, HTTP 429 with Retry-After. Whether everything works: /api/v1/status.

Stable

Fields are added, never renamed or removed. A breaking change comes as a new version (/api/v2); the old one keeps answering for at least 12 months, with Deprecation and Sunset headers and a notice here. Errors are RFC 9457 problem details.

Two languages, three currencies

Names, features and links in English or French; prices in CAD, EUR or USD, as the product pages show them.

For language models

/llms.txt describes the site and its products for AI agents, and points them to the API and the MCP server.

Questions

About the API and the MCP servers.

Do I need an account or an API key?

Not for the catalogue: the API, the public MCP server and llms.txt are open to all. The account server asks you to sign in with your Ex2 login, and needs no API key either.

Can an assistant order a plan or manage my services through it?

No. Once you connect the account server it can read your services, invoices and tickets, but not order, pay or change anything: it gives you the link to the cart or to the client area instead.

Is a domain shown as available sure to be mine?

Not quite: the check is a live WHOIS lookup, kept 5 minutes. Someone else can register the name in the meantime, and a premium or reserved name can still be refused at checkout.

Are the prices the ones on the site?

Yes: the same billing system and the same first-year discounts as the product pages. Prices exclude taxes.

Which AI assistants work with the MCP server?

Any client that supports remote MCP servers over Streamable HTTP: Claude, Claude Code, ChatGPT, Cursor, VS Code and others. The public server needs no authentication; the account server uses the sign-in these apps support (OAuth).

Something does not work as described?

Open a support ticket with the URL you called and the answer you got.

Do you have any question?

Contact our support