API Guides: Customer & Domain Modules "This domain can only be renewed within 28 days from its expiration." error received via API When a renewal command is sent to a domain using API, sometimes a "This domain can only be renewed within 28 days from its expiration. Please, set auto-renewal or try again within that timeframe" is received. This is because there are TLDs which does not support a renewal command, that's why we are not renewing the domain, but extending the expiration date. TLDs that cannot be renewed are: be  org.al  org.gi  net.om  ml  it  aq  gm  org.om  az  at  as  com.gp  at.pr com.az  co.at bb  gp  biz.pr  net.az  or.at com.bb  net.gp  ch.pr org.az  hk  net.bb  hm  com.pr  com.bs  com.hk org.bb  com.hr de.pr net.bs  net.hk bi  or.id eu.pr org.bs  org.hk bm  web.id fr.pr com.by  idv.hk com.bm  co.ir info.pr net.by  sr  net.bm  is  isla.pr ac.cn vg  org.bm  co.je it.pr biz.cy  tc  bs  je  name.pr cy  ms  bt  net.je  net.pr  net.cy  jp  com.bt  org.je  nl.pr org.cy  ro  net.bt  jobs  org.pr  com.hn  hu  by  com.kg  pr  edu.hn  co.hu cd  kg  pro.pr  net.hn  ir  cg  net.kg  uk.pr org.hn  aero  co.cr org.kg  co.rs biz.mm  ba  cr  kz  rs  com.mm  bg  com.cu  net.lb  rw  org.mm  com.ar cu  org.lb  net.sa ac.mu com.bo com.cy  co.ls org.sa co.mu com.pa  dj  org.ls  pub.sa com.mu  com.tr com.dm  mc  com.sb  net.mu  com.uy  dm  mp  net.sb  or.mu com.ve  net.dm  com.mt  org.sb  org.mu  gen.tr org.dm  net.mt  sl  nom.pe  ly  com.do  org.mt  st  co.pn co.id do  mw  com.sv  net.pn  co.th net.do  my  in.th org.pn  com.sa org.do  net.my to  pn  ee  com.ec  org.my bbs.tr com.ru hr  info.ec co.na biz.tr net.ru ua  biz.fj  com.na  info.tr org.ru co.jp com.fj  na  name.tr pp.ru com.lb  info.fj org.na  tel.tr com.tj  com.my name.fj net.ng  web.tr tj  com.py  net.fj  org.ng  co.tt tv.tr bo  org.fj  com.ni  com.tt net.tw ec  pro.fj  net.ni  net.tt donetsk.ua com.ng  nom.fr nom.ni  org.tt in.ua ai  prd.fr org.ni  tt  kiev.ua com.ai  presse.fr co.om com.ua net.ua net.ai  co.gg com.om  co.ug org.ua off.ai  gg  ch  ug  co.uz org.ai  net.gg  li  co.ve com.uz  al  org.gg  lu  co.vi uz  com.al  com.gi  de  vu  com.vi  net.al  gi  co.zw uy  xn--80ao21a xn--j1amh ltd.gi  org.zw  ng  xn--90ais xn--node  xn--ygbi2ammx For these domains, the renewal command will be accepted only during the last 28 days before expiration date. API requests that are submitted before the last 28 days will result in the "This domain can only be renewed within 28 days from its expiration. Please, set auto-renewal or try again within that timeframe" error. Once the renewal is received, the expiration date will be extended. As usual, we recommend turning auto-renew to "on" for these TLDs, so you can forget to send a renewal command, as the domain will automatically be renewed at expiration time. 1 TLD API: Search an extension This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods. To get more information about our API in general, please use ourdocumentation portalas your reference. Before registering a domain name you need to get familiar with TLD parameters and find one that suits your requirements. The current method returns a list of extensions (TLDs) matching your search criteria. To retrieve a single or several specific extensions - use the following endpoint: GET {base_url}/tlds/{name} Use endpoint path below. Base URL is determined by both the target environment and API version. GET {base_url}/tlds REQUEST VALUES  Name  Type  Values  Description limit  numeric Default: 0, Max: 1000 The maximum number of records to be returned. offset  numeric   Default: 0 Indicates the starting position of the response list. Indexing starts at 0, meaning that in order to start with the 10th domain, this value should be 9. order string Output sorting method (ASC or DESC) order_by string  Indicates an attribute that used for ordering output records. extensions array of strings Refer to the list of TLDs. Extensions you are interested in. name_pattern string Extension name pattern. only_names boolean  true or false Returns extension names only in the response with_description boolean  true or false Return extensions with descriptions. with_restrictions boolean  true or false Returns extensions with restrictions. with_usage_count boolean  true or false Returns number of domains in your portfolio using specified extension. with_application_mode boolean  true or false Returns list of supported pre-registration modes. with_price boolean  true or false Returns prices if enabled. with_level_prices boolean true or false Returns extension prices for each Openprovider discount tier. is_active boolean true or false Indicates if the extension is active. is_new_gtld boolean true or false Indicates if the extension is a new GLTDs. status string Eg: ACT for active Extension status. REQUEST EXAMPLE curl -X GET \ 'https://api.openprovider.eu/v1beta/tlds?status=ACT&extensions=com' \ -H 'Authorization: Bearer 1c26def9e68dd9a********5abe264fc' \ RESPONSE EXAMPLE { "code": 0, "desc": "", "data": { "results": [ { "name": "com", "min_period": 1, "max_period": 10, "transfer_available": true, "trade_available": false, "renew_available": true, "is_transfer_auth_code_required": true, "is_trade_auth_code_required": false, "is_auth_code_requested": false, "is_auth_code_available": true, "is_auth_code_changeable": true, "is_private_whois_allowed": true, "domicile_available": false, "soft_quarantine_period": 40, "quarantine_period": 0, "dnssec_allowed": true, "status": "ACT", "billing_handle_enabled": true, "reseller_handle_enabled": false, "supported_idn_scripts": [ { "value": "AFR", "description": "Afrikaans" }, { "value": "ALB", "description": "Albanian" }, { "value": "ARA", "description": "Arabic" }, { "value": "ARG", "description": "Aragonese" }, { "value": "ARM", "description": "Armenian" }, { "value": "ASM", "description": "Assamese" }, { "value": "AST", "description": "Asturian" }, { "value": "AVE", "description": "Avestan" }, { "value": "AWA", "description": "Awadhi" }, { "value": "AZE", "description": "Azerbaijani" }, { "value": "BAN", "description": "Balinese" }, { "value": "BAL", "description": "Baluchi" }, { "value": "BAS", "description": "Basa" }, { "value": "BAK", "description": "Bashkir" }, { "value": "BAQ", "description": "Basque" }, { "value": "BEL", "description": "Belarusian" }, { "value": "BEN", "description": "Bengali" }, { "value": "BHO", "description": "Bhojpuri" }, { "value": "BOS", "description": "Bosnian" }, { "value": "BUL", "description": "Bulgarian" }, { "value": "BUR", "description": "Burmese" }, { "value": "CAR", "description": "Carib" }, { "value": "CAT", "description": "Catalan" }, { "value": "CHE", "description": "Chechen" }, { "value": "CHI", "description": "Chinese" }, { "value": "CHV", "description": "Chuvash" }, { "value": "COP", "description": "Coptic" }, { "value": "COS", "description": "Corsican" }, { "value": "SCR", "description": "Croatian" }, { "value": "CZE", "description": "Czech" }, { "value": "DAN", "description": "Danish" }, { "value": "DIV", "description": "Divehi" }, { "value": "DOI", "description": "Dogri" }, { "value": "DUT", "description": "Dutch" }, { "value": "ENG", "description": "English" }, { "value": "EST", "description": "Estonian" }, { "value": "FAO", "description": "Faroese" }, { "value": "FIJ", "description": "Fijian" }, { "value": "FIN", "description": "Finnish" }, { "value": "FRE", "description": "French" }, { "value": "FRY", "description": "Frisian" }, { "value": "GLA", "description": "Gaelic" }, { "value": "GEO", "description": "Georgian" }, { "value": "GER", "description": "German" }, { "value": "GON", "description": "Gondi" }, { "value": "GRE", "description": "Greek" }, { "value": "GUJ", "description": "Gujarati" }, { "value": "HEB", "description": "Hebrew" }, { "value": "HIN", "description": "Hindi" }, { "value": "HUN", "description": "Hungarian" }, { "value": "ICE", "description": "Icelandic" }, { "value": "INC", "description": "Indic" }, { "value": "IND", "description": "Indonesian" }, { "value": "INH", "description": "Ingush" }, { "value": "GLE", "description": "Irish" }, { "value": "ITA", "description": "Italian" }, { "value": "JPN", "description": "Japanese" }, { "value": "JAV", "description": "Javanese" }, { "value": "KAS", "description": "Kashmiri" }, { "value": "KAZ", "description": "Kazakh" }, { "value": "KHM", "description": "Khmer" }, { "value": "KIR", "description": "Kirghiz" }, { "value": "KOR", "description": "Korean" }, { "value": "KUR", "description": "Kurdish" }, { "value": "LAO", "description": "Lao" }, { "value": "LAV", "description": "Latvian" }, { "value": "LIT", "description": "Lithuanian" }, { "value": "LTZ", "description": "Luxembourgisch" }, { "value": "MAC", "description": "Macedonian" }, { "value": "MAL", "description": "Malayalam" }, { "value": "MAY", "description": "Malay" }, { "value": "MLT", "description": "Maltese" }, { "value": "MAO", "description": "Maori" }, { "value": "MOL", "description": "Moldavian" }, { "value": "MON", "description": "Mongolian" }, { "value": "NEP", "description": "Nepali" }, { "value": "NOR", "description": "Norwegian" }, { "value": "ORI", "description": "Oriya" }, { "value": "OSS", "description": "Ossetian" }, { "value": "PAN", "description": "Panjabi" }, { "value": "PER", "description": "Persian" }, { "value": "POL", "description": "Polish" }, { "value": "POR", "description": "Portugese" }, { "value": "PUS", "description": "Pushto" }, { "value": "RAJ", "description": "Rajasthani" }, { "value": "RUM", "description": "Romanian" }, { "value": "RUS", "description": "Russian" }, { "value": "SMO", "description": "Samoan" }, { "value": "SAN", "description": "Sanskrit" }, { "value": "SRD", "description": "Sardinian" }, { "value": "SCC", "description": "Serbian" }, { "value": "SND", "description": "Sindhi" }, { "value": "SIN", "description": "Sinhalese" }, { "value": "SLO", "description": "Slovak" }, { "value": "SLV", "description": "Slovenian" }, { "value": "SOM", "description": "Somali" }, { "value": "SPA", "description": "Spanish" }, { "value": "SWA", "description": "Swahili" }, { "value": "SWE", "description": "Swedish" }, { "value": "SYR", "description": "Syriac" }, { "value": "TGK", "description": "Tajik" }, { "value": "TAM", "description": "Tamil" }, { "value": "TEL", "description": "Telugu" }, { "value": "THA", "description": "Thai" }, { "value": "TIB", "description": "Tibetan" }, { "value": "TUR", "description": "Turkish" }, { "value": "UKR", "description": "Ukrainian" }, { "value": "URD", "description": "Urdu" }, { "value": "UZB", "description": "Uzbek" }, { "value": "VIE", "description": "Vietnamese" }, { "value": "WEL", "description": "Welsh" }, { "value": "YID", "description": "Yiddish" } ], "owner_handle_supported": true, "admin_handle_supported": true, "tech_handle_supported": true, "billing_handle_supported": true, "reseller_handle_supported": false, "dnssec_keys_allowed": true, "dnssec_digests_allowed": true, "dnssec_max_records_amount": 0, "dnssec_algorithms": [ 8, 10, 12, 13, 14, 15, 16 ] } ], "total": 1 } } RESPONSE VALUES Name Values Description code result code number API Result with code returned. 0 = Success with no errors. 1. data set of values Returns an array of elements related to an extension 1.1 results An array of elements. admin_handle_supported boolean Indicates if the administrator handle exists for an extension. billing_handle_enabled boolean  Indicates if the billing handle exists for an extension. billing_handle_supported  boolean  Indicates if the billing handle is supported for an extension. 1.1.1 description Set of values (text strings). Returns the description. 1.1.1.1 text string Returns text description. 1.1.1.2 url string Link to registry providing extension. dnssec_algorithms integer Returns one or multiple records of methods available to be used with an extension. dnssec_allowed boolean Indicates if DNSSEC can be enabled for an extension. dnssec_digests_allowed boolean  Indicates if DNSSEC support digest type. dnssec_keys_allowed boolean Indicates if DNSSEC keys can be used for an extension. dnssec_max_records_amount integer  The maximum amount of DNSSEC records allowed. domicile_available boolean Indicates if extension support domicile option. is_auth_code_available boolean If the authorization code is available immediately on demand. is_auth_code_changeable boolean Indicates if the authorization code could be changed per administrator request. is_private_whois_allowed boolean Indicated whenever WPP feature is available for an extension. is_trade_auth_code_required boolean Indicates if the customer requires an authorization code to complete trade procedure. is_transfer_auth_code_required boolean Indicates if the transfer is done via authorization code. 1.1.2 level_prices An array. Returns an array of lever (Tier) price. level Min:1, Max: 8 Indicates reseller Level (Tier). 1.1.2.1 price Set of values. Returns a set of values. 1.1.2.1.1 product  1.1.1.2.1.1 currency string Indicates the domain price currency if presented.   1.1.1.2.1.2 price number (double) Indicates the domain price if presented. 1.1.2.1.2 reseller Set of values. Set of values returned. 1.1.2.1.2.1 currency string Indicates the domain price currency if presented.  1.1.2.1.2.2 price number (double) Indicates the domain price if presented. max_period integer Indicates max. period of registration (in years). min_period integer Indicates min. period of registration (in years). name string Extension name. owner_handle_supported boolean Indicates if extension support owner handle. 1.1.3 prices Set of values. Set of values returned.  1.1.3.1 create_price 1.1.3.1.1 product 1.1.3.1.1.1 currency string Indicates the domain price currency if presented.  1.1.3.1.1.2 price number (double) Indicates the domain price if presented. 1.1.3.1.2 reseller Set of values: reseller price for an extension. Set of values returned. 1.1.3.1.2.1 currency string  Indicates the domain price currency if presented.  1.1.3.1.2.2 price number (double) Indicates the domain price if presented. 1.1.3.2 domicile_price Set of values: domicile price for the product itself and for reseller.  Set of values returned. 1.1.3.2.1 product Set of values. Set of values returned. 1.1.3.2.1.1 currency string Indicates the domain price currency if presented.  1.1.3.2.1.2 price number (double) Indicates the domain price if presented. 1.1.3.2.2 reseller Set of values. Set of values returned. 1.1.3.2.2.1 currency string Indicates the domain price currency if presented.  1.1.3.2.2.2 price number (double) Indicates the domain price if presented.  max_period integer Indicates max. period of registration (in years).  min_period integer Indicates min. period of registration (in years). 1.1.3.3 renew_price Set of values: renewal price for the product itself and for reseller. Set of values returned.  1.1.3.3.1 product Set of values. 1.1.3.3.1.1 currency string  Indicates the domain price currency if presented.  1.1.3.3.1.2 price number (double) Indicates the domain price if presented. 1.1.3.3.2 reseller Set of values. Set of values returned. 1.1.3.3.2.1 currency string Indicates the domain price currency if presented. 1.1.3.3.2.2 price number (double) Indicates the domain price if presented. 1.1.3.4 reseller_price Set of values: reseller price for the product itself and for reseller. An array of price parameters applicable to the current reseller. 1.1.3.4.1 product Set of price values. Set of values returned. 1.1.3.4.1.1 currency string Indicates the domain price currency if presented.   1.1.3.4.1.2 price number (double) Indicates the domain price if presented. 1.1.3.4.2 reseller Set of values. Set of values returned. 1.1.3.4.2.1 currency string Indicates the domain price currency if presented. 1.13.4.2.2 price number (double)  Indicates the domain price if presented. 1.1.3.5 restore_price Set of values: restore price for the product itself and for reseller. Set of values returned. 1.1.3.5.1 product Set of values Set of values returned. 1.1.3.5.1.1 currency string Indicates the domain price currency if presented. 1.1.3.5.1.2 price  number (double) Indicates the domain price if presented. 1.1.3.5.2 reseller Set of values 1.1.3.5.2.1 currency string  Indicates the domain price currency if presented.  1.1.3.5.2.2 price  number (double) Indicates the domain price if presented. 1.1.3.6 setup_price Set of values: setup price for the product itself and for reseller. Set of values returned. 1.1.3.6.1 product Set of values. Set of values returned. 1.1.3.6.1.1 currency string Indicates the domain price currency if presented.  1.1.3.6.1.2 price number (double) Indicates the domain price if presented. 1.1.3.6.2 reseller Set of values. Set of values returned 1.1.3.6.2.1 currency string Indicates the domain price currency if presented.  1.1.3.6.2.2 price number (double) Indicates the domain price if presented.  1.1.3.7 soft_restore_price Set of values: soft restore price for the product itself and for reseller. Set of values returned. 1.1.3.7.1 product Set of values. Set of values returned. 1.1.3.7.1.1 currency string Indicates the domain price currency if presented.  1.1.3.7.1.2 price number (double)  Indicates the domain price if presented. 1.1.3.7.2 reseller Set of values. Set of values returned. 1.1.3.7.2.1 currency string Indicates the domain price currency if presented.  1.1.3.7.2.2 price number (double) Indicates the domain price if presented. 1.1.3.8 trade_price Set of values: trade price for the product itself and for reseller. Set of values returned. 1.1.3.8.1 product Set of values. Set of values returned. 1.1.3.8.1.1 currency string Indicates the domain price currency if presented. 1.1.3.8.1.2 price number (double)  Indicates the domain price if presented. 1.1.3.8.2 reseller Set of values. Set of values returned. 1.1.3.8.2.1 currency string Indicates the domain price currency if presented. 1.1.3.8.2.2 price number (double)  Indicates the domain price if presented. 1.1.3.9 transfer_price Set of values: transfer price for the product itself and for reseller. Set of values returned. 1.1.3.9.1 product Set of values. Set of values returned. 1.1.3.9.1.1 currency  string Indicates the domain price currency if presented. 1.1.3.9.1.2 price number (double)  Indicates the domain price if presented. 1.1.3.9.2 reseller Set of values. Set of values returned. 1.1.3.9.2.1 currency string Indicates the domain price currency if presented. 1.1.3.9.2.2 price number (double)   Indicates the domain price if presented. 1.1.3.10 update_price Set of values: update price for the product itself and for reseller. Set of values returned. 1.1.3.10.1 product Set of values. Set of values returned. 1.1.3.10.1.1 currency string Indicates the domain price currency if presented.  1.1.3.10.1.2 price number (double)  Indicates the domain price if presented. 1.1.3.10.2 reseller Set of values. Set of values returned. 1.1.3.10.2.1 currency string Indicates the domain price currency if presented.  1.1.3.10.2.2 price number (double)  Indicates the domain price if presented. quarantine_period  integer Indicates quarantine period application for an extension. reseller_handle_enabled boolean Indicates if domain reseller handle enabled for an extension. reseller_handle_supported boolean Indicates if domain reseller handle supported enabled for an extension. restrictions An array of string(s). Returns an extension restrictions. status string. Returns extension status. 1.2 supported_application_mode An array of strings. An array of strings returned. 1.2.1 name string Returns supported name application mode. 1.2.2 title string Returns supported the title of application mode. 1.3 supported_idn_scripts An array of strings. Returns parameters related to IDN. 1.3.1 description string Returns supported IDN description. 1.3.2 value string Returns values of IDN scripts. tech_handle_supported boolean Indicates if technical handle supported fr an extension. trade_available boolean Indicates if trade operation allowed for an extension. transfer_available boolean Indicates if transfer operation allowed for an extension. usage_count integer Returns a quantity of domain with requested extension from the current resellers account. desc string The description. maintenance boolean Indicates if Openprovider is under maintenance mode. 1.4 warnings An array of strings. An array of boolean and string data returned if maintenance is in progress. 1.4.1 code integer Code value (digits). 1.4.2 data string Data value returned. 1.4.3 desc string The description value returned. REQUEST EXAMPLE FOR MORE THAN ONE TLDs curl -X GET 'https://api.openprovider.eu/v1beta/tlds?status=ACT&extensions=com&extensions=store' -H 'Authorization: Bearer *******************' The above query will fetch details for both "com" and "store" extensions. Once we've retrieved an extension(s) with its parameters and requirements then we can check an exact domain we want to register. Please move to "2 Domains API: Check Domain". 10 Domains API: Check gTLD email verification status This is a series of articles in which we are going to cover registrant contact verification. This is a first article in a series in which we are going to search for email addresses and their respective statuses with regard to the aforementioned validation procedure. To get more information about our API in general, please use our documentation portal as your reference. Due to ICANN requirements, Openprovider is obliged to verify the validity of each email address that is used in the owner contact details of any gTLD registration. gTLDs include all extensions that are not country codes (ccTLDs): common generics like .com, .net and .travel, and all new gTLDs like .guru, .berlin and .app. Usually, this process is handled automatically depending on the actions that are being applied to a domain. More on this could be found in our Knowledge Base. However, if for some reason the process should be re-initiated, we have corresponding API methods for the very same purpose. Searching for email's status First, let's focus on retrieving the status of a validation request. In order to do so we are going to utilise List domain email verifications method. NB If there are multiple domains linked to one e-mail address, multiple rows are returned. All input parameters in this method are optional. Omitting all at once will result into a full list of email objects with their respective statuses. Use endpoint path below. Base URL is determined by both the target environment and API version. GET {base_url}/customers/verifications/emails/domains REQUEST VALUES Name Type Description domain string Optional. handle string Optional. email string Optional. status custom Optional. Allowed values: failed / in progress / not verified / verified description custom Reason of failure. Allowed values: expired / bounced is_suspended boolean Optional. limit integer default value: 100, maximum value: 1000 offset integer default value: 0 REQUEST EXAMPLE curl -X GET \ 'https://api.openprovider.eu/v1beta/customers/verifications/emails/domains?domain=test.com' \ -H 'Authorization: Bearer 2831a37fb8*******90b5aac822' \ -H 'Content-Type: application/json' \ RESPONSE EXAMPLE { "code": 0, "desc": "", "data": { "results": [ { "domain": "test.com", "email": "john@example.com", "handle": "AB123456-NL", "status": "failed", "description": "expired", "is_suspended": true, "expiration_date": "0000-00-00 00:00:00" } ], "total": 1 } } RESPONSE VALUES Name Type Description handle string email string status custom Allowed values: failed / in progress / not verified / verified description custom Reason of failure. Allowed values: expired / bounced domain string is_suspended boolean expiration_date integer populated if the verification is still "in progress"; indicating the date & time at which the e-mail address will be marked as "failed" and related domains will be suspended In the following article we are going to see how one can restart the verification procedure if need be. 11 Domain API: Start gTLD email verification This is a series of articles in which we are going to cover registrant contact verification. This is a second article in a series in which we are going to start email verification procedure for a gTLD domain owner. Navigate here to go back to a previous article. To get more information about our API in general, please use our documentation portal as your reference. Due to ICANN requirements, Openprovider is obliged to verify the validity of each email address that is used in the owner contact details of any gTLD registration. gTLDs include all extensions that are not country codes (ccTLDs): common generics like .com, .net and .travel, and all new gTLDs like .guru, .berlin and .app. Usually, this process is handled automatically depending on the actions that are being applied to a domain. More on this could be found in our Knowledge Base. However, if for some reason the process should be re-initiated, we have corresponding API methods for the very same purpose. Restarting validation One should use Start Email Verification method in order to startvalidation of an owner's email address. Use endpoint path below. Base URL is determined by both the target environment and API version. GET {base_url}/customers/verifications/emails/start REQUEST VALUES Name Type Description email string Required. REQUEST EXAMPLE curl -X POST \ https://api.openprovider.eu/v1beta/customers/verifications/emails/start \ -H 'Authorization: ' \ -H 'Content-Type: application/json' \ -d '{ "email": "email@domain.com", "handle": "XX123456-XX", "language": "en" }' RESPONSE EXAMPLE { "code": 20001, "data": { "id": 15466 }, "desc": "Verification email in progress" } RESPONSE VALUES Name Type Description id integer Now that the verification email has been sent to a domain owner, he or she needs to follow its instructions in order to prevent domain suspension. If, for any reason, you have to reinitiate this procedure, please consider utilising Restart Email Verification method. 12 Domains API: Restart gTLD email verification This is a series of articles in which we are going to cover registrant contact verification. This is a third article in a series in which we are going to restart email verification procedure for a gTLD domain owner. Navigate here to go back to the first article. To get more information about our API in general, please use our documentation portal as your reference. Due to ICANN requirements, Openprovider is obliged to verify the validity of each email address that is used in the owner contact details of any gTLD registration. gTLDs include all extensions that are not country codes (ccTLDs): common generics like .com, .net and .travel, and all new gTLDs like .guru, .berlin and .app. Usually, this process is handled automatically depending on the actions that are being applied to a domain. More on this could be found in our Knowledge Base. However, if for some reason the process should be re-initiated, we have corresponding API methods for the very same purpose. Restarting validation One should use Restart Email Verification method in order to restartvalidation of an owner's email address. NB Executing this command during an already running email validation process will cause resending of the last verification email to a customer Use endpoint path below. Base URL is determined by both the target environment and API version. GET {base_url}/customers/verifications/emails/start REQUEST VALUES Name Type Description email string Required. REQUEST EXAMPLE curl -X POST \ https://api.openprovider.eu/v1beta/customers/verifications/emails/restart \ -H 'Authorization: ' \ -H 'Content-Type: application/json' \ -d '{ "email": "email@domain.com", "handle": "XX123456-XX", "language": "en" }' RESPONSE EXAMPLE { "code": 0, "data": { "success": true }, "desc": "" } RESPONSE VALUES If the operation went successfully, one will receive a corresponding code (0). 13 Domains API: How to create a domain This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods. This is a first article in a series in which we are going to cover basic domain management operations. To get more information about our API in general, please use our documentation portal as your reference. You must have an active Openprovider account for this command to complete successfully. Please keep in mind that you will be automatically charged the registration fee upon successful registration. Use endpoint path below. Base URL is determined by both the target environment and API version. POST {base_url}/domains/ REQUEST VALUES Name Type Description name string Required. period integer Required. auth_code varchar Optional. owner_handle varchar Required. admin_handle varchar Required. tech_handle varchar Required. billing_handle varchar Optional. reseller_handle varchar Optional. ns_group string Required only if name_servers field is empty ns_template_name string Optional. Name of the template to use to automatically create DNS zone for the domain; only applicable if nsGroup is dns-openprovider name_servers Array of objects (Array containing name server information) Required only if nsGroup field is empty autorenew custom on | off | default is_dnssec_enabled boolean 0 (default) or 1 - Only accepted when nameservers of Openprovider are used dnssec_keys varchar when using your own nameservers use_domicile boolean 0 or 1 accept_premium_fee int or double Required in case when domain is premium, value is the price returned in the response for createDomainRequest without acceptPremiumFee is_private_whois_enabled boolean default value is 0 promo_code string comments string additional_data custom mandatory for some TLDs application_mode custom required for new gTLDs NB The owner, admin and tech handles can be retrieved via the customers endpoint and will be the registered contacts for this domain. REQUEST EXAMPLE curl -X POST \ 'http://api.openprovider.eu/v1beta/domains' \ -H 'Accept: */*' \ -H 'Authorization: ,Bearer 2f4c1c3a9******15d22b378a64' \ -H 'Connection: keep-alive' \ -H 'Content-Type: application/json' \ -d '{  "owner_handle": "XX000001-XX", "admin_handle": "XX000001-XX", "tech_handle": "XX000001-XX", "billing_handle": "XX000001-XX", "domain": { "extension": "com", "name": "example" }, "period": 1, "ns_group": "dns-openprovider" } RESPONSE EXAMPLE { "code": 0, "data": { "activation_date": "2019-04-29 17:15:19", "auth_code": "C8$#wgG#25tQ", "expiration_date": "2020-04-29 17:15:19", "id": 10592139, "renewal_date": "2020-04-29 17:15:19", "status": "ACT" }, "desc": "" } RESPONSE VALUES Name Type Description status ACT - active or REQ - requested auth_code only in case if TLD supports it activation_date available only in case of a succeeded realtime domain registration 14 Domains API: How to transfer a domain This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods. This is a first article in a series in which we are going to cover incoming domain transfer. To get more information about our API in general, please use our documentation portal as your reference. Domain transfer is a procedure of changing the current registrar of a domain name. Once a transfer has been made, Openprovider will maintain all relevant information regarding the domain and its owner. Before starting a transfer, please make sure you have the approval of the owner of the domain name and that the current registrar is aware of your desire to transfer that object. Use endpoint path below. Base URL is determined by both the target environment and API version. POST {base_url}/domains/transfer REQUEST VALUES Name Type Description name string Required. period integer Required. auth_code varchar Optional. owner_handle varchar Required. admin_handle varchar Required. tech_handle varchar Required. billing_handle varchar Optional. reseller_handle varchar Optional. ns_group string Required. ns_template_name string Optional. Name of the template to use to automatically create DNS zone for the domain; only applicable if nsGroup is dns-openprovider name_servers dot separated integer Required if only if nsGroup field is empty autorenew custom on | off | default is_dnssec_enabled boolean false (default) or true - Only accepted when nameservers of Openprovider are used dnssec_keys varchar when using your own nameservers use_domicile boolean false (default) or true accept_premium_fee int or double Required in case when domain is premium, value is the price returned in the response for createDomainRequest without acceptPremiumFee is_private_whois_enabled boolean false (default) or true promo_code string comments string Optional. Domain comments/notes additional_data custom mandatory for some TLDs application_mode custom required for new gTLDs import_contacts_from_registry boolean Optional. Default value: false. Available for .nl and .ie transfers to import domain contacts from registry. import_nameservers_from_registry boolean Optional. Default value: false. Available for .nl and .ie transfers to import nameservers from registry. REQUEST EXAMPLE curl -X POST \ https://api.openprovider.eu/v1beta/domains/transfer \ -H 'Authorization: ,Bearer 2f4c1c3a9******15d22b378a64' \ -H 'Content-Type: application/json' \ -d '{ "admin_handle": "XX123456-XX", "auth_code": "gX38tslFG2#%F%%1", "autorenew": "default", "domain": { "extension": "com", "name": "domain", }, "ns_group": "dns-openprovider", "owner_handle": "RB919364-BE", "period": 1, "promo_code": "", "tech_handle": "XX123456-XX", } RESPONSE EXAMPLE { "code": 0, "data": { "auth_code": "Z79******sTaH", "expiration_date": "2020-03-31 23:59:59", "renewal_date": "2020-03-29 23:59:59", "status": "ACT", }, "desc": "" } RESPONSE VALUES Name Type Description expiration_date timestamp available only in case of a successful realtime domain transfer expiration_date_openprovider timestamp available only in case of a successful realtime domain transfer The 0 code that we received indicates that the domain object has been successfully created in Openprovider's database. Afterwards, the transfer will be initiated at the registry level and the domain will be put in "pendingTransfer" status. The previous registrar should release the domain within up to 5-7 days. Unless they take any actions to prevent the transfer, it will be approved automatically. Check the TLD documentation for the domain in question in order to see what the procedures are. Our documentation also tells you how long a transfer can take. This can range from near an instant to over a month. When the procedure is over, you will receive a corresponding notification to the email address associated with your Openprovider account. Depending on a TLD, the domain will be renewed for one year and its status will automatically be set to 'clientTransferProhibited' ("Lock domain" will be enabled). 15 Domains API: How to request or reset an authcode This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods. This is a second article in a series in which we are going to cover outgoing domain transfer. To get more information about our API in general, please use our documentation portal as your reference. Domain transfer is a procedure of changing the current registrar of a domain name. Domain names may be transferred only if they have been registered with the previous registrar for 60 days or more. To transfer a domain out of Openprovider one should submit a transfer request with a new registrar. You should follow their instructions on the specifics of the process. The following requirements should be met before initiating the transfer: for gTLD domains, the domain is more than 30 days old; for gTLD domains, the domain was not transferred between registrars within the last 60 days; the domain is "Unlocked" for transfer. You can disable the Transfer Lock by utilizing modifyDomainRequest method. Yet in this article, we are going to focus on how to request or reset an Auth code for a domain. In order to request an Auth code of a domain one should utilize the requestAuthCodeDomainRequest method. It reads the transfer authorization code (or EPP code) from the registry or triggers the registry to send the code to a domain owner (in case of .be and .eu, for instance. Use the endpoint path below. Base URL is determined by both the target environment and the API version. GET {base_url}/domains/{id}/authcode REQUEST VALUES Name Type Description id string Required. auth_code_type string Optional. Type of transfer authorization code. Values: external (default) or internal (for internal transfers between reseller accounts in Openprovider only). REQUEST EXAMPLE curl -X GET \ 'https://api.openprovider.eu/v1beta/domains/123456/authcode' \ -H 'Authorization: ,Bearer 2831a37fb8*******90b5aac822' \ RESPONSE EXAMPLE { "code": 0, "desc": "", "data": { "auth_code": "12345678", "success": true, "type": "external" } } Sometimes a domain might not have an Auth code assigned to it. in such a case, it may be necessary to reset. The procedure is barely any different from requesting an already existing one. If the situation requires you to reset an Auth code, you can use resetAuthCodeDomainRequest which will generate a new authorisation code if a certain registry allows it. Use the endpoint path below. Base URL is determined by both the target environment and the API version. POST {base_url}/domains/{id}/authcode/reset The method has almost identical input parameters as the previous one: REQUEST VALUES Name Type Description id string Required. auth_code_type string Optional.Type of transfer authorization code. Values: "external" (default) or "internal" (for internal transfers between reseller accounts in Openprovider only). REQUEST EXAMPLE curl -X POST \ 'https://api.openprovider.eu/v1beta/domains/123456/authcode/reset' \ -H 'Authorization: ,Bearer 2831a37fb8*******90b5aac822' \ -H 'Content-Type: application/json' \ -d '{ { "auth_code_type": "internal" } RESPONSE EXAMPLE { "code": 0, "data": { "auth_code": "12345678", "domain_roid": "", "epp_statuses": [ "" ], "success": true, "type": "internal" }, "desc": "" } Domain transfers can take up to five days to complete, but once the transfer is pending, you can expedite the process by approving it manually. 16 Domains API: How to approve outgoing domain transfer This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods. This is a third article in a series in which we are going to cover outgoing domain transfer. To get more information about our API in general, please use our documentation portal as your reference. Domain transfer is a procedure of changing the current registrar of a domain name. In the previous article we have covered all prerequisites that have to be met in order to conduct a successful domain transfer. Now that your domain is ready to be transferred the procedure itself should be initiated with the gaining registrar, so you'll need to contact them for specific instructions, but here's a general idea of what you'll need to do: authenticate in the system of the gaining registrar; begin the domain transfer process according to their instructions; provide an EPP code you copied from the Domain management page in RCP or acquired via the Request Authcode Domain method. Use the endpoint path below. The base URL is determined by both the target environment and the API version. POST {base_url}/domains/{id}/transfer/approve REQUEST VALUES Name Type Description id string Domain id. Required. domain string Domain name approve boolean Required. 0 or 1 registrar_tag string Required only for *.uk domains REQUEST EXAMPLE curl -X POST \ 'https://api.openprovider.eu/v1beta/domains/123456/transfer/approve' \ -H 'Authorization: ,Bearer 2831a37fb8*******90b5aac822' \ -H 'Content-Type: application/json' \ -d '{ "approve": 1, "auth_code": "", "domain": { "extension": "london", "name": "test4" }, "id": 0, "registrar_tag": "REGISTRAR-TAG" }' RESPONSE EXAMPLE { "code": 0, "data": { "success": true }, "desc": "" } After the transfer at the new registrar is initiated and the auth code is provided, the transfer will be initiated at the Registry level. Check the TLD documentation for the domain in question in order to see what the procedures are. Our documentation also tells you how long a transfer can take. This can range from near an instant to over a month. 17 Domains API: How to restart domain transfer This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods. This is a fourth article in a series in which we are going to cover incoming domain transfer. To get more information about our API in general, please use our documentation portal as your reference. Domain transfer is a procedure of changing the current registrar of a domain name. Domain names may be transferred only if they have been registered with the previous registrar for 60 days or more. In the previous article we have focused on how to start a domain transfer. However, there are a few things that will cause a domain transfer to fail. If you have followed the preparation steps, you have eliminated the majority of these possibilities. If you fixed potential impediments you can easily restart the transfer with the help of Try Again Last Operation. This method makes an attempt to retry a failed action like transfer or trade using the same parameters that were initially used. Use endpoint path below. Base URL is determined by both the target environment and API version. POST {base_url}/domains/{id}/last-operation/restart REQUEST VALUES Name Type Description domain string Required. REQUEST EXAMPLE curl -X POST \ 'https://api.openprovider.eu/v1beta/123456/last-operation/restart' \ -H 'Authorization: ,Bearer 2831a37fb8*******90b5aac822' \ -H 'Content-Type: application/json' \ -d '{ { "domain": { "extension": "com", "name": "domain", }, } RESPONSE EXAMPLE { "code": 0, "data": { "success": true }, "desc": "" } After the transfer at the new registrar is initiated and the auth code is provided, the transfer will be initiated at the Registry level. 18 Domains API: How to renew a domain This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods. To get more information about our API in general, please use our documentation portal as your reference. If you have chosen to have your domain name to be renewed automatically you won't need to worry about registration periods, your domains will be renewed automatically. Unless you haven't opted in for this option or your credit funds are insufficient the domain name will be removed on its expiration date in Openprovider. In order to prevent a potential domain name loss you can explicitly renew it with the help of renewDomainRequest method. Some TLDs can be renewed at any given time, others, on the the other hand, only within a certain timeframe before their expiration date. Depending on the TLD you will receive a comprehensive answer from our API. Use endpoint path below. Base URL is determined by both the target environment and API version. POST {base_url}/domains/{id}/renew REQUEST VALUES Name Type Description domain string Required. period integer Required. REQUEST EXAMPLE curl -X POST \ 'https://api.openprovider.eu/v1beta/domains/123456/renew' \ -H 'Accept: */*' \ -H 'Authorization: ,Bearer 2f4c1c3a9******15d22b378a64' \ -H 'Connection: keep-alive' \ -H 'Content-Type: application/json' \ -d '{ "domain": { "extension": "com", "name": "domain", }, "period": 2 } RESPONSE EXAMPLE { "code": 0, "data": { "status": "ACT" }, "desc": "" } If you do not want to renew the domain you can delete it or set it to not renew automatically before the expiration date in Openprovider. Please refer to our renewal policies to get more information. 19 Domains API: How to restore a domain This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods. To get more information about our API in general, please use our documentation portal as your reference. Usually, there are only two scenarios in which a domain name is eligible for a restoration: the domain was manually deleted within the last 30 days the domain expired between 30-60 days ago Learn more about expiration policies here. Use endpoint path below. Base URL is determined by both the target environment and API version. POST {base_url}/domains/{id}/restore REQUEST VALUES Name Type Description id integer Required. Domain id domain string Required. REQUEST EXAMPLE curl -X POST \ 'http://api.openprovider.eu/v1beta/domains/123456/restore' \ -H 'Accept: */*' \ -H 'Authorization: ,Bearer 2f4c1c3a9******15d22b378a64' \ -H 'Connection: keep-alive' \ -H 'Content-Type: application/json' \ -d '{ "domain": { "extension": "com", "name": "domain", } RESPONSE EXAMPLE { "code": 0, "data": { "status": "ACT" }, "desc": "" } Restoring a deleted domain After you delete a domain, you have a grace period (soft quarantine) during which you can reclaim ownership. When you restore a deleted domain, you pay a one-time restoration fee. Restoring your domain reinstates the original registration period(the domain will be not automatically renewed). Restoring an expired domain If your domain expired and you’ve passed the grace period (hard quarantine) for your domain TLD (typically 30-45 days) but fewer than 60 days ago, you can still restore your expired domain. When you restore an expired domain, you have to pay a one-time restoration fee and purchase at least one year of renewal. 2 Domains API: Check Domain This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods. This is the third article in a series in which we are going to check domain data. To get more information about our API in general, please use our documentation portal link as your reference. After all the registration requirements for registering exact extensions are clear, we can begin the process of checking the availability of the desired domain for registration, cause some of the names may be already reserved or be too expensive if the premium domain is checked. You should be aware of it. Use endpoint path below. Base URL is determined by both the target environment and API version. POST {base_url}/domains/check REQUEST VALUES Name Type Values Description 1. additional_data object Domain additional data (if required). 1.1 idn_script string Domain name value. The idn script states what language or character set the domain name is in Applicable to: .actor, .ae.org, .airforce, .army, .art, .attorney, .auction, .band, .bar, .best, .br.com, .ceo, .cn.com, .college, .com, .com.de, .com.se, .consulting, .dance, .de.com, .degree, .democrat, .dentist, .design, .engineer, .eu.com, .eus, .feedback, .fm, .forsale, .frl, .fun, .futbol, .gal, .gb.net, .gives, .gr.com, .haus, .hiv, .host, .immobilien, .in.net, .info, .ink, .jp.net, .jpn.com, .kaufen, .kyoto, .lawyer, .love, .market, .me, .mex.com, .moda, .mortgage, .navy, .net, .ninja, .nrw, .online, .ooo, .org, .press, .protection, .pub, .pw, .quebec, .radio.am, .radio.fm, .realty, .rehab, .rent, .republican, .rest, .reviews, .rip, .rocks, .ru.com, .sa.com, .scot, .se.net, .security, .site, .social, .software, .space, .store, .tech, .theatre, .tickets, .top, .uk.com, .uk.net, .us.com, .us.org, .vet, .website, .wiki, .xn--4gbrim, .xn--55qx5d, .xn--5tzm5g, .xn--80asehdb, .xn--80aswg, .xn--c1avg, .xn--czru2d, .xn--i1b6b1a6a2e, .xn--io0a7i, .xn--mk1bu44c, .xn--ngbc5azd, .xn--nqv7f, .xn--t60b56a, .xn--tckwe, .xyz, .za.com) 2. domains An array of objects (list of domains to check).  2.1 item Set of parameters. Set of items with parameters 2.1.1 extension string TLD (e.g. com, tv, it, de etc.) Extension value requested. 2.1.2 name string Name required (e.g. example etc.) Domain name without an extension. with_price boolean true or false Indicate whether to include the domain price with domain availability. with_whois boolean true or false Returns domain WHOIS data. REQUEST EXAMPLE curl -X POST \ https://api.openprovider.eu/v1beta/domains/check \ -H 'Authorization: Bearer 1c26def9e68d********98b5abe264fc' \ -H 'Content-Type: application/json' \ -d '{ "additional_data": { "idn_script": "cyrl" }, "domains": [ { "extension": "london", "name": "test4" } ], "with_price": false, "with_whois": false }' RESPONSE VALUES Name Type Description code integer  API Result with code returned. 0 = Sucess with no errors. 1. data An array of values. An array of data returned per the requested domain name. claim_key string The claim key shown (if presented).  domain string The domain name. is_premium 0 or 1 Indicates, whether a domain is premium and has a higher than standard price or not. 1.1 premium Set of values. Return set of values regarding domain premium prices. currency string Indicates price currency. 1.1.1 price Set of values. Return set of values regarding restore price.  create number (double) Price of creation for the premium domain. renew number (double) Price of renew for the premium domain. renewal number (double) Price of renewal for the premium domain.  1.1.1.2 restore An array of strings. Return set of values regarding domain restore price. 1.1.1.2.1 description string Text description. 1.1.1.2.2 fee number (double) Fee value.  transfer number (double)  The total amount required for domain transfer. price_category string Indicates the domain price category if presented. price_currency string Indicates the domain price currency if presented. 1.2 price An array of values. Return set of values regarding domain price.  1.2.1 product Set of values. Return set of values regarding product price. 1.2.1.1 currency string Indicates the domain price currency if presented. 1.2.1.2 price number (double) Indicates the domain price if presented. 1.2.2 reseller Set of values. Return set of values regarding product price applicable for the current reseller. 1.2.2.1 currency string Indicates the domain price currency if presented. 1.2.2.2 price number (double)  Indicates the domain price if presented. reason string Reason for returned availability status. status string Domain name status returned. whois string Data from WHOIS returned. desc string The description. maintenance boolean Indicates that the Openprovider system is temporarily unavailable because of maintenance. 2. warnings An array of values. An array of warning messages (Contains warning responses if any). 2.1 code integer Warning code value (digits). 2.2 data string Data (additional warning description) value returned. 2.3 desc string The description value returned. RESPONSE EXAMPLE { "code": 0, "desc": "", "data": { "results": [ { "domain": "test4.london", "status": "free" } ] } } Section 5 Once we successfully checked the domain(s) availability and parameters, please move to the next stage and check the domain price. 20 Domains API: How to delete a domain This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods. To get more information about our API in general, please use our documentation portal as your reference. When you delete a domain, you immediately terminate your registration of that domain name. In case of registered domains with status ACT, this will result in a deletion at the registry. NB Keep in mind that not all TLDs have support for a reactivation option and when available this option can be expensive. Openprovider doesn’t provide a refund if you have a remaining registration period for your domain. However, domains with status FAI can be deleted to release the amount from your account balance held in reserve for registration. Learn more about expiration policies here. Use endpoint path below. Base URL is determined by both the target environment and API version. DEL {base_url}/domains/{id} REQUEST VALUES Name Type Description domain string Required. id Required. type string Optional. Applies only to certain TLDs (e.g. .de) REQUEST EXAMPLE curl -X DELETE \ 'https://api.openprovider.eu/v1beta/domains/12345?domain.name=domain&domain.extension=com' \ -H 'Authorization: ,Bearer 2f4c1c3a9******15d22b378a64' \ RESPONSE EXAMPLE { "code": 0, "data": { "status": "ACT" }, "desc": "" } Restoring a deleted domain Keep in mind that domain deletion has the following consequences: Visitors of your domain don’t see your website if one exists Email addresses associated with this domain stops working DNS stops serving Other people can purchase your domain after a grace period 21 Domains API: How to update domain's attributes This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods. To get more information about our API in general, please use our documentation portal as your reference. If you need to modify contact data of the domain or the nameservers as well as to set or remove a transfer lock or special parameters associated with the domain, you should utilise Update Domain method of the API. Use endpoint path below. Base URL is determined by both the target environment and API version. PUT {base_url}/domains/{id} REQUEST VALUES Name Type Description domain string Optional. auth_code varchar Optional. owner_handle varchar Optional. admin_handle varchar Optional. tech_handle varchar Optional. billing_handle varchar Optional. reseller_handle varchar Optional. ns_group string Optional. ns_template_name string Optional. Name of the template to use to automatically create DNS zone for the domain; only applicable if nsGroup is dns-openprovider ns_template_id integer Optional. name_servers dot separated integer Required only if nsGroup field is empty autorenew custom on | off | default is_dnssec_enabled boolean 0 (default) or 1 - Only accepted when nameservers of Openprovider are used dnssec_keys varchar when using your own nameservers use_domicile boolean 0 or 1 accept_premium_fee int or double Required in case when domain is premium, value is the price returned in the response for createDomainRequest without acceptPremiumFee is_private_whois_enabled boolean default value is 0 is_locked boolean default value is 0 NB The owner, admin and tech handles can be retrieved via the customers endpoint and will be the registered contacts for this domain. REQUEST EXAMPLE curl -X PUT \ 'http://api.openprovider.eu/v1beta/domains/123456' \ -H 'Accept: */*' \ -H 'Authorization: ,Bearer 2f4c1c3a9******15d22b378a64' \ -H 'Connection: keep-alive' \ -H 'Content-Type: application/json' \ -d '{ "admin_handle": "XX123456-XX", "auth_code": "2FIXQ63NCQNT", "autorenew": "default", "comments": "Any comments go", "domain": { "extension": "com", "name": "domain", }, "is_locked": true, "is_private_whois_enabled": false, "is_spamexperts_enabled": true, "ns_template_name": "Default", "owner_handle": "XX123456-XX", "reseller_handle": "XX123456-XX", } RESPONSE EXAMPLE { "data": { "id": 11195838, "status": "ACT" } } 22 Domains API: How to trade a domain This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods.To get more information about our API in general, please use ourdocumentation portalas your reference. Domain trade is a procedure of changing the current owner of a domain name. Some TLDs allow you to change the owner of a domain name by switching thehandle attribute. Others, however, do not allow you to explicitly change the owner, a special procedure is required in these cases. You can initiate this procedure either by navigating toTradepage in our control panel or by utilising Trade Domain method. Use endpoint path below. Base URL is determined by both the target environment and API version. POST{base_url}/domains/trade REQUEST VALUES Name Type Description domain string Required. period integer Required. authcode varchar Optional. owner_handle varchar Required. admin_handle varchar Required. tech_handle varchar Required. billing_handle varchar Optional. reseller_handle varchar Optional. ns_group string Required. ns_template_name string Optional. Name of the template to use to automatically create DNS zone for the domain; only applicable if nsGroup is dns-openprovider name_servers dot separated integer Requiredif only if nsGroup field is empty autorenew custom on | off | default is_dnssec_enabled boolean 0 (default) or 1 - Only accepted when nameservers of Openprovider are used dnssec_keys varchar when using your own nameservers use_domicile boolean 0 or 1 at timestamp format: yyyy-mm-dd promo_code Optional. accept_premium_fee required in case when domain is premium, value is the price returned in the response for transferDomainRequest without acceptPremiumFee. REQUEST EXAMPLE curl -X POST \ 'http://api.openprovider.eu/v1beta/domains/trade' \ -H 'Accept: */*' \ -H 'Authorization: ,Bearer 2f4c1c3a9******15d22b378a64' \ -H 'Connection: keep-alive' \ -H 'Content-Type: application/json' \ -d '{ "admin_handle": "XX123456-XX", "auth_code": "gX38tslFG2#%F%%1", "autorenew": "default", "domain": { "extension": "com", "name": "domain", }, "ns_group": "dns-openprovider", "owner_handle": "RB919364-BE", "period": 1, "tech_handle": "XX123456-XX", } RESPONSE EXAMPLE { "code": 0, "data": { "creation_date": "2019-04-12 07:28:27", "expiration_date": "2020-04-16 13:18:54", "renewal_date": "2020-04-16 13:18:54", "status": "ACT" }, "desc": "" } RESPONSE VALUES Name Type Description expiration_date timestamp available only in case of a successful real time domain transfer 3 Domains API: How to retrieve domain price This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods. This is the second article in a series in which we are going to cover Domain price retrieval. To get more information about our API in general, please use our documentation portal as your reference. Once you've ensured that the domain you want to register is free with checkDomainRequest described in our previous article, you're ready to move forward. Pick the domain registration period and retrieve its price using the API call described below: Use the endpoint path below. The base URL is determined by both the target environment and the API version.  GET {base_url}/domains/prices REQUEST VALUES Name Type Values Description domain.name  string Any domain name Required  Domain name for which you're retrieving price domain.extension string Any extension offered by Openprovider Required  Domain extension for which you're retrieving price additional_data.idn_script  string The idn script states what language or character set the domain name is in Applicable to: .actor, .ae.org, .airforce, .army, .art, .attorney, .auction, .band, .bar, .best, .br.com, .ceo, .cn.com, .college, .com, .com.de, .com.se, .consulting, .dance, .de.com, .degree, .democrat, .dentist, .design, .engineer, .eu.com, .eus, .feedback, .fm, .forsale, .frl, .fun, .futbol, .gal, .gb.net, .gives, .gr.com, .haus, .hiv, .host, .immobilien, .in.net, .info, .ink, .jp.net, .jpn.com, .kaufen, .kyoto, .lawyer, .love, .market, .me, .mex.com, .moda, .mortgage, .navy, .net, .ninja, .nrw, .online, .ooo, .org, .press, .protection, .pub, .pw, .quebec, .radio.am, .radio.fm, .realty, .rehab, .rent, .republican, .rest, .reviews, .rip, .rocks, .ru.com, .sa.com, .scot, .se.net, .security, .site, .social, .software, .space, .store, .tech, .theatre, .tickets, .top, .uk.com, .uk.net, .us.com, .us.org, .vet, .website, .wiki, .xn--4gbrim, .xn--55qx5d, .xn--5tzm5g, .xn--80asehdb, .xn--80aswg, .xn--c1avg, .xn--czru2d, .xn--i1b6b1a6a2e, .xn--io0a7i, .xn--mk1bu44c, .xn--ngbc5azd, .xn--nqv7f, .xn--t60b56a, .xn--tckwe, .xyz, .za.com.  Required for checking domain names containing non-ASCII characters  operation  string create (default) transfer renew restore trade update   Type of domain operation you'd like to retrieve price for  period  numeric  1(default) - 10 Any registration period applicable for the extension. Used in conjunction with create operation only. REQUEST EXAMPLE curl -X GET \ 'https://api.openprovider.eu/v1beta/domains/prices?domain.name=example&domain.extension=com&operation=create&period=1' \ -H 'Authorization: Bearer 677428a4de6e0********0aa0225a1fa' RESPONSE EXAMPLE { "code": 0, "desc": "", "data": { "price": { "product": { "price": 9.77, "currency": "USD" }, "reseller": { "price": 9.77, "currency": "USD" } }, "is_premium": false, "is_promotion": false, "tier_price": { "product": { "price": 10.52 ,"currency": "USD" }, "reseller": { "price": 10.52 ,"currency": "USD" } } } } RESPONSE VALUES Name Type Values Description  price  string  array of elements Amounts in product and reseller currency is_premium  boolean  true or false Indicates whether a domain is premium and has a higher than standard price or not. is_promotion boolean true or false Indicates whether any promotion is applicable TIP: It's a best practice to retrieve the domain price before any billable operation you're about to commit - there are many elements involved in domain price calculation, ranging from currency conversion rates to your personal discounts and promotions. The price you've retrieved today may differ from the one you retrieved yesterday. Using this API call various extensions and registration periods can be checked and compared, to pick the combination of price and extension that meets your and your customer's demands. Once you've made up your mind, let's move on and learn about registration requirements 4 Domains API: How to retrieve TLD specific data This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Domains API methods. To get more information about our API in general, please use our documentation portal as your reference. Additional domain fields (also commonly referred to as Extended Attributes) define the information required by domain registries for a given TLD. While most extensions can be registered with just the basic contact data (company name, contact name, address, telephone number, and e-mail address), several extensions require additional contact information in order to register a domain name. When a domain registry requires the information, a domain name will fail to register successfully unless the values are provided. Typical information requested by domain registries includes things such as Registrant Legal Type, Registered Entity Name, etc. Use the endpoint path below. The base URL is determined by both the target environment and the API version. GET {base_url}/domains/additional-data REQUEST VALUES Name Type Description domain.extension string Required. REQUEST EXAMPLE curl -X GET \ 'https://api.openprovider.eu/v1beta/domains/additional-data?domain.extension=no' \ -H 'Authorization: Bearer eca82663f*******76d063d8f6196' \ RESPONSE EXAMPLE { "code": 0, "desc": "", "data": [ { "name": "company_registration_number", "description": "Company registration number. Required in case if domain requester is a legal entity", "required": false, "type": "text" }, { "name": "company_registration_number", "description": "Company registration number. Required in case if domain requester is a legal entity", "required": false, "type": "text" } ] } 5 Domains API: How to retrieve TLD specific customer additional data This is a series of articles dedicated to demonstrating how to get acquainted with Openprovider Zones API methods. To get more information about our API in general, please use our documentation portal as your reference. In the previous article, we have covered additional domain fields that are required by some domain registries for a given TLD. Apart from domain-specific attributes there also can exist customer(handle) specific data. For the very purpose of requesting those fields, one can utilize the following endpoint:  Use the endpoint path below. The base URL is determined by both the target environment and the API version. GET {base_url}/domains/additional-data/customers REQUEST VALUES Name Type Description domain.name string  Optional. domain.extension string  Required. REQUEST EXAMPLE curl -X GET \ 'https://api.openprovider.eu/v1beta/domains/additional-data/customers/?domain.extension=ru' \ -H 'Authorization: Bearer eca82663f*******76d063d8f6196' RESPONSE EXAMPLE { "code": 0, "desc": "", "data": [ { "name": "company_name_cyrillic", "description": "Company name in Cyrillic", "required": false, "type": "text" }, { "name": "company_name_latin", "description": "Company name in Latin", "required": false, "type": "text" }, { "name": "first_name_cyrillic", "description": "First name in Cyrillic", "required": false, "type": "text" }, { "name": "first_name_latin", "description": "First name in Latin", "required": false, "type": "text" }, { "name": "last_name_cyrillic", "description": "Last name in Cyrillic", "required": false, "type": "text" }, { "name": "last_name_latin", "description": "Last name in Latin", "required": false, "type": "text" }, { "name": "middle_name_cyrillic", "description": "Middle name in Cyrillic", "required": false, "type": "text" }, { "name": "middle_name_latin", "description": "Middle name in Latin", "required": false, "type": "text" }, { "name": "passport_issue_date", "description": "Passport issue date", "required": false, "type": "text" }, { "name": "passport_issuer", "description": "Passport issuer", "required": false, "type": "text" }, { "name": "passport_series", "description": "Passport series", "required": false, "type": "text" }, { "name": "passport_number", "description": "Passport number", "required": false, "type": "text" }, { "name": "tax_payer_number", "description": "Tax payer number", "required": false, "type": "text" }, { "name": "mobile_phone_number", "description": "Mobile phone number with SMS", "required": false, "type": "text" }, { "name": "postal_address_cyrillic", "description": "Postal address", "required": false, "type": "text" }, { "name": "legal_address_cyrillic", "description": "Legal address", "required": false, "type": "text" }, { "name": "birth_date", "description": "Birth date is required", "required": false, "type": "text" }, { "name": "is_private_enterpreneur", "description": "Whether the contact is the private enterpreneur.", "required": false, "type": "check" } ] } RESPONSE VALUES Name Type Description name string Name of the field required Whether the field is mandatory or optional type Field type, e.g. text, check, select, multi-select options Possible values & value descriptions description Description of the field 6 Customers API: How to create a customer handle This is a series of articles dedicated to managing customer objects via Openprovider API. This is a first article in a series in which we are going to cover customer handle creation. To get more information about our API in general, please use our documentation portal as your reference. Customer handles are used throughout the whole system in all product modules (domains, SSL, licenses etc). Every customer created in our system gets a unique identifier or a customer "handle". These handles allow you to reuse recurring customers, meaning you will not have to fill in all the information every time you wish to register a domain name. Another benefit is that you can simply update the customer handle if they ever change their details, this will result in your domain names being updated as well. Creating a handle First, let's focus on adding that handle. While some domain registries require specific data to be provided within the handle object (more on this could be found in Customer Extension Additional Data section of the Openprovider docs) it is important that we have at least the bare minimum of information to be able to register domain names and order SSL certificates. All of the required fields are marked accordingly in the following table. Use endpoint path below. Base URL is determined by both the target environment and API version. POST {base_url}/customers REQUEST VALUES Name Type Description company_name string Optional. If customer is a company vat string Optional. name  array with keys: (initials, first_name, prefix, last_name, full_name) Required. Keys 'first_name' and 'last_name' are mandatory. address array with keys : (street, number, suffix, zipcode, city, country, state) Required. Keys 'street', 'number', 'zipcode', 'city' and 'country' are mandatory. Some registries also require a valid value for 'state'. phone array with keys: (country_code, area_code, subscriber_number) Required. fax array with keys: (country_code, area_code, subscriber_number) Optional. email various Required. additional_data various Optional. extension_additional_data various Required for some TLDs locale predefined Optional. tags array with keys (key, value) Optional. REQUEST EXAMPLE curl -X POST \ http://api.openprovider.eu/v1beta/customers \ -H 'Authorization: ,Bearer 2831a37fb**********d790b5aac822' \ -H 'Content-Type: application/json' \ -H 'cache-control: no-cache' \ -d '{ "additional_data": { "birth_address": "test street 45", "birth_city": "Test city", "birth_country": "NL", "birth_date": "1970-01-01", "birth_state": "Testprovince", "birth_zipcode": "123", "company_registration_city": "Testcity", "company_registration_number": "XX123456789X04", "company_registration_subscription_date": "2000-01-01", "headquarters_address": "Test street 5", "headquarters_city": "Testcity", "headquarters_country": "NL", "headquarters_state": "Testprovince", "headquarters_zipcode": "123", "passport_number": "123456", "social_security_number": "6543210" }, "address": { "city": "Test city", "country": "NL", "number": "1", "state": "Testprovince", "street": "Test street", "suffix": "A", "zipcode": "1236 XX" }, "comments": "", "company_name": "Example company", "email": "test@mail.tld", "extension_additional_data": [ { "data": { "admin_type": "1", "applicant_purpose": "P3", "birth_date": "1970-01-01", "company_name_cyrillic": "Example company", "company_name_latin": "Example company", "company_registration_number": "XX123456789X11", "contact_title": "CEO", "ens_auth_id": "", "ens_key": "", "first_name_cyrillic": "Test", "first_name_latin": "Test", "hr_member": "", "industry_class": "19", "is_private_enterpreneur": "", "last_name_cyrillic": "Person", "last_name_latin": "Person", "legal_address_cyrillic": "13245 Country, City, street, 2", "middle_name_cyrillic": "Nikolaevich", "middle_name_latin": "Nikolaevich", "mobile_phone_number": "+7 (123) 456-78-90", "nexus_category": "C31", "org_type": "1", "passport_issue_date": "2009-01-11", "passport_issuer": "Issuer name", "passport_number": "12345678", "passport_series": "1234", "postal_address_cyrillic": "12345 Country, City, street, 1", "social_security_number": "X123455123X", "tax_payer_number": "1345678", "uin": "12345-6", "user_type": "Individual", "vat": "XX123456789X12", "website": "http://example.com", "whois_email": "test@mail.tld" }, "name": "ru" } ], "fax": { "area_code": "111", "country_code": "+05", "subscriber_number": "123456" }, "locale": "nl_NL", "name": { "first_name": "Test", "full_name": "Test Person", "initials": "T P", "last_name": "Person", "prefix": "van der" }, "phone": { "area_code": "111", "country_code": "+04", "subscriber_number": "123456" }, "tags": [ { "key": "customer", "value": "VIP" } ], "vat": "NL123456789X11" }' RESPONSE EXAMPLE { "code": 0, "data": { "handle": "XX123456-XX" }, "desc": "" } RESPONSE VALUES Name Type Description handle varchar Customer unique identifier or handle In the following article we'll get into retrieving information from an existing handle. 7 Customers API: How to get an existing handle This is a series of articles dedicated to managing customer objects via Openprovider API. This is a second article in a series in which we are going to cover customer handle search. To get more information about our API in general, please use our documentation portal as your reference. Searching for a handle Use the endpoint path below. Base URL is determined by both the target environment and the API version. GET {base_url}/customer Our API has two methods that can return information about an existing customer object. The first one that we are going to cover is a method that returns a list of customer objects matching particular search criteria. REQUEST VALUES Name Type Description handle_pattern string Full or partial handle name. Wildcard (*) can be used. email_pattern string Full or partial email address. Wildcard (*) can be used. first_name_pattern string Full or partial first name. Wildcard (*) can be used. last_name_pattern string Full or partial last name. Wildcard (*) can be used. company_name_pattern string Full or partial company name. Wildcard (*) can be used. comment_pattern string Full or partial comment value. Wildcard (*) can be used. with_additional_data boolean Accepted values ‘true’ or ‘false’ - default value ‘false’ limit integer default value: 100, maximum value: 1000 offset integer default value: 0 REQUEST EXAMPLE curl -X GET \ 'https://api.openprovider.eu/v1beta/customers?handle_pattern=XX123456-XX&with_additional_data=true' \ -H 'Authorization: ,Bearer 2831a37fb8*******90b5aac822' \ RESPONSE VALUES Name Type Description handle varchar Customer unique identifier or handle company_name name address phone fax email additional_data if withAdditionalData = true extension_additional_data if withAdditionalData = true RESPONSE EXAMPLE { "code": 0, "data": { "results": [ { "additional_data": { "birth_address": "test street 45", "birth_city": "Test city", "birth_country": "NL", "birth_date": "1970-01-01", "birth_state": "Testprovince", "birth_zipcode": "0123", "cif_nif_number": "", "company_registration_city": "Testcity", "company_registration_number": "12345678", "company_registration_subscription_date": "2000-01-01", "cost_category": "", "cost_center": "", "headquarters_address": "Test street 5", "headquarters_city": "Testcity", "headquarters_country": "NL", "headquarters_state": "Testprovince", "headquarters_zipcode": "0123", "internal_reference": "", "passport_number": "0123456", "project_code": "", "purchase_order_number": "", "social_security_number": "6543210" }, "address": { "city": "Test city", "country": "NL", "number": "1", "state": "Testprovince", "street": "Test street", "suffix": "A", "zipcode": "0123" }, "comments": "", "comments_last_changed_at": "", "company_name": "", "deleted_at": "0000-00-00 00:00:00", "email": "test@mail.tld", "email_verification_status": "FAI", "extension_additional_data": [ { "data": { "admin_type": "1", "applicant_purpose": "P3", "birth_date": "1970-01-01", "company_name_cyrillic": "Example company", "company_name_latin": "Example company", "company_registration_number": "XX123456789X11", "contact_title": "CEO", "ens_auth_id": "", "ens_key": "", "first_name_cyrillic": "Test", "first_name_latin": "Test", "hr_member": "", "industry_class": "19", "is_private_enterpreneur": "", "last_name_cyrillic": "Person", "last_name_latin": "Person", "legal_address_cyrillic": "13245 Country, City, street, 2", "middle_name_cyrillic": "Nikolaevich", "middle_name_latin": "Nikolaevich", "mobile_phone_number": "+7 (123) 456-78-90", "nexus_category": "C31", "org_type": "1", "passport_issue_date": "2009-01-11", "passport_issuer": "Issuer name", "passport_number": "12345678", "passport_series": "1234", "postal_address_cyrillic": "12345 Country, City, street, 1", "social_security_number": "X123455123X", "tax_payer_number": "1345678", "uin": "12345-6", "user_type": "Individual", "vat": "12345678", "website": "http://example.com", "whois_email": "test@mail.tld" }, "name": "ru" } ], "gender": "M", "handle": "XX123456-XX", "id": 12345, "is_deleted": false, "locale": "nl_NL", "name": { "first_name": "Test", "full_name": "Test Person", "initials": "T P", "last_name": "Person", "prefix": "van der" }, "phone": { "area_code": "10", "country_code": "+01", "subscriber_number": "123456" }, "reseller_id": 5349, "tags": [ { "key": "customer", "value": "VIP" } ] } ], "total": 149 }, "desc": "" } { "code": 0, "desc": "", "data": { "results": [ { "id": 123456789, "company_name": "Example company", "name": { "first_name": "Test", "last_name": "Person", "full_name": "Test Person" }, "phone": { "country_code": "+03", "area_code": "111", "subscriber_number": "123456" }, "address": { "street": "Test street", "number": "123", "zipcode": "1235 XX", "city": "Rotterdam", "country": "NL", "state": "Test province" }, "email": "test@mail.tld", "handle": "XX123456-XX", "reseller_id": 12345, "locale": "en_001", "deleted_at": "0000-00-00 00:00:00", "is_deleted": false, "email_verification_status": "ACT" } ], "total": 1 } } RESPONSE VALUES Name Type Description handle varchar Customer unique identifier or handle company_name vat name address phone fax email additional_data if withAdditionalData = true extension_additional_data if withAdditionalData = true Retrieving a handle Once we know that a particular user handle exists, we can retrieve its data by calling Get Customer: Use the endpoint path below. Base URL is determined by both the target environment and the API version. GET {base_url}/customer/{handle} REQUEST VALUES Name Type Description handle string Customer unique handle with_additional_data string Accepted values ‘true’ or ‘false’ - default value ‘false’ REQUEST EXAMPLE curl -X GET \ 'https://api.openprovider.eu/v1beta/customers/XX123456-XX?with_additional_data=true' \ -H 'Authorization: ,Bearer 2831a37fb8*******90b5aac822' \ RESPONSE VALUES Name Type Description handle varchar Customer unique identifier or handle company_name vat name address phone fax email additional_data if withAdditionalData = true extension_additional_data if withAdditionalData = true RESPONSE EXAMPLE { "code": 0, "desc": "", "data": { "additional_data": { "birth_address": "test street 45", "birth_city": "Test city", "birth_country": "NL", "birth_date": "1970-01-01", "birth_state": "Testprovince", "birth_zipcode": "0123", "cif_nif_number": "", "company_registration_city": "Testcity", "company_registration_number": "12345678", "company_registration_subscription_date": "2000-01-01", "cost_category": "", "cost_center": "", "headquarters_address": "Test street 5", "headquarters_city": "Testcity", "headquarters_country": "NL", "headquarters_state": "Testprovince", "headquarters_zipcode": "0123", "internal_reference": "", "passport_number": "0123456", "project_code": "", "purchase_order_number": "", "social_security_number": "6543210" }, "address": { "city": "Test city", "country": "NL", "number": "1", "state": "Testprovince", "street": "Test street", "suffix": "A", "zipcode": "0123" }, "comments": "some comment here", "comments_last_changed_at": "2014-05-08 19:04:11", "company_name": "Example company", "deleted_at": "0000-00-00 00:00:00", "email": "test@mail.tld", "email_verification_status": "ACT", "extension_additional_data": [ { "data": { "admin_type": "1", "applicant_purpose": "P3", "birth_date": "1970-01-01", "company_name_cyrillic": "Example company", "company_name_latin": "Example company", "company_registration_number": "XX123456789X11", "contact_title": "CEO", "ens_auth_id": "", "ens_key": "", "first_name_cyrillic": "Test", "first_name_latin": "Test", "hr_member": "", "industry_class": "19", "is_private_enterpreneur": "", "last_name_cyrillic": "Person", "last_name_latin": "Person", "legal_address_cyrillic": "13245 Country, City, street, 2", "middle_name_cyrillic": "Nikolaevich", "middle_name_latin": "Nikolaevich", "mobile_phone_number": "+7 (123) 456-78-90", "nexus_category": "C31", "org_type": "1", "passport_issue_date": "2009-01-11", "passport_issuer": "Issuer name", "passport_number": "12345678", "passport_series": "1234", "postal_address_cyrillic": "12345 Country, City, street, 1", "social_security_number": "X123455123X", "tax_payer_number": "1345678", "uin": "12345-6", "user_type": "Individual", "vat": "12345678", "website": "http://example.com", "whois_email": "test@mail.tld" }, "name": "ru" } ], "fax": { "area_code": "001", "country_code": "+01", "subscriber_number": "123456" }, "gender": "M", "handle": "XX123456-XX", "id": 5349, "inn": "123456789", "is_deleted": false, "locale": "nl_NL", "name": { "first_name": "Test", "full_name": "Test Person", "initials": "T P", "last_name": "Person", "prefix": "van der" }, "phone": { "area_code": "10", "country_code": "+01", "subscriber_number": "123456" }, "reseller_id": 5349, "tags": [ { "key": "customer", "value": "VIP" } ], "vat": "XX123456789X11" }, "desc": "" } 8 Customers API: How to modify a handle This is a series of articles dedicated to managing customer objects via Openprovider API. This is a third article in a series in which we are going to cover customer handle modification. To get more information about our API in general, please use our documentation portal as your reference. Modifying a handle In order to change data of an existing customer handle one has to utilise Update Customer method. This method takes all the input parameters of Create Customer method with the exception of user's name fields (or company name). These ones have to stay the same. If you need to change the name of a customer, you can do so by cloning an existing handle or creating it anew. Use endpoint path below. Base URL is determined by both the target environment and API version. PUT {base_url}/customers/{handle} REQUEST VALUES Name Type Description vat string Optional. address string Optional. phone various Optional. fax various Optional. email various Optional. additional_data various Optional. extension_additional_data various Required for some TLDs tags varchar Optional. REQUEST EXAMPLE curl -X PUT \ https://api.openprovider.eu/v1beta/customers/XX123456-XX \ -H 'Authorization: Bearer f106428d5016*********1fd9537823' \ -H 'Accept: application/json' \ -H 'Content-Type: application/json' \ -X POST \ -d '{ "additional_data": { "birth_address": "test street 45", "birth_city": "Test city", "birth_country": "NL", "birth_date": "1970-01-01", "birth_state": "Testprovince", "birth_zipcode": "0123", "cif_nif_number": "", "company_registration_city": "Testcity", "company_registration_number": "12345678", "company_registration_subscription_date": "2000-01-01", "cost_category": "", "cost_center": "", "headquarters_address": "Test street 5", "headquarters_city": "Testcity", "headquarters_country": "NL", "headquarters_state": "Testprovince", "headquarters_zipcode": "0123", "internal_reference": "", "passport_number": "0123456", "project_code": "", "purchase_order_number": "", "social_security_number": "6543210" }, "address": { "city": "Test city", "country": "NL", "number": "1", "state": "Testprovince", "street": "Test street", "suffix": "A", "zipcode": "0123" }, "comments": "Some comment here", "email": "test@mail.tld", "extension_additional_data": [ { "data": { "admin_type": "1", "applicant_purpose": "P3", "birth_date": "1970-01-01", "company_name_cyrillic": "Example company", "company_name_latin": "Example company", "company_registration_number": "XX123456789X11", "contact_title": "CEO", "ens_auth_id": "", "ens_key": "", "first_name_cyrillic": "Test", "first_name_latin": "Test", "hr_member": "", "industry_class": "19", "is_private_enterpreneur": "", "last_name_cyrillic": "Person", "last_name_latin": "Person", "legal_address_cyrillic": "13245 Country, City, street, 2", "middle_name_cyrillic": "Nikolaevich", "middle_name_latin": "Nikolaevich", "mobile_phone_number": "+7 (123) 456-78-90", "nexus_category": "C31", "org_type": "1", "passport_issue_date": "2009-01-11", "passport_issuer": "Issuer name", "passport_number": "12345678", "passport_series": "1234", "postal_address_cyrillic": "12345 Country, City, street, 1", "social_security_number": "X123455123X", "tax_payer_number": "1345678", "uin": "12345-6", "user_type": "Individual", "vat": "12345678", "website": "http://example.com", "whois_email": "test@mail.tld" }, "name": "ru" } ], "fax": { "area_code": "001", "country_code": "+01", "subscriber_number": "123456" }, "handle": "XX123456-XX", "locale": "nl_NL", "phone": { "area_code": "10", "country_code": "+01", "subscriber_number": "123456" }, "tags": [ { "key": "customer", "value": "VIP" } ], "vat": "NL123456789X11" } RESPONSE EXAMPLE { "code": 0, "data": { "success": true }, "desc": "" } Depending on the outcome, one will either receive code 0 (in case of success) or an error code with an error message. 9 Customers API: How to delete a handle This is a series of articles dedicated to managing customer objects via Openprovider API. This is a fourth article in a series in which we are going to cover customer handle deletion. To get more information about our API in general, please use our documentation portal as your reference. Deleting a handle This article shows how to delete a customer. Handle deletion removes an existing customer object and all its records.  NB The operation will only succeed if no domains (or other objects) are linked to this customer handle. The name of the handle is the only parameter that is required to perform this operation. Use endpoint path below. Base URL is determined by both the target environment and API version. DEL {base_url}/customers/{handle} REQUEST VALUES Name Type Description handle string Required. REQUEST EXAMPLE curl -L -X DELETE 'https://api.openprovider.eu/v1beta/customers/TP123456-NL' \ -H 'Authorization: ,Bearer 811eac2d-******-06aa469aeb61' \ RESPONSE EXAMPLE { "code": 0, "desc": "", "data": { "success": true } } Depending on the outcome, one will either receive code 0 (in case of success) or an error code with an error message.