Change Log
-
Added transfer_lock support to domain info and domain update
-
Added supports_transfer_lock flag to TLD info
-
Added folder support to handle info, handle create and handle update
-
Added disclose_on_whois flag to handle info, handle create and handle update
-
Add tags field to domain list, domain info and deep domain info
-
Added support to set tags on domain update
-
Added domain delete endpoint
-
API versions prior to 1.6 have been removed
-
Always return datetimes in UTC
-
Allow fetching domain info for domains pending transfer
-
Added use_whois_privacy flag to domain info, domain update, domain register and domain transfer
-
Always require handles even when local presence is being used for domain update, domain register and domain transfer
-
Added allow_transfer flag to domain info and domain updates
-
Added suspended flag to domain info and deep domain info
-
Added renewable flag to deep domain info
-
Added addons section to deep domain info
-
Added ability to filter domain list by folder
-
Added protected flag to dns list
-
Added suspend domain and unsuspend domain endpoints
-
Added dns update endpoint
-
Added transfer_requires_auth_code flag to TLD prices
-
Added categories to TLD info
-
Added support for email forwarding
-
Added support for web forwarding
-
Updated authentication method to HTTP HMAC - details
-
Added API webhook support for API messages - details
-
Deprecated all previous API versions - view deprecations
-
Added registered_at, folder to domain list
-
Added pending_registrant_handle to domain list and domain info
-
Added expires_at to domain list
-
Added registrant_handle, tech_handle and admin_handle to domain list
-
Changed datetime format to ISO-8601 compatible format (1970-01-01T01:00:00+01:00)
-
Added message queue support
-
Added SMD support for sunrise domain applications
-
Added support for fetching and using claim notifications
Deprecations
| Date | Notice |
|---|---|
2018-07-25 |
All API versions below 1.6 will no longer be supported after 2019-01-31 |
Introduction
The Lexsynergy API is a REST-ful API over HTTPS for managing your Lexsynergy API-enabled portfolio.
This book covers version 1.10 of the API
|
Warning
|
You are strongly advised to test your implementation of the API via the OT&E platform before moving to production. Please contact your account manager for access to the OT&E API and connection details. |
Basics
-
URLs should be in the follow format
https://{hostname}/{api version}/{resource}.json -
The Content-Type MUST be set to
application/json -
All requests MUST be signed using HTTP HMAC authentication
-
All GET methods also support the POST method for client compatibility reasons
Authentication
Authorisation is done via the HTTP "Authorization" header.
|
Note
|
Make sure your server’s clock is synchronised with an NTP server. Requests are only valid for +/- 10 seconds based on the timestamp in the authorisation header |
|
Note
|
Your NONCE can be reused after 60 seconds from the time of the initial request. This will still prevent replay attacks based on the above time based restriction. |
Authorization = "lexsynergy-http-hmac" + " " +
"realm=" + URLEncode( Realm ) + "&" +
"key=" + URLEncode( Api_Key ) + "&" +
"nonce=" + URLEncode( Nonce ) + "&" +
"timestamp=" + URLEncode( Unix_Timestamp ) + "&" +
"signature=" + URLEncode( HMAC_Signature )
Realm = "api"
Nonce = RFC4122_UUID()
HMAC_Signature = Base64( HMACSHA256 ( Secret_Key, String_To_Sign ) )
String_To_Sign = Realm + "\n" +
Api_Key + "\n" +
Nonce + "\n" +
Unix_Timestamp + "\n" +
Upper_Case(HTTP_Method) + "\n" +
URL + "\n" +
Request_Body + "\n"
PHP Example
<?php
class RequestSigner
{
public function __construct(
private string $apiKey,
private string $apiSecret,
private string $realm = 'api',
) {}
public function getAuthorisationHeader(string $method, string $url, string $body): string
{
$timestamp = time();
$nonce = uuid_create(UUID_TYPE_RANDOM);
$signature =
$this->realm . "\n" .
$this->apiKey . "\n" .
$nonce . "\n" .
$timestamp . "\n" .
strtoupper($method) . "\n" .
$url . "\n" .
$body . "\n";
return 'lexsynergy-http-hmac ' . http_build_query(
[
'realm' => $this->realm,
'key' => $this->apiKey,
'nonce' => $nonce,
'timestamp' => $timestamp,
'signature' => base64_encode(hash_hmac('sha256', $signature, $this->apiSecret, true)),
]
);
}
}
$apiKey = '';
$apiSecret = '';
$method = 'GET';
$url = 'https://api.lexsynergy.com/1.10/domains/info.json';
$body = '{"name": "domain.tld"}';
$requestSigner = new RequestSigner($apiKey, $apiSecret);
printf("Authorization: %s\n", $requestSigner->getAuthorisationHeader($method, $url, $body));
JavaScript Example
const apiKey = '';
const apiSecret = '';
const realm = 'api';
const uuid = require('uuid');
const crypto = require('crypto-js');
const querystring = require('querystring');
function getAuthorisationHeader(method, url, body)
{
const nonce = uuid.v4();
const timestamp = Math.floor(Date.now() / 1000);
let signature =
realm + '\n' +
apiKey + '\n' +
nonce + '\n' +
timestamp + '\n' +
method.toUpperCase() + '\n' +
url + '\n' +
body + '\n';
signature = crypto.enc.Base64.stringify(crypto.HmacSHA256(signature, apiSecret));
return 'lexsynergy-http-hmac ' + querystring.stringify(
{
realm: realm,
key: apiKey,
nonce: nonce,
timestamp: timestamp,
signature: signature,
}
);
}
const method = 'GET';
const url = 'https://api.lexsynergy.com/1.10/domains/info.json';
const body = '{"name": "domain.tld"}';
console.log('Authorization: ' + getAuthorisationHeader(method, url, body));
Python Example
import base64
import hmac
import sys
import time
import urllib.parse
import uuid
class RequestSigner:
def __init__(self, api_key: str, api_secret: str, realm: str = 'api') -> None:
self._api_key = api_key
self._api_secret = api_secret
self._realm = realm
def authorisation_header(self, method: str, url: str, body: str) -> str:
timestamp: int = int(time.time())
nonce: str = str(uuid.uuid4())
signature: str = f'{self._realm}\n{self._api_key}\n{nonce}\n{timestamp}\n{method.upper()}\n{url}\n{body}\n'
signature = base64.b64encode(
hmac.digest(self._api_secret.encode('utf-8'), signature.encode('utf-8'), 'sha256')
).decode('utf-8')
return 'lexsynergy-http-hmac ' + urllib.parse.urlencode({
'realm': self._realm,
'key': self._api_key,
'nonce': nonce,
'timestamp': timestamp,
'signature': signature
})
if __name__ == '__main__':
api_key: str = ''
api_secret: str = ''
method: str = 'GET'
url: str = 'https://api.lexsynergy.com/1.10/domains/info.json'
body: str = '{"name": "domain.tld"}'
request_signer: RequestSigner = RequestSigner(api_key, api_secret)
sys.stdout.writelines([f'Authorization: {request_signer.authorisation_header(method, url, body)}', '\n'])
Responses
The following response headers will be included if your authorisation header is valid.
X-Signature-Timestamp: Unix_Timestamp
X-Signature: Base64( HMACSHA256 ( Secret_Key, X-Signature-Timestamp + "\n" + HTTP_Status_Code + "\n" + Response_Body ) )
Example Request
For example to get the domain list the request would be:
curl -XGET -H "Content-Type: application/json" \
https://hostname/{api-version}/domains.json \
-d '{
"limit": 50,
"page": 10
}'
However throughout this book we will use the follow formats for resource, request, and response:
GET /domains.json
{
"limit": 50,
"page": 10
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "83240286-f065-4b38-afe0-e3ec1352b16a",
"data": {
"limit": 50,
"page": 10,
"count": 46,
"domains": []
}
}
TLDs
Get a list of available TLDs
GET /tlds.json
{
"code": 200,
"message": "Command completed successfully",
"command-id": "bd53a649-d3bb-407c-8a49-20ee3ab6d25c",
"data": {
"tlds": [
"com",
"net"
]
}
}
|
Note
|
This list has been truncated for this book however this will return a long list of TLDs in OT&E and production. |
Get a list of TLD prices
GET /tlds/prices.json
{
"code": 200,
"message": "Command completed successfully",
"command-id": "def344da-e012-48c4-9600-c88e1d47cb11",
"data": {
"currency": "GBP",
"prices": {
"com": {
"registration": "16.20",
"sunrise": "0.00",
"landrush": "0.00",
"renewal": "16.20",
"restore": "69.00",
"transfer": "16.20",
"backorder": "69.00",
"registrant_change": "0.00",
"nameserver_change": "0.00",
"local_presence": "0.00",
"registration_years": [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ],
"renewal_years": [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ],
"transfer_requires_auth_code": true
},
"net": {
"registration": "16.20",
"sunrise": "0.00",
"landrush": "0.00",
"renewal": "16.20",
"restore": "69.00",
"transfer": "16.20",
"backorder": "69.00",
"registrant_change": "0.00",
"nameserver_change": "0.00",
"local_presence": "0.00",
"registration_years": [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ],
"renewal_years": [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ],
"transfer_requires_auth_code": true
}
}
}
}
|
Note
|
This list has been truncated for this book however this will return a long list of TLDs in OT&E and production. |
Get TLD info
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
TLD name |
GET /tlds/info.json
{
"name": "net"
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "45f78120-af73-470f-8c1d-38eddb02c4dd",
"data": {
"registration": "16.20",
"sunrise": "0.00",
"landrush": "0.00",
"renewal": "16.20",
"restore": "69.00",
"transfer": "16.20",
"backorder": "69.00",
"registrant_change": "0.00",
"nameserver_change": "0.00",
"local_presence": "0.00",
"registration_years": [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ],
"renewal_years": [ "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" ],
"transfer_requires_auth_code": true,
"country": "",
"region": "",
"requires_local_presence": [],
"local_presence_type": false,
"supports_transfer_lock": true,
"categories": ["gTLD"]
}
}
Account
Get account balance
This command fetches your real-time balance information
GET /account/balance.json
{
"code":200,
"message":"Command completed successfully",
"command-id":"e35fdf34-6d12-4132-99fd-479ad95e6cf2",
"data":{
"currency":"GBP",
"balance":54.61,
"unpaid":712.8,
"credit_limit":10000,
"available_funds":9341.81
}
}
Folders
List folders
|
Note
|
If the user is restricted to a subset of folders only these will be returned. |
| Parameter | Type | Required | Description |
|---|---|---|---|
limit |
integer |
no |
Maximum number of records to return, default and maximum value is 1,000 |
page |
integer |
no |
Page number to return |
GET /account/folders.json
{
"limit": 5,
"page": 2
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "50bd98ce-1887-4db5-8bcd-435601d92955",
"data": {
"limit": 5,
"page": 2,
"count": 16,
"folders": [
"Folder A",
"Folder B",
"Folder C",
"Folder D",
"Folder E"
]
}
}
Create folder
|
Note
|
If the user is restricted to a subset of folders they will not be able to use this command. |
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The new folder’s name |
POST /account/folders/create.json
{
"name": "My New Folder"
}
{
"code": 200,
"message": "Folder created",
"command-id": "05c97d27-c51b-456e-8ced-46e15734385a",
"data": {
"folder": "My New Folder"
}
}
Update folder
|
Note
|
If the user is restricted to a subset of folders they will not be able to use this command. |
| Parameter | Type | Required | Description |
|---|---|---|---|
current |
string |
yes |
The current folder’s name |
name |
string |
yes |
The folder’s new name |
PUT /account/folders/create.json
{
"current": "My New Folder",
"name": "My Updated Folder"
}
{
"code": 200,
"message": "Folder updated",
"command-id": "7e88e409-725a-44a2-bd34-50ca677c8dce",
"data": {
"folder": "My Updated Folder"
}
}
Delete folder
|
Note
|
If the user is restricted to a subset of folders they will not be able to use this command. |
| password | string | yes | Your API password |
|---|---|---|---|
name |
string |
yes |
The current folder’s name |
DELETE /account/folders/delete.json
{
"name": "My Updated Folder"
}
{
"code": 200,
"message": "Folder deleted",
"command-id": "d1766ea7-ea67-4410-93e2-4332b6bebff5",
"data": {
"folder": "My Updated Folder"
}
}
Handles
List handles
| Parameter | Type | Required | Description |
|---|---|---|---|
limit |
integer |
no |
Maximum number of records to return, default and maximum value is 1,000 |
page |
integer |
no |
Page number to return |
GET /handles.json
{
"limit": 5,
"page": 2
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "490357db-abf0-4d3b-b2b0-fb4ab7da0c49",
"data": {
"limit": 5,
"page": 2,
"count": 69,
"handles": [
"Domain Name Department A",
"Domain Name Department B",
"Domain Name Department C",
"Domain Name Department D",
"Domain Name Department E"
]
}
}
Get a handle
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the handle you wish to retrieve |
GET /handles/info.json
{
"name": "Lexsynergy Limited"
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "9da00cdd-9376-4bbe-8375-37a5540e042d",
"data": {
"name": "Lexsynergy Limited",
"first_name": "Domain Name",
"middle_name": "",
"last_name": "Department",
"company": "Lexsynergy Limited",
"company_number": "",
"address_line_1": "130 Hampstead House",
"address_line_2": "176 Finchley Road",
"city": "London",
"county": "London",
"postcode": "NW3 6BT",
"telephone": "+44.2081331319",
"fax": "+43.15120587",
"email": "domains@lexsynergy.com",
"disclose_on_whois": true,
"country": "GB",
"folder": null
}
}
Create a handle
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
Handle name |
first_name |
string |
yes |
|
middle_name |
string |
no |
|
last_name |
string |
yes |
|
company |
string |
no |
|
company_number |
string |
no |
|
address_line_1 |
string |
yes |
|
address_line_2 |
string |
no |
|
city |
string |
yes |
|
county |
string |
no |
|
postcode |
string |
no |
This is not optional for handles using country code GB or US |
country |
string |
yes |
Two letter ISO 3166-1 country code |
telephone |
string |
yes |
Format +44.2081331319 |
fax |
string |
no |
Format +44.2081331319 |
string |
yes |
||
folder |
string |
no |
|
disclose_on_whois |
boolean |
no |
Only allowed when the handle is not a company |
|
Note
|
If disclose_on_whois is set to false then this handle will not qualify for use as a local presence handle |
POST /handles/create.json
{
"name": "Domain Name Department Z",
"first_name": "Domain Name",
"last_name": "Department",
"company": "Lexsynergy Limited",
"company_number": "",
"address_line_1": "130 Hampstead House",
"address_line_2": "176 Finchley Road",
"city": "London",
"county": "London",
"postcode": "NW3 6BT",
"telephone": "+44.2081331319",
"fax": "+43.15120587",
"email": "domains@lexsynergy.com",
"country": "GB"
}
{
"code": 200,
"message": "Handle created",
"command-id": "55590fdb-e4cd-406c-8b1e-495ba45e5d15",
"data": {
"handle": "Domain Name Department Z"
}
}
Update a handle
| Parameter | Type | Required | Description |
|---|---|---|---|
current |
string |
yes |
Current handle name |
name |
string |
no |
New handle name, handle must not already exist |
first_name |
string |
yes |
|
middle_name |
string |
no |
|
last_name |
string |
yes |
|
company |
string |
no |
|
company_number |
string |
no |
|
address_line_1 |
string |
yes |
|
address_line_2 |
string |
no |
|
city |
string |
yes |
|
county |
string |
no |
|
postcode |
string |
no |
This is not optional for handles using country code GB or US |
country |
string |
yes |
Two letter ISO 3166-1 country code |
telephone |
string |
yes |
Format +44.2081331319 |
fax |
string |
no |
Format +44.2081331319 |
string |
yes |
||
folder |
string |
no |
Set to empty string to remove from a folder |
disclose_on_whois |
boolean |
no |
Only allowed when the handle is not a company, defaults to false for non companies |
|
Note
|
If disclose_on_whois is set to false then this handle will not qualify for use as a local presence handle |
PUT /handles/create.json
{
"current": "Domain Name Department Z",
"name": "Domain Name Department Z (updated)",
"first_name": "Domain Name",
"last_name": "Department",
"company": "Lexsynergy Limited",
"company_number": "",
"address_line_1": "130 Hampstead House",
"address_line_2": "176 Finchley Road",
"city": "London",
"county": "London",
"postcode": "NW3 6BT",
"telephone": "+44.2081331319",
"fax": "+43.15120587",
"email": "domains@lexsynergy.com",
"country": "GB"
}
{
"code": 200,
"message": "Handle updated",
"command-id": "d474111b-aa11-43fc-9a39-62fbbfce98aa",
"data": {
"handle": "Domain Name Department Z (updated)"
}
}
Delete a handle
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
Current handle name |
DELETE /handles/delete.json
{
"name": "Domain Name Department Z (updated)"
}
{
"code": 200,
"message": "Handle deleted",
"command-id": "26d63d50-e7fd-4218-90cf-9fcda8a8253a",
"data": {
"handle": "Domain Name Department Z (updated)"
}
}
Domains
List of domains
| Parameter | Type | Required | Descriptiond |
|---|---|---|---|
limit |
integer |
no |
Maximum number of records to return, default and maximum value is 1,000 |
page |
integer |
no |
Page number to return |
folder |
string |
no |
Filter list by folder, set to empty string to list domains without a folder |
GET /domains.json
{
"limit": 2,
"page": 10
}
|
Note
|
If the domain has no expiration date yet, for example: if it is pending create, then the expires_at field will be null |
|
Note
|
If local presence is being used on a handle it will return null instead of the handle’s name |
{
"code": 200,
"message": "Command completed successfully",
"command-id": "c6543ea0-4d48-11ec-8bab-f23c921cb2d2",
"data": {
"limit": 2,
"page": 10,
"count": 500,
"domains": [
{
"name": "domain01.capetown",
"status": "Pending Landrush Registration",
"expires_at": null,
"registered_at": null,
"registrant_handle": "Lexsynergy Limited",
"admin_handle": "Lexsynergy Limited",
"tech_handle": "Lexsynergy Limited",
"folder": "Domain names",
"tags": [],
},
{
"name": "domain02.com",
"status": "Registered",
"expires_at": "2022-05-03T13:59:35+00:00",
"registered_at": "2005-05-03T13:59:35+00:00",
"registrant_handle": "Lexsynergy Limited",
"admin_handle": "Lexsynergy Limited",
"tech_handle": "Lexsynergy Limited",
"pending_registrant_handle": "New Registrant",
"folder": null,
"tags": [
"Development"
]
}
]
}
}
Get domain info
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain you wish to retrieve |
deep |
boolean |
no |
If deep is true you get full handle info embedded in the response otherwise just handle names |
Basic / shallow request
GET /domains/info.json
{
"name": "domain01.com"
}
|
Note
|
Where a domain does not support transfer locks "transfer_lock" will be set to null instead of a boolean |
{
"code": 200,
"message": "Command completed successfully",
"command-id": "8f0dd7da-4d48-11ec-afb8-f23c921cb2d2",
"data": {
"name": "domain01.com",
"status": "Registered",
"registered_at": "2005-05-03T13:59:35+00:00",
"expires_at": "2022-05-03T13:59:35+00:00",
"use_whois_privacy": false,
"auto_renew_mode": "Auto Renew",
"use_lexsynergy_ns": true,
"allow_transfer": false,
"suspended": false,
"transfer_lock": true,
"registrant_handle": "Lexsynergy Limited",
"registrant_handle_use_local_presence": false,
"admin_handle": "Lexsynergy Limited",
"admin_handle_use_local_presence": false,
"tech_handle": "Lexsynergy Limited",
"tech_handle_use_local_presence": false,
"pending_registrant_handle": "New Registrant",
"nameservers": [
{
"name": "ns1.lexsynergy.net"
},
{
"name": "ns2.lexsynergy.us"
},
{
"name": "ns3.lexsynergy.info"
}
],
"folder": "My Folder",
"tags": [
"Development"
]
}
}
Deep request
GET /domains/info.json
{
"name": "domain02.com",
"deep": true
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "f5865ed6-7e00-45ae-b2ba-f5739570aad4",
"data": {
"name": "domain02.com",
"status": "Registered",
"registered_at": "2005-05-03T13:59:35+00:00",
"expires_at": "2022-05-03T13:59:35+00:00",
"use_whois_privacy": false,
"auto_renew_mode": "Auto Renew",
"use_lexsynergy_ns": true,
"allow_transfer": false,
"suspended": false,
"transfer_lock": true,
"renewable": true,
"addons": [
{
"service": "Anycast DNS",
"expires_at": "2022-05-03T13:59:35+00:00"
}
],
"registrant_handle": {
"name": "Lexsynergy Limited",
"first_name": "Domain Name",
"middle_name": "",
"last_name": "Department",
"company": "Lexsynergy Limited",
"company_number": "",
"address_line_1": "130 Hampstead House",
"address_line_2": "176 Finchley Road",
"city": "London",
"county": "London",
"postcode": "NW3 6BT",
"telephone": "+44.2081331319",
"fax": "+43.15120587",
"email": "domains@lexsynergy.com",
"country": "GB"
},
"admin_handle": {
"name": "Lexsynergy Limited",
"first_name": "Domain Name",
"middle_name": "",
"last_name": "Department",
"company": "Lexsynergy Limited",
"company_number": "",
"address_line_1": "130 Hampstead House",
"address_line_2": "176 Finchley Road",
"city": "London",
"county": "London",
"postcode": "NW3 6BT",
"telephone": "+44.2081331319",
"fax": "+43.15120587",
"email": "domains@lexsynergy.com",
"country": "GB"
},
"tech_handle": {
"name": "Lexsynergy Limited",
"first_name": "Domain Name",
"middle_name": "",
"last_name": "Department",
"company": "Lexsynergy Limited",
"company_number": "",
"address_line_1": "130 Hampstead House",
"address_line_2": "176 Finchley Road",
"city": "London",
"county": "London",
"postcode": "NW3 6BT",
"telephone": "+44.2081331319",
"fax": "+43.15120587",
"email": "domains@lexsynergy.com",
"country": "GB"
},
"nameservers": [
{
"name": "ns1.lexsynergy.net"
},
{
"name": "ns2.lexsynergy.us"
},
{
"name": "ns3.lexsynergy.info"
}
],
"folder": "My Folder",
"tags": [
"Development"
]
}
}
Get domain auth code
|
Note
|
Auth codes expire after a period of time, please consult the expires_at value return to see when your auth code will expire |
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain you wish to retrieve an auth code for |
GET /domains/auth-code.json
{
"name": "domain01.com"
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "2a16cb9d-2d96-44e5-a3f5-f0f8216663b2",
"data": {
"name": "domain01.com",
"auth_code": "P8|]!EJ~ug99Yxv9",
"expires_at": "2014-11-24T13:12:49+00:00"
}
}
Update a domain
| Parameter | Type | Required | Description | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
name |
string |
yes |
The name of the domain you wish to update |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
folder |
string |
no |
Set to empty string to remove from a folder |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
auto_renew_mode |
string |
no |
Should be either "Do Not Renew", "Renew Once" or "Auto Renew" |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use_whois_privacy |
boolean |
no |
Use whois privacy service |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
allow_transfer |
boolean |
no |
Allow transfer out of domain and auto accept where possible |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
transfer_lock |
boolean |
no |
Set transfer lock |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
use_lexsynergy_ns |
boolean |
no |
Use Lexsynergy’s nameservers |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tags |
array |
no |
An array of tags to set on the domain, any tags not present here will be removed from the domain |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
nameservers |
object |
no |
A collection/array of nameserver objects |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
registrant_handle_use_local_presence |
boolean |
no |
Use local presence for registrant handle |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
registrant_handle |
string|object |
no |
Either a handle name or object |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
admin_handle_use_local_presence |
boolean |
no |
Use local presence for admin handle |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
admin_handle |
string|object |
no |
Either a handle name or object |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tech_handle_use_local_presence |
boolean |
no |
Use local presence for tech handle |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
tech_handle |
string|object |
no |
Either a handle name or object |
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
PUT /domains/update.json
{
"name": "domain01.com",
"folder": "API Domains",
"registrant_handle": "API-4WCWEVYOK-17C640-0",
"tech_handle": {
"first_name": "Domain Name",
"last_name": "Department",
"company": "Lexsynergy Limited",
"address_line_1": "130 Hampstead House",
"address_line_2": "176 Finchley Road",
"city": "London",
"county": "London",
"postcode": "NW3 6BT",
"telephone": "+44.2081331319",
"fax": "+43.15120587",
"email": "domains@lexsynergy.com",
"country": "GB"
}
}
{
"code": 200,
"message": "Domain updated",
"command-id": "ee10344e-b5f2-4dba-a187-2efe07534c56",
"data": {
"name": "domain01.com"
}
}
Renew a domain
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain you wish to renew |
years |
integer |
yes |
Number of years to renew the domain for |
expires_at |
date |
yes |
The current expiration date, this prevents accidental duplicate renewals |
PUT /domains/renew.json
{
"name": "domain01.com",
"years": 2,
"expires_at": "2015-05-03"
}
{
"code": 200,
"message": "Domain renewed",
"command-id": "3998be12-36d2-4e3a-85a3-90ac61e06b26",
"data": {
"name": "domain01.com",
"expires_at": "2017-05-03T14:59:31+00:00"
}
}
Renew domains in bulk
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain you wish to renew |
years |
integer |
yes |
Number of years to renew the domain for |
expires_at |
date |
yes |
The current expiration date, this prevents accidental duplicate renewals |
PUT /domains/renew.json
{
"domains": [
{
"name": "domain01.com",
"years": 1,
"expires_at": "2017-05-03"
},
{
"name": "domain01.net",
"years": 5,
"expires_at": "2015-05-03"
}
]
}
{
"code": 200,
"message": "2 domains renewed",
"command-id": "ec26b06b-37ff-462e-a269-ff13a6c33bd1",
"data": {
"renewed": {
"domain01.com": {
"expires_at": "2018-05-03T14:59:31+00:00"
},
"domain01.net": {
"expires_at": "2020-05-03T14:59:35+00:00"
}
},
"failures": []
}
}
Check availability of a domain
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
array |
yes |
Array of domain names to check |
GET /domains/check.json
{
"name": ["domain03.com", "domain03.net", "domain03.org", "domain04.com"]
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "f5776756-9551-45dd-8e2c-33b986b795fa",
"data": {
"domains": {
"domain03.com": "available",
"domain03.net": "taken",
"domain03.org": "available",
"domain04.com": "available"
}
}
}
Check for claims notifications
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
array |
yes |
Array of domain names to check |
GET /domains/claims.json
{
"name": ["domain03.com", "domain03.org", "domain04.com"]
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "30b0b287-a9a0-4a3b-b3ef-306fb0d202e5",
"data": {
"notices": {
"tmch\/2014110901\/7\/C\/D\/fNoVPdcFMpsOnieS4D57V26b0000023681": {
"id": "f842049c0000000000039900530",
"notBefore": "2014-11-09T12:00:00+00:00",
"notAfter": "2014-11-11T12:00:00+00:00",
"marks": [
{
"mark": "DOMAIN04",
"jurisdiction": "United Kingdom",
"goodsAndServices": "Hosting websites.Domain name registration services; domain name renewal services; domain name transfer services; domain name portfolio management services.",
"classes": [
{
"class": 42,
"description": "Scientific and technological services and research and design relating thereto; industrial analysis and research services; design and development of computer hardware and software."
}
],
"registrant": {
"company": "Lexsynergy Limited",
"street": [
"130 Hampstead House",
"176 Finchley Road"
],
"city": "London",
"postcode": "NW3 6BT",
"country": "GB"
}
}
]
}
},
"domains": {
"domain04.com": "tmch\/2014110901\/7\/C\/D\/fNoVPdcFMpsOnieS4D57V26b0000023681"
}
}
}
Register a domain name
| Parameter | Type | Required | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
domains |
array |
yes |
Array of domain objects |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST /domains/create.json
{
"domains": [
{
"name": "domain04.com",
"years": 2,
"registrant_handle": "API-4WCWEVYOK-17C640-0",
"tech_handle": "API-4WCWEVYOK-17C640-0",
"admin_handle": "API-4WCWEVYOK-17C640-0",
"use_lexsynergy_ns": true,
"claims": {
"noticeID": "f842049c0000000000039900530",
"notAfter": "2014-11-11T12:00:00+00:00",
"acceptedDate": "2014-11-09T12:05:00+00:00"
}
},
{
"name": "domain03.org",
"years": 5,
"registrant_handle": "API-4WCWEVYOK-17C640-0",
"tech_handle": "API-4WCWEVYOK-17C640-0",
"admin_handle": "API-4WCWEVYOK-17C640-0",
"nameservers": [
{
"name": "ns1.example.com"
},
{
"name": "ns2.domain03.org",
"ips": ["127.0.0.1", "::1"]
}
]
}
]
}
{
"code": 200,
"message": "2 domains submitted for registration",
"command-id": "5c722958-ba9a-4a77-81b1-9d73c83693ac",
"data": {
"registered": {
"domain04.com": {
"status": "Registered",
"registered_at": "2014-11-10T00:00:00+00:00",
"expires_at": "2016-11-10T00:00:00+00:00"
},
"domain03.org": {
"status": "Registered",
"registered_at": "2014-11-10T00:00:00+00:00",
"expires_at": "2019-11-10T00:00:00+00:00"
}
},
"failures": []
}
}
Suspend a domain
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain you wish to suspend |
PUT /domains/suspend.json
{
"name": "domain01.com",
}
Note: If the domain is not already suspended it will be queued for suspension otherwise it will return as saying suspended
{
"code": 200,
"message": "Command completed successfully",
"command-id": "3998be12-36d2-4e3a-85a3-90ac61e06b26",
"data": {
"name": "domain01.com",
"queued": true
}
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "3998be12-36d2-4e3a-85a3-90ac61e06b26",
"data": {
"name": "domain01.com",
"suspended": true
}
}
Unsuspend a domain
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain you wish to unsuspend |
PUT /domains/unsuspend.json
{
"name": "domain01.com",
}
|
Note
|
A domain can be suspended by both Lexsynergy and you, if the domain has been suspended by Lexsynergy then after unsuspending the domain it will return as partially unsuspended |
{
"code": 200,
"message": "Command completed successfully",
"command-id": "a2e2d5d2-4e04-11ec-aa65-02428222e843",
"data": {
"name": "domain01.com",
"queued": true
}
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "f9f467be-4e04-11ec-8b34-02428222e843",
"data": {
"name": "domain01.com",
"partial": true
}
}
Delete a domain
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain you wish to delete |
DELETE /domains/delete
{
"name": "domain01.com",
}
{
"code": 200,
"message": "Domain deleted",
"command-id": "4dff7ba4-add2-11ed-86c1-024207c2e6ec",
"data": {
"name": "domain01.com",
}
}
Domain Transfers
List of pending transfers
| Parameter | Type | Required | Description |
|---|---|---|---|
limit |
integer |
no |
Maximum number of records to return, default and maximum value is 1,000 |
page |
integer |
no |
Page number to return |
GET /domains/transfers.json
{
"limit": 10
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "87d18200-688f-4555-ac06-36e51a702f18",
"data": {
"limit": 10,
"page": 1,
"count": 2,
"domains": [ "domain005.net", "domain004.net" ]
}
}
Get transfer info
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain you wish to retrieve |
deep |
boolean |
no |
If deep is true you get full handle info embedded in the response otherwise just handle names |
Basic / shallow request
GET /domains/transfers/info.json
{
"name": "domain005.net"
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "0ee93bbe-823a-42ab-9a82-fac3755e81f6",
"data": {
"name": "domain005.net",
"auto_renew_mode": "Auto Renew",
"use_lexsynergy_ns": true,
"registrant_handle": "Lexsynergy Limited",
"admin_handle": "Lexsynergy Limited",
"tech_handle": "Lexsynergy Limited",
"nameservers": [
{
"name": "ns1.lexsynergy.net"
},
{
"name": "ns2.lexsynergy.us"
},
{
"name": "ns3.lexsynergy.info"
}
]
}
}
Deep request
GET /domains/transfers/info.json
{
"name": "domain005.net",
"deep": true
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "74b508b1-7d01-4eb4-b322-3715dd8e6e2a",
"data": {
"name": "domain005.net",
"auto_renew_mode": "Auto Renew",
"use_lexsynergy_ns": true,
"registrant_handle": {
"name": "Lexsynergy Limited",
"first_name": "Domain Name",
"middle_name": "",
"last_name": "Department",
"company": "Lexsynergy Limited",
"company_number": "",
"address_line_1": "130 Hampstead House",
"address_line_2": "176 Finchley Road",
"city": "London",
"county": "London",
"postcode": "NW3 6BT",
"telephone": "+44.2081331319",
"fax": "+43.15120587",
"email": "domains@lexsynergy.com",
"country": "GB"
},
"admin_handle": {
"name": "Lexsynergy Limited",
"first_name": "Domain Name",
"middle_name": "",
"last_name": "Department",
"company": "Lexsynergy Limited",
"company_number": "",
"address_line_1": "130 Hampstead House",
"address_line_2": "176 Finchley Road",
"city": "London",
"county": "London",
"postcode": "NW3 6BT",
"telephone": "+44.2081331319",
"fax": "+43.15120587",
"email": "domains@lexsynergy.com",
"country": "GB"
},
"tech_handle": {
"name": "Lexsynergy Limited",
"first_name": "Domain Name",
"middle_name": "",
"last_name": "Department",
"company": "Lexsynergy Limited",
"company_number": "",
"address_line_1": "130 Hampstead House",
"address_line_2": "176 Finchley Road",
"city": "London",
"county": "London",
"postcode": "NW3 6BT",
"telephone": "+44.2081331319",
"fax": "+43.15120587",
"email": "domains@lexsynergy.com",
"country": "GB"
},
"nameservers": [
{
"name": "ns1.lexsynergy.net"
},
{
"name": "ns2.lexsynergy.us"
},
{
"name": "ns3.lexsynergy.info"
}
]
}
}
Transfer a domain name
| Parameter | Type | Required | Description | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
domains |
array |
yes |
Array of domain objects |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
POST /domains/transfers/create.json
{
"domains": [
{
"name": "domain010.net",
"auth_code": "my-auth_code",
"registrant_handle": "API-4WCWEVYOK-17C640-0",
"tech_handle": "API-4WCWEVYOK-17C640-0",
"admin_handle": "API-4WCWEVYOK-17C640-0",
"use_lexsynergy_ns": true
},
{
"name": "domain011.net",
"auth_code": "my-auth_code",
"registrant_handle": "API-4WCWEVYOK-17C640-0",
"tech_handle": "API-4WCWEVYOK-17C640-0",
"admin_handle": "API-4WCWEVYOK-17C640-0",
"nameservers": [
{
"name": "ns1.example.com"
},
{
"name": "ns2.domain011.net",
"ips": ["127.0.0.1", "::1"]
}
]
}
]
}
{
"code": 200,
"message": "2 domains submitted for transfer",
"command-id": "2acfb481-6f6c-4a85-8836-3081154fc21c",
"data": {
"queued": {
"domain010.net": {
"status": "Pending Transfer"
},
"domain011.net": {
"status": "Pending Transfer"
}
},
"failures": []
}
}
DNS
List DNS records for a specific domain
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain’s DNS records you wish to retrieve |
GET /dns.json
{
"name": "domain04.com"
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "7c017d01-3883-4a1a-ae91-72254cfab895",
"data": {
"name": "domain04.com",
"records": [
{
"record": "domain04.com",
"type": "SOA",
"ttl": 86400,
"content": "ns1.lexsynergy.net domains.lexsynergy.com 6 86400 7200 3600000 172800",
"protected": "soa"
},
{
"record": "domain04.com",
"type": "NS",
"ttl": 3600,
"content": "ns1.lexsynergy.net",
"protected": "ns"
},
{
"record": "domain04.com",
"type": "NS",
"ttl": 3600,
"content": "ns2.lexsynergy.us",
"protected": "ns"
},
{
"record": "domain04.com",
"type": "NS",
"ttl": 3600,
"content": "ns3.lexsynergy.info",
"protected": "ns"
},
{
"record": "domain04.com",
"type": "A",
"ttl": 3600,
"content": "1.2.3.4",
"protected": null
},
{
"record": "www.domain04.com",
"type": "A",
"ttl": 3600,
"content": "1.2.3.4",
"protected": null
},
{
"record": "domain04.com",
"type": "MX",
"ttl": 3600,
"prio": 10,
"content": "mail.google.com",
"protected": null
},
{
"record": "forwarder.domain04.com",
"type": "A",
"ttl": 3600,
"content": "178.79.178.218",
"protected": "web forward"
},
{
"record": "forwarder.domain04.com",
"type": "AAAA",
"ttl": 3600,
"content": "2a01:7e00:e000:3f7::",
"protected": "web forward"
},
]
}
}
Update DNS Zone
|
Note
|
This will overwrite all existing unprotected DNS records in your zone with the submitted records |
| Parameter | Type | Required | Description | |||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
name |
string |
yes |
Domain name to update |
|||||||||||||||||||||||
records |
array |
yes |
Array of DNS records |
|||||||||||||||||||||||
|
||||||||||||||||||||||||||
PUT /dns/update.json
{
"name": "domain.com",
"records": [
{
"record": "domain.com",
"type": "MX",
"ttl": 3600,
"prio": 5,
"content": "mail.domain.net"
},
{
"record": "domain.com",
"type": "TXT",
"ttl": 3600,
"content": "\"v=spf1 a mx -all\""
},
{
"record": "localhost.domain.com",
"type": "A",
"ttl": 300,
"content": "127.0.0.1"
},
{
"record": "localhost.domain.com",
"type": "AAAA",
"ttl": 300,
"content": "::1"
}
]
}
{
"code": 200,
"message": "Zone updated",
"command-id": "ddf1aa56-858e-11ec-b89d-024222e2dc00",
"data": [
{
"record": "domain.com",
"type": "NS",
"ttl": 3600,
"content": "ns1.lexsynergy.net",
"protected": "ns"
},
{
"record": "domain.com",
"type": "NS",
"ttl": 3600,
"content": "ns2.lexsynergy.us",
"protected": "ns"
},
{
"record": "domain.com",
"type": "NS",
"ttl": 3600,
"content": "ns3.lexsynergy.info",
"protected": "ns"
},
{
"record": "domain.com",
"type": "MX",
"ttl": 3600,
"prio": 5,
"content": "mail.domain.net",
"protected": null
},
{
"record": "domain.com",
"type": "TXT",
"ttl": 3600,
"content": "\"v=spf1 a mx -all\"",
"protected": null
},
{
"record": "localhost.domain.com",
"type": "A",
"ttl": 300,
"content": "127.0.0.1",
"protected": null
},
{
"record": "localhost.domain.com",
"type": "AAAA",
"ttl": 300,
"content": "::1",
"protected": null
},
{
"record": "domain.com",
"type": "SOA",
"ttl": 3600,
"content": "ns1.lexsynergy.net dnsmaster.lexsynergy.com 2 302400 3600 1209600 600",
"protected": "soa"
}
]
}
Create a DNS record
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The domain name to add the DNS record to |
record |
string |
yes |
The name |
type |
string |
yes |
The record type: A, AAAA, CAA, CERT, CNAME, DS, EUI48, EUI64, HINFO, HTTPS, IPSECKEY, MX, NS, OPENPGPKEY, SMIMEA, SPF, SRV, SSHFP, SVCB, TLSA, TXT, URI |
ttl |
integer |
no |
|
content |
string |
yes |
|
prio |
integer |
no |
Only required for records that support priorities |
POST /dns/create.json
{
"name": "domain04.com",
"record": "sub.domain04.com",
"type": "AAAA",
"content": "::1"
}
{
"code": 200,
"message": "Record created",
"command-id": "60e4a41d-a2d1-4611-b9d4-19a5e82f7f2f",
"data": {
"record": "sub.domain04.com",
"type": "AAAA",
"ttl": 3600,
"content": "::1",
"prio": 0
}
}
Delete DNS records
|
Note
|
This will delete any record that matches the criteria in the provided parameters. |
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The domain name to add the DNS record to |
record |
string |
no |
The name |
type |
string |
no |
The record type: A, AAAA, AFSDB, CERT, CNAME, HINFO, IPSECKEY, KX, LOC, MR, MX, NAPTR, NS, RP, SPF, SRV, SSHFP, TXT |
ttl |
integer |
no |
|
content |
string |
no |
|
prio |
integer |
no |
Only required for records that support priorities |
DELETE /dns/delete.json
{
"name": "domain04.com",
"content": "::1"
}
{
"code": 200,
"message": "Record deleted",
"command-id": "41b4ee95-ae8f-4839-931a-c321d0045bd9",
"data": {
"name": "domain04.com",
"records": [
{
"record": "sub.domain04.com",
"type": "AAAA",
"ttl": "3600",
"content": "::1"
}
]
}
}
Email Forwarding
List email forwarding for a specific domain
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain’s email forwarding you wish to retrieve |
GET /domains/forwarding/email.json
{
"name": "domain01.com"
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "cc7d0aae-4e07-11ec-b2bc-02428222e843",
"data": {
"name": "domain01.com",
"forwarders": [
{
"forwarder": "user",
"to": [
"user1@domain02.net",
"user2@domain02.net",
]
}
]
}
}
Get email forwarder info
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain for the email forwarder |
forwarder |
string |
yes |
The user part of the forwarder |
GET /domains/forwarding/email/info.json
{
"name": "domain01.com",
"forwarder": "user"
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "798dcfc6-4e08-11ec-99d8-02428222e843",
"data": {
"name": "domain01.com",
"forwarder": "user",
"to": [
"user1@domain02.net",
"user2@domain02.net",
]
}
}
Create email forwarder
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain for the email forwarder |
forwarder |
string |
yes |
The user part of the forwarder |
to |
array |
yes |
Array of email addresses to forward emails to |
POST /domains/forwarding/email/create.json
{
"name": "domain01.com",
"forwarder": "alias",
"to": [
"user3@domain02.net",
"user4@domain02.net"
]
}
{
"code": 200,
"message": "Email forward created",
"command-id": "64ddef2e-4e09-11ec-95e1-02428222e843",
"data": {
"name": "domain01.com",
"forwarder": "alias",
"to": [
"user3@domain02.net",
"user4@domain02.net"
]
}
}
Update email forwarder
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain for the email forwarder |
forwarder |
string |
yes |
The user part of the forwarder |
to |
array |
yes |
Array of email addresses to forward emails to |
PUT /domains/forwarding/email/update.json
{
"name": "domain01.com",
"forwarder": "alias",
"to": [
"user5@domain02.net",
"user6@domain02.net"
]
}
{
"code": 200,
"message": "Email forward updated",
"command-id": "64ddef2e-4e09-11ec-95e1-02428222e843",
"data": {
"name": "domain01.com",
"forwarder": "alias",
"to": [
"user5@domain02.net",
"user6@domain02.net"
]
}
}
Delete email forwarder
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain for the email forwarder |
forwarder |
string |
yes |
The user part of the forwarder |
DELETE /domains/forwarding/email/delete.json
{
"name": "domain01.com",
"forwarder": "alias"
}
{
"code": 200,
"message": "Email forward deleted",
"command-id": "64ddef2e-4e09-11ec-95e1-02428222e843",
"data": {
"name": "domain01.com",
"forwarder": "alias",
"to": [
"user5@domain02.net",
"user6@domain02.net"
]
}
}
Web Forwarding
List web forwarding for a specific domain
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain’s web forwarding you wish to retrieve |
GET /domains/forwarding/web.json
{
"name": "domain01.com"
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "e250374a-4e0a-11ec-a093-02428222e843",
"data": {
"name": "domain01.com",
"forwarders": [
{
"hostname": "domain01.com",
"type": "Permanent Redirect",
"destination": "https://www.domain02.net"
},
{
"hostname": "www.domain01.com",
"type": "Permanent Redirect",
"destination": "https://www.domain02.net"
}
]
}
}
Get web forwarder info
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain for the email forwarder |
hostname |
string |
yes |
The hostname (FQDN) of the forwarder |
GET /domains/forwarding/web/info.json
{
"name": "domain01.com",
"hostname": "www.domain01.com"
}
{
"code": 200,
"message": "Command completed successfully",
"command-id": "2b7ea6cc-4e0b-11ec-a806-02428222e843",
"data": {
"name": "domain01.com",
"hostname": "www.domain01.com",
"type": "Permanent Redirect",
"destination": "https://www.domain02.net"
}
}
Create web forwarder
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain for the email forwarder |
hostname |
string |
yes |
The hostname (FQDN) of the forwarder |
destination |
string |
yes |
URL to forward to, not required for "Holding Page" |
type |
string |
yes |
"Permanent Redirect", "Temporary Redirect", "Framed" or "Holding Page" |
POST /domains/forwarding/email/create.json
{
"name": "domain01.com",
"hostname": "alias.domain01.com",
"destination": "https://domain02.net",
"type": "Permanent Redirect"
}
{
"code": 200,
"message": "Web forward created",
"command-id": "8b16e35a-4e0c-11ec-914d-02428222e843",
"data": {
"name": "domain01.com",
"hostname": "alias.domain01.com",
"type": "Permanent Redirect",
"destination": "https://domain02.net"
}
}
Update web forwarder
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain for the email forwarder |
hostname |
string |
yes |
The hostname (FQDN) of the forwarder |
destination |
string |
yes |
URL to forward to, not required for "Holding Page" |
type |
string |
yes |
"Permanent Redirect", "Temporary Redirect", "Framed" or "Holding Page" |
PUT /domains/forwarding/email/update.json
{
"name": "domain01.com",
"hostname": "alias.domain01.com",
"destination": "https://domain03.net",
"type": "Permanent Redirect"
}
{
"code": 200,
"message": "Web forward updated",
"command-id": "b645db8a-4e0c-11ec-9a58-02428222e843",
"data": {
"name": "domain01.com",
"hostname": "alias.domain01.com",
"type": "Permanent Redirect",
"destination": "https://domain03.net",
}
}
Delete web forwarder
| Parameter | Type | Required | Description |
|---|---|---|---|
name |
string |
yes |
The name of the domain for the email forwarder |
hostname |
string |
yes |
The hostname (FQDN) of the forwarder |
DELETE /domains/forwarding/email/delete.json
{
"name": "domain01.com",
"hostname": "alias.domain01.com",
}
{
"code": 200,
"message": "Web forward deleted",
"command-id": "e038a3a4-4e0d-11ec-a527-02428222e843",
"data": {
"name": "domain01.com",
"hostname": "alias.domain01.com",
"type": "Permanent Redirect",
"destination": "https://domain03.net",
}
}
Message queue
|
Warning
|
Messages older than 21 days will automatically be removed from the message queue |
|
Note
|
The user must have full access to the account to access the message queue |
The message queue is used to notify you of out-of-band changes to domains, such as domain status changes.
Event types
domain.status.update
Raised whenever a domain changes status
{
"name": "domain.tld",
"status": {
"old": "Pending Transfer",
"new": "Registered"
}
}
Get next message
| Parameter | Type | Required | Description |
|---|
| Parameter | Type | Description |
|---|---|---|
event |
string |
The message event type |
id |
string |
The message ID, used for acknowledging the message |
time |
datetime |
The time the message was queued |
data |
object |
Message specific data |
messages |
integer |
Number of messages in the queue, including this one |
GET /messages.json
{
"code": 200,
"message": "Command completed successfully",
"command-id": "53ebdf5a-d4ac-11e5-81be-e549c727086e",
"data": {
"event": "domain.status.update",
"id": "406f74e0-d49e-11e5-b23d-a45e60c22f39",
"time": "2016-02-16T11:13:05+00:00",
"data": {
"name": "domain.tld",
"status": {
"old": "Registered",
"new": "Expired"
}
},
"messages": 1
}
}
{
"code": 200,
"message": "No messages queued.",
"command-id": "9d642354-d4ac-11e5-a3e2-ecd054e2aae1",
"data": {
"messages": 0
}
}
Acknowledge message
|
Note
|
You can only acknowledge the message at the front of the queue |
| Parameter | Type | Required | Description |
|---|---|---|---|
id |
string |
yes |
The message ID to acknowledge |
DELETE /messages.json
{
"id": "406f74e0-d49e-11e5-b23d-a45e60c22f39"
}
{
"code": 200,
"message": "Message successful acknowledged.",
"command-id": "902e7b1c-d4ac-11e5-956f-1a7e800a21dc",
"data": {
"messages": 0
}
}
Webhooks
Webhooks are useful if you want near real-time notifications of messages. Alternatively you can periodically poll the system using the API for new messages.
|
Warning
|
The HTTP connection settings have a connection timeout of 1 second and a general timeout of 2 seconds for your webhook |
|
Note
|
In the production enviorment your webhook must be an HTTPS URL, HTTP is supported in testing. |
|
Note
|
You should still poll the API for new messages even if using webhooks. Messages that are not successfully delivered and acknowledged will end up in your normal message queue |
You can configure your webhook URL and get your signing secret by logging into the Lexsynergy control panel. You must be the account owner or have the administrator privileges to access your API settings.
Requests to your webhook need be signed with the following headers using the HTTP HMAC specification below:
X-Signature-Timestamp: Unix_Timestamp
X-Signature: Base64( HMACSHA256 ( Webhook_Secret_Key, X-Signature-Timestamp + "\n" + Webhook_URL + "\n" + Request_Body + "\n" ) )
A web request with Content-Type "application/json" will be made to the provided URL with the request body in the format as below:
{
"event": "domain.status.update",
"id": "406f74e0-d49e-11e5-b23d-a45e60c22f39",
"time": "2016-02-16T11:13:05+00:00",
"data": {
"name": "domain.tld",
"status": {
"old": "Registered",
"new": "Expired"
}
}
}
Responses should be signed with the following headers using the HTTP HMAC specficiation below:
X-Signature-Timestamp: Unix_Timestamp
X-Signature: Base64( HMACSHA256 ( Webhook_Secret_Key, X-Signature-Timestamp + "\n" + Response_Body + "\n" ) )
You must respond with Content-Type "application/json" with the JSON body containing the acknowledge property set to true, and the message ID you wish to acknowledge.
{
"acknowledge": true,
"id": "406f74e0-d49e-11e5-b23d-a45e60c22f39"
}