Every API here is available over the APIs.io API and to AI agents over MCP.
MCP server
One button, every client — Claude, Cursor, VS Code and the rest.
https://apis.io/mcp
Tools for apis
7 MCP tools reach this
find_apisBrowse and filter every API in the catalog.
get_api_artifactsOne API's artifacts, grouped by type.
get_openapiThe primary OpenAPI for this API.
find_similar_apisAPIs that look like this one.
apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
resolveTurn a domain, URL or GitHub org into the provider it belongs to.
find_cohortsEvery scored population of providers in the catalog.
All 92 tools →
Call it yourself
curl for this page
This API
curl "https://apis.io/api/v1/apis/ex2-com:ex2-com-plans-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"
Discovery needs no key. Ratings and market analysis are Pro.
Get an API key
Free tier, no form to fill in. Signing in shares your email address with us — we
store it to create your key and to recognise you if you sign in with another
provider. See our Privacy Policy and
Terms.
A second provider on the same verified email joins the account you already have.
openapi: 3.2.0
info:
title: Ex2 catalogue Plans API
version: '1'
summary: Plans, prices and domain names of Ex2, web hosting from Québec.
description: Read-only, public, no authentication. Prices come from the Ex2 billing system (cached for up to 10 minutes), in the currency asked for, excluding taxes. Fields are added, never renamed or removed. A breaking change comes as a new version (/api/v2); the old one then keeps answering for at least 12 months, with Deprecation and Sunset headers (RFC 9745, RFC 8594) and a notice on the developers page. Errors are RFC 9457 problem details. The same data is available to AI assistants through the MCP server at https://www.ex2.com/mcp.
termsOfService: https://www.ex2.com/en/terms-and-conditions
contact:
name: Ex2 support
url: https://www.ex2.com/en/support
servers:
- url: https://www.ex2.com
tags:
- name: Plans
paths:
/api/v1/plans:
get:
operationId: listPlans
summary: List plans and prices
description: Every plan with its prices per billing cycle, first-year discount, main features and order link. line keeps one product line.
parameters:
- $ref: '#/components/parameters/line'
- $ref: '#/components/parameters/currency'
- $ref: '#/components/parameters/lang'
responses:
'200':
description: The plans.
content:
application/json:
schema:
$ref: '#/components/schemas/PlanList'
'400':
description: A parameter is not valid.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: WHMCS (or, for availability, the registry) is unreachable and nothing is cached. Try again in a few minutes.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Plans
/api/v1/plans/{id}:
get:
operationId: getPlan
summary: Get one plan
description: One plan, with its full specification table.
parameters:
- $ref: '#/components/parameters/planId'
- $ref: '#/components/parameters/currency'
- $ref: '#/components/parameters/lang'
responses:
'200':
description: The plan.
content:
application/json:
schema:
$ref: '#/components/schemas/PlanDetail'
'400':
description: A parameter is not valid.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'404':
description: No plan has this id.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
'503':
description: WHMCS (or, for availability, the registry) is unreachable and nothing is cached. Try again in a few minutes.
content:
application/problem+json:
schema:
$ref: '#/components/schemas/Error'
tags:
- Plans
components:
parameters:
line:
name: line
in: query
required: false
description: Keep the plans of one product line.
schema:
type: string
enum:
- green
- wordpress
- divi
- woocommerce
- ecommerce
- cms
- site-builder
- n8n
- email
- reseller
- vps
- dedicated
- server-management
planId:
name: id
in: path
required: true
description: A plan id.
schema:
type: string
enum:
- green-power
- green-expert
- green-ultra
- green-xtreme
- wordpress-editor
- wordpress-professional
- wordpress-agency
- divi-editor
- divi-professional
- divi-agency
- woocommerce-wooboost
- woocommerce-woomax
- woocommerce-wooedge
- ecommerce-prestashop
- ecommerce-magento
- cms-joomla
- cms-moodle
- cms-drupal
- site-builder-website
- site-builder-store
- n8n-ultra
- n8n-xtreme
- email-mini
- email-small
- email-medium
- email-large
- email-xlarge
- email-unlimited
- reseller-start
- reseller-expert
- reseller-mega
- vps-ng1
- vps-ng2
- vps-ng3
- vps-ng4
- vps-ng5
- dedicated-start
- dedicated-pro
- dedicated-advanced
- dedicated-ultimate
- server-management-basic
- server-management-business
- server-management-critical
currency:
name: currency
in: query
required: false
description: 'Currency of the prices: EUR for France and Europe, CAD for Canada, USD elsewhere.'
schema:
type: string
enum:
- CAD
- EUR
- USD
default: USD
lang:
name: lang
in: query
required: false
description: Language of names, features, specifications and links.
schema:
type: string
enum:
- en
- fr
default: en
schemas:
Plan:
type: object
required:
- id
- line
- name
- url
- featured
- on_quote
- features
- pricing
- order_url
properties:
id:
type: string
description: 'Stable plan id: <line>-<key>.'
line:
type: string
enum:
- green
- wordpress
- divi
- woocommerce
- ecommerce
- cms
- site-builder
- n8n
- email
- reseller
- vps
- dedicated
- server-management
name:
type: string
url:
type: string
format: uri
description: The plan's product page.
featured:
type: boolean
description: The plan the page highlights.
on_quote:
type: boolean
description: 'Sold on quote: no price, contact Ex2 through url.'
features:
type: array
items:
type: string
description: Main features, as the page lists them.
mailboxes:
oneOf:
- type: integer
minimum: 1
- const: unlimited
description: Email plans only.
performance_index:
type: number
description: Resources against green hosting Power = 1, where the catalogue has it.
pricing:
oneOf:
- $ref: '#/components/schemas/Pricing'
- type: 'null'
description: null when sold on quote or not priced in this currency.
order_url:
oneOf:
- type: string
format: uri
- type: 'null'
description: The cart with this plan, or null without pricing.
specs:
type: array
items:
$ref: '#/components/schemas/Spec'
description: 'Single plan and compare only: the plan''s column of its page''s comparison table.'
Pricing:
type: object
required:
- free
- billing_cycles
- setup_fees
- first_year_discount
- from_per_month
properties:
free:
type: boolean
billing_cycles:
type: object
properties:
monthly:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
quarterly:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
semiannually:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
annually:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
biennially:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
triennially:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
additionalProperties: false
description: Price of each enabled cycle, which is also the renewal price.
setup_fees:
type: object
properties:
monthly:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
quarterly:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
semiannually:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
annually:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
biennially:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
triennially:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
additionalProperties: false
description: Setup fee per cycle, where there is one.
first_year_discount:
oneOf:
- type: object
required:
- percent
- annually
properties:
percent:
type: number
minimum: 0
maximum: 100
annually:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
- type: 'null'
from_per_month:
type: number
minimum: 0
description: In the answer's currency, excluding taxes.
PlanList:
type: object
required:
- currency
- lang
- plans
properties:
currency:
type: string
lang:
type: string
plans:
type: array
items:
$ref: '#/components/schemas/Plan'
Error:
type: object
required:
- type
- title
- status
- detail
- code
- error
description: RFC 9457 problem details, sent as application/problem+json; error repeats code and detail as the API first gave them.
properties:
type:
type: string
description: urn:ex2:problem:<code>
title:
type: string
status:
type: integer
detail:
type: string
description: What to change, in English.
code:
type: string
description: The same code as error.code.
error:
type: object
required:
- code
- message
properties:
code:
type: string
description: Stable, e.g. invalid_currency, unknown_plan, invalid_domain, unsupported_tld, rate_limited, unavailable, whois_unavailable.
message:
type: string
description: What to change, in English.
Spec:
type: object
required:
- label
- value
properties:
label:
type: string
value:
type:
- string
- boolean
description: true / false for the table's check marks and crosses.
PlanDetail:
type: object
required:
- currency
- lang
- plan
properties:
currency:
type: string
lang:
type: string
plan:
$ref: '#/components/schemas/Plan'
externalDocs:
description: Developers page
url: https://www.ex2.com/en/developers