Prices and availability for the reseller account: the net price table of every TLD you can sell, and a per-name availability check with its price.
Get your price list #
GET
/reseller/pricing
Your net prices for every TLD you can sell, in your account’s currency. This is also the list of TLDs available to you: a TLD that is not here cannot be registered or transferred through the API.
For each TLD, register and renew list every term you can buy
(years from min_years to max_years) with its price; transfer lists
only the minimum term, the one a transfer buys. grace_fee and
redemption_fee are added to a renewal in grace and to a restore;
null means none is charged. Prices are net of tax.
idn says whether the API accepts a Unicode name on the TLD (a Unicode
name on a TLD with idn: false is refused as invalid_domain); it is
not a statement about which scripts the registry supports.
registrant_countries lists the registrant countries (ISO codes) the
TLD accepts: a register or transfer with a registrant elsewhere is
refused as invalid_contact before any credit is taken. null means
the panel knows no country restriction, not that the registry has none.
A transfer always requires auth_code, whatever the TLD.
- Authentication: bearer Token
- Rate limit: 10 req/min per account
Responses
-
200Your price list.
Response body
application/json-
dataobject2 properties
-
currencystring -
tldsarray of object12 properties
-
extensionstring -
min_yearsinteger -
max_yearsinteger -
registerarray of object2 properties
-
yearsinteger -
pricenumber
-
-
renewarray of object2 properties
-
yearsinteger -
pricenumber
-
-
transferarray of object2 properties
-
yearsinteger -
pricenumber
-
-
grace_feenumber | null -
redemption_feenumber | null -
grace_daysinteger -
redemption_daysinteger -
idnboolean -
registrant_countriesarray of string | null
-
-
-
-
401Missing, invalid or expired token. MessageError -
403not_resellercredit_disabledforbiddenip_not_allowedip_whitelist_misconfiguredResellerError -
429Rate limit exceeded. Retry after the number of seconds inRetry-After. MessageError
cURL
curl 'https://portal.supporthost.com/api/v1/reseller/pricing' \
-H "Authorization: Bearer $API_TOKEN" \
-H 'Accept: application/json'
PHP
Install Guzzle once: composer require guzzlehttp/guzzle
<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://portal.supporthost.com/api/v1/reseller/pricing', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('API_TOKEN'),
'Accept' => 'application/json',
],
]);
echo $response->getBody();
Node.js
// Save as a .mjs file (ES module, Node 18+): it uses top-level await.
const response = await fetch('https://portal.supporthost.com/api/v1/reseller/pricing', {
headers: {
Authorization: `Bearer ${process.env.API_TOKEN}`,
Accept: 'application/json',
},
});
console.log(await response.json());
200
{
"data": {
"currency": "EUR",
"tlds": [
{
"extension": ".com",
"min_years": 1,
"max_years": 10,
"register": [
{
"years": 1,
"price": 11.1699999999999999289457264239899814128875732421875
}
],
"renew": [
{
"years": 1,
"price": 11.1699999999999999289457264239899814128875732421875
}
],
"transfer": [
{
"years": 1,
"price": 11.1699999999999999289457264239899814128875732421875
}
],
"grace_fee": null,
"redemption_fee": 79.900000000000005684341886080801486968994140625,
"grace_days": 30,
"redemption_days": 30,
"idn": true,
"registrant_countries": null
}
]
}
}
Error responses share one format: see Errors.
Check a domain name #
GET
/reseller/domains/check
Tells you whether name can be registered, with your register and
transfer price for the TLD’s minimum term. Use it before
POST /reseller/domains/register or /transfer.
available is null when the registry could not be asked right now:
retry later. A name already held on this server is reported as not
available. Nothing is reserved or charged.
A definite answer is reused for up to 2 minutes, so asking again for
the same name costs no registry lookup; register and transfer always
check afresh before charging.
- Authentication: bearer Token
- Rate limit: 300 req/min per account
Parameters
Query
-
namestring required-
Max length
255
-
Max length
Responses
-
200Availability and price.
Response body
application/json-
dataobject6 properties
-
namestring -
availableboolean | null -
currencystring -
register_pricenumber | null -
transfer_pricenumber | null -
min_yearsinteger
-
-
-
401Missing, invalid or expired token. MessageError -
403not_resellercredit_disabledforbiddenip_not_allowedip_whitelist_misconfiguredResellerError -
422invalid_requestinvalid_domaintld_not_sellableResellerError -
429Rate limit exceeded. Retry after the number of seconds inRetry-After. MessageError
cURL
curl 'https://portal.supporthost.com/api/v1/reseller/domains/check?name=example.com' \
-H "Authorization: Bearer $API_TOKEN" \
-H 'Accept: application/json'
PHP
<?php
require 'vendor/autoload.php';
$client = new GuzzleHttp\Client();
$response = $client->request('GET', 'https://portal.supporthost.com/api/v1/reseller/domains/check?name=example.com', [
'headers' => [
'Authorization' => 'Bearer ' . getenv('API_TOKEN'),
'Accept' => 'application/json',
],
]);
echo $response->getBody();
Node.js
const response = await fetch('https://portal.supporthost.com/api/v1/reseller/domains/check?name=example.com', {
headers: {
Authorization: `Bearer ${process.env.API_TOKEN}`,
Accept: 'application/json',
},
});
console.log(await response.json());
200
{
"data": {
"name": "example.com",
"available": true,
"currency": "EUR",
"register_price": 11.1699999999999999289457264239899814128875732421875,
"transfer_price": 11.1699999999999999289457264239899814128875732421875,
"min_years": 1
}
}
Error responses share one format: see Errors.