Работа с публичным API для управления доменами

Введение

В PS Cloud Services вы можете управлять доменами с помощью публичного GraphQL API:
https://console.ps.kz/domains/graphql

API позволяет:

  • подключить автоматическую регистрацию доменов;
  • продлевать домены на нужный срок;
  • проверять доступность доменных имен в режиме реального времени.

Это решение упрощает интеграцию доменной регистрации в ваши внутренние системы или клиентские сервисы.


Регистрация домена через API

Пример запроса:

mutation {

  domains {

    domain {

      registerDomain(

        input: {

          domainName: "test_api_registration.kz"

          years: 1

          registrant: {

            type: private_person

            residence: "KZ"

            contact_phone: "+77011234569"

            contact_email: "test@test.org"

            person_firstName: "Api"

            person_lastName: "Test"

            person_firstNameLatin: "Api"

            person_lastNameLatin: "Test"

            address_street: "Makatayeva 117A"

            address_city: "Almaty"

            address_state: "Almaty"

            address_stateLatin: "Almaty"

            address_cityLatin: "Almaty"

            address_streetLatin: "Makatayeva 117A"

            address_postalCode: "123456"

            address_countryCode: "AS"

          }

          extensions: {

            srvloc: {

              srvloc_sp: "KZ"

              srvloc_city: "Almaty"

              srvloc_street: "ALA"

            }

            purpose: "for test"

          }

        }

      ) {

        domainName

        years

        creationDate

        expirationDate

        price

        registrantTemplateHandle

        adminTemplateHandle

        errors {

          code

          description

          data

        }

      }

    }

  }

} 


Входные данные / Поля запроса

  • domainName — имя домена для регистрации. Обязательное поле.
  • years — срок регистрации (1–10 лет). Обязательное поле.
  • nameservers — список неймсерверов. Если не указано, применяются настройки аккаунта или неймсерверы по умолчанию. Минимум 2.
  • privacyProtection — скрытие контактных данных в Whois. По умолчанию — true.
  • registrant — объект с полями для создания контакта владельца.
  • registrantTemplateHandle — ID шаблона контакта.
  • admin — объект с полями администратора.
  • adminTemplateHandle — ID шаблона администратора.
  • extensions — для зоны .kz обязательны: месторасположение сервера и цель.

Результат / Поля ответа

  • domainName — имя зарегистрированного домена.
  • years, creationDate, expirationDate, price
  • registrantTemplateHandle, adminTemplateHandle
  • errors — объект с полями: code, description, data

Возможные ошибки при регистрации

  • DOMAIN_ALREADY_EXISTS
  • WRONG_DOMAIN_NAME
  • YEARS_LIMIT_VIOLATED
  • MIN_NAMESERVERS, MAX_NAMESERVERS, NAMESERVER_NOT_EXIST, NAMESERVERS_IS_REQUIRED
  • REGISTRANT_IS_REQUIRED, REQUIRED_EXTENSION_IS_MISSING
  • TLD_NOT_AVAILABLE
  • REGISTRANT_FIELDS_ARE_MISSING, ADMIN_FIELDS_ARE_MISSING
  • REGISTRANT_TEMPLATE_NOT_FOUND, ADMIN_TEMPLATE_NOT_FOUND
  • WRONG_PARAMETERS
  • INSUFFICIENT_ACCOUNT_BALANCE
  • UNEXPECTED_ERROR

Примеры ошибок регистрации с данными

Не указано месторасположение сервера для .kz:

"data": {

    "domains": {

      "domain": {

        "registerDomain": {

          "domainName": "zxcv-001.kz",

          "errors": {

            "description": "Server location should be provided for this domain",

            "code": "REQUIRED_EXTENSION_IS_MISSING"

          }

        }

      }

    }

  } 

Не указана цель для .kz:

"data": {

   "domains": {

      "domain": {

        "registerDomain": {

          "domainName": "zxcv-001.kz",

          "errors": {

            "description": "Purpose should be provided for this domain",

            "code": "REQUIRED_EXTENSION_IS_MISSING"

          }

        }

      }

    }

Домен уже зарегистрирован:

"data": {

    "domains": {

      "domain": {

        "registerDomain": {

          "domainName": "zxcv-001.kz",

          "errors": 

            "description": "DOMAIN_EXISTS",

            "code": "DOMAIN_ALREADY_EXISTS"

          }

        }

      }

    } 

Премиальный домен:

"data": {

    "domains": {

      "domain": {

        "registerDomain": {

          "domainName": "007.academy",

          "errors": {

            "description": "DOMAIN_IS_PREMIUM",

            "code": "DOMAIN_ALREADY_EXISTS"

          }

        }

      }

    }

Некорректные поля в шаблоне:

"domains": {

      "domain": {

        "registerDomain": {

          "domainName": "zxcv-10.kz",

          "errors": {

            "data": [

              {

                "field": "contact_email",

                "message": [

                  "isEmail",

                  "isNotEmpty"

                ]

              },

              {

                "field": "contact_phone",

                "message": [

                  "isNotEmpty"

                ]

              },

              {

                "field": "address_state",

                "message": [

                  "isNotEmpty"

                ]

              }

            ],

            "description": "Validation errors for registrant template",

            "code": "REGISTRANT_FIELDS_ARE_MISSING"

          }

        }

      }

    }

Не существует неймсерверов:

"domains": {

      "domain": {

        "registerDomain": {

          "domainName": "zxcv-10.kz",

          "errors": {

            "data": [

              {

                "nameserver": "ns3.xxuuu.kx",

                "isValid": false

              },

              {

                "nameserver": "ns2.xxuuu.com",

                "isValid": false

              }

            ],

            "description": "Nameserver validation failed",

            "code": "NAMESERVER_NOT_EXIST"

          }

        }

      }

    }


Описание полей для создания контакта

Тип контакта:

  • type, residence

Для физического лица:

  • person_firstName, person_lastName, person_patronymic (опц.)
  • person_firstNameLatin, person_lastNameLatin, person_patronymicLatin (опц.)
  • person_birthDate — для зоны ru
  • taxId — для зоны uz

Паспортные данные (ru, uz):

  • passport_code, passport_number
  • passport_who, passport_whoLatin
  • passport_issueDate, passport_expirationDate

Для юридического лица:

  • legalEntity_name, legalEntity_role
  • legalEntity_nameLatin, legalEntity_roleLatin

Банковские реквизиты (uz):

  • uz_bankName, uz_bankNameLatin
  • uz_bankAccount, uz_regionCode

Контактные данные:

  • contact_email, contact_phone, contact_fax (опц.)

Адрес и на латинице:

  • address_street, address_city, address_state
  • address_streetLatin, address_cityLatin, address_stateLatin
  • address_postalCode, address_countryCode

Автоматическое продление домена

mutation {

  domains {

    domain {

      renewDomain(

        input: {

          domainName: "zxcv-001.kz"

          currentExpirationDate: "2025-05-01"

          years: 2

        }

      ) {

        domainName

        invoiceNum

        price

        expirationDate

        errors {

          data

          description

          code

        }

      }

    }

  }

}

Входные поля:

  • domainName, years, currentExpiryDate

Ответ:

  • domainName, invoiceNum, price, expirationDate, errors

Ошибки:

  • DOMAIN_NOT_FOUND
  • WRONG_EXPIRATION_DATE
  • INSUFFICIENT_ACCOUNT_BALANCE
  • UNEXPECTED_ERROR

Проверка доступности доменов

query {

  domains {

    domain {

      checkDomains(

        input: {

          domains: [

            "zxcv-10.kz",

            "zxczxc.com",

            "kjasdas.net",

            "hello.ru",

            "bye.com.kz"

          ]

        }

      ) {

        domain

        tld

        available

        reason

      }

    }

  }

}

Поля запроса:

  • domains — массив доменов

Поля ответа:

  • domain, tld, available, reason

Возможные причины недоступности домена

  • WRONG_DOMAIN_NAME
  • TLD_NOT_AVAILABLE
  • DOMAIN_EXISTS
  • DOMAIN_IS_PREMIUM
  • REGISTRY_CHECK_ERROR

Пример ответа:

"data": {

  "domains": {

    "domain": {

      "checkDomains": [

        {

          "domain": "hello.ru",

          "idn": "hello.ru",

          "tld": "",

          "available": false,

          "reason": "TLD_NOT_AVAILABLE"

        },

        {

          "domain": "zxcv-10.kz",

          "idn": "zxcv-10.kz",

          "tld": "kz",

          "available": true,

          "reason": null

        },

        {

          "domain": "zxczxc.com",

          "idn": "zxczxc.com",

          "tld": "com",

          "available": false,

          "reason": "DOMAIN_EXISTS"

        },

        {

          "domain": "kjasdas.net",

          "idn": "kjasdas.net",

          "tld": "net",

          "available": true,

          "reason": null

        },

        {

          "domain": "bye.com.kz",

          "idn": "bye.com.kz",

          "tld": "com.kz",

          "available": true,

          "reason": null

        },

        {

          "domain": "007.academy",

          "idn": "007.academy",

          "tld": "academy",

          "available": false,

          "reason": "DOMAIN_IS_PREMIUM"

        }

      ]

    }

  }

}


Итог

Инструкция по работе с публичным API по доменам позволяет:

  • автоматизировать регистрацию доменов;
  • продлевать домены;
  • проверять доступность доменных имен.

При этом следует учитывать требования к полям и возможные ошибки в ответах API.

question
Не нашли подходящего ответа?
Напишите запрос в службу поддержки
Написать сейчас