API Guides: Customer & Domain Modules
- "This domain can only be renewed within 28 days from its expiration." error received via API
- 1 TLD API: Search an extension
- 10 Domains API: Check gTLD email verification status
- 11 Domain API: Start gTLD email verification
- 12 Domains API: Restart gTLD email verification
- 13 Domains API: How to create a domain
- 14 Domains API: How to transfer a domain
- 15 Domains API: How to request or reset an authcode
- 16 Domains API: How to approve outgoing domain transfer
- 17 Domains API: How to restart domain transfer
- 18 Domains API: How to renew a domain
- 19 Domains API: How to restore a domain
- 2 Domains API: Check Domain
- 20 Domains API: How to delete a domain
- 21 Domains API: How to update domain's attributes
- 22 Domains API: How to trade a domain
- 3 Domains API: How to retrieve domain price
- 4 Domains API: How to retrieve TLD specific data
- 5 Domains API: How to retrieve TLD specific customer additional data
- 6 Customers API: How to create a customer handle
- 7 Customers API: How to get an existing handle
- 8 Customers API: How to modify a handle
- 9 Customers API: How to delete a handle
"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}
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.
GET {base_url}/customers/verifications/emails/domains
REQUEST VALUES
| Name | Type | Description |
| domain | string | Optional. |
| handle | string | Optional. |
| 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 | |
| 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.
GET {base_url}/customers/verifications/emails/start
REQUEST VALUES
| Name | Type | Description |
| 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
GET {base_url}/customers/verifications/emails/start
REQUEST VALUES
| Name | Type | Description |
| 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.
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.
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.
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.
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.
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.
POST {base_url}/domains/{id}/renew
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.
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.
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. |
|
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. |
| 0 or 1 | Indicates, whether a domain is premium and has a higher than standard price or not. | |
| 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. |
| 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. |
| 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.
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.
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.
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.
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 |
|
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.
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:
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.
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. |
| 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 | ||
| 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 | ||
| 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.
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 | ||
| 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.
PUT {base_url}/customers/{handle}
REQUEST VALUES
| Name | Type | Description |
| vat | string | Optional. |
| address | string | Optional. |
| phone | various | Optional. |
| fax | various | Optional. |
| 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": ""
}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.
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
}
}