# DMAPI

# Basics

<article id="bkmrk-%C2%A0dmapi-server-url-th">## Commonalities for all requests

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">DMAPI-Server <abbr class="glossary" title="Universal Resource Locator ('Link')">URL</abbr></span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> This is the service address which has to be used for all requests:  
</span>

`<span style="font-family: arial,helvetica,sans-serif; font-size: small;"><strong>https://dmapi.joker.com</strong></span>`

This is how a request looks like:

`<span style="font-size: small; font-family: courier new,courier;">https://dmapi.joker.com/request/<name-of-request>?<name-of-parameter-1>=<value-of-parameter-1></span>`

`<span style="font-size: small; font-family: courier new,courier;">&<name-of-parameter-2>=<value-of-parameter-2>&auth-sid=<your-session-id></span>`

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Header fields which are returned by most requests</span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
</span>

<table border="1" style="width: 689px; height: 227px;"><tbody><tr><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small; width: 150px;">Tracking Id</span></td><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Unique server-assigned tracking id, assigned to almost all requests </span></td></tr><tr><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Status-Code</span></td><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">0 or 1000-1999 if no error occured, all other values indicate some sort of error.  
</span></td></tr><tr><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Status-Text</span></td><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Human readable error description</span></td></tr><tr><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Result</span></td><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">ACK or NACK (= "Acknowlegded" or "Not Acknowledged") </span></td></tr><tr><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Error</span></td><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">May be returned if (and only if) the request was rejected, in this case reason(s) will be provided. Presence of this line in headers is indicative for that processing didn't take place.</span></td></tr><tr><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Warning</span></td><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Indicative of non-fatal processing or validation problems</span></td></tr><tr><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Proc-Id</span></td><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Joker.com processing ID </span></td></tr><tr><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">HTTP error codes</span></td><td style="width: 40px;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">200 if everything is OK (request was accepted and processed or queued for processing), otherwise the reason will be provided in Error header lines (or, if this is absent, HTTP error code should be used).   
</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"><span style="color: #ff0000;">**IMPORTANT**:</span> Every request (except "login") **<span style="text-decoration: underline;">requires</span>** the presence of the **Auth-Sid** variable ("**Session ID**"), which is returned by the "login" request (login). An active session will expire after some inactivity period (default: 1 hour).</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">In case you are using a browser to access this service, the session id will be set as a cookie, hence need not to be specified as Auth-Sid (unless cookies are not supported or turned off). In any case, Auth-Sid has precedence, if provided. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> Requests consist of these parts:</span>

- <span style="font-family: arial,helvetica,sans-serif; font-size: small;">**"Requires":** Defines variables (sometimes referred to as 'fields') that **MUST** be present </span>
- <span style="font-family: arial,helvetica,sans-serif; font-size: small;">**"Accepts":** Defines variables that **MAY** be present (but not required) </span>
- <span style="font-family: arial,helvetica,sans-serif; font-size: small;">**"Returns":** Describes the request's output - header fields and extra data (if any). If "Returns" is omitted, then a standard reply should be expected (Status-Code, Status-Text, Proc-ID etc)</span>

</article><article id="bkmrk-whois-privacy-servic">## Whois Privacy Services

**Privacy services are available for most generic top level domain names.** The availablitiy of privacy services is indicated in Joker.com's [price list](https://joker.com/goto/prices) and [domain search](https://joker.com/goto/order).

 For requests "**domain-register**" and "**domain-transfer-in-reseller**", there exists an **additional parameter** "privacy":

- privacy=**basic** (owner contact name and/or organisation left intact, address &amp; emails are masked)
- privacy=**pro** (everything is masked)
- privacy=**none** (same as "no privacy parameter provided")

For "**domain-renew**", the additional parameter privacy works similar:

- privacy=**basic** (owner contact name and/or organisation left intact, address &amp; emails are masked)
- privacy=**pro** (everything is masked)
- privacy=**none** (explicitly do a renew without privacy services, even if currently privacy is enabled)
- privacy=**keep** (renew with the same level of privacy service which is currently active for the domain) - this now is also **default**; for domains without an existing privacy service subscription, "keep" means "none", so there will be no privacy service ordered. If there is an existing privacy service subscription active, and this privacy service is **not** set to "off", "keep" will also renew this privacy service subscription, together with the domain.

To **order privacy services for existing domains**, the new request "**domain-privacy-order**"can be used:

```
    domain=example.com
    period=12 (in months, as usual)
    expyear=2016 (privacy expiration year, similar to domain renewal request)
    privacy=basic|pro 

    <strong>If neither period nor expyear is provided, then privacy is ordered for
    remaining domain lifetime, whatever it is.</strong><br></br><br></br>    Example:<br></br>    https://dmapi.joker.com/request/domain-privacy-order?domain=example.com&privacy=basic&auth-sid=<your-current-session-id> <br></br>
```

The request "**domain-set-property"** allows to **manage privacy services** for domains which already do have a valid privacy service subscription:

- privacy=basic (activate "basic" privacy service)
- privacy=pro (activate "pro" privacy service)
- privacy=off (deactivate privacy service - **Whois data will be disclosed**)

**Samples:**

Ordering domain with privacy:

`https://dmapi.joker.com/request/domain-register?domain=example.com&period=12&owner-c=CCOM-1&billing-c=CCOM-1&admin-c=CCOM-1&tech-c=CCOM-1&ns-list=a.ns.joker.com:b.ns.joker.com&privacy=pro&auth-sid=<your-current-session-id>`

Renew domain and order privacy:

`https://dmapi.joker.com/request/domain-register?domain=example.com&period=12&privacy=basic&auth-sid=<your-current-session-id>`

Request incoming transfer and enable privacy:

`https://dmapi.joker.com/request/domain-transfer-in-reseller?domain=example.com&transfer-auth-id=zigzag&billing-c=CCOM-1&admin-c=CCOM-1&tech-c=CCOM-1&privacy=pro&auth-sid=<your-current-session-id>`

Temporarily disable privacy (assuming that it is active):

`https://dmapi.joker.com/request/domain-set-property?domain=example.com&privacy=off&auth-sid=<your-current-session-id>`

Fetch real contact data from privacy protected domain:

`https://dmapi.joker.com/request/query-whois?domain=example.com&internal=1&auth-sid=<your-current-session-id>`

**NOTE**: Not retrieved replies will be kept on the server for a period of 30 days, after this time, only the status of specific request will be available (success or failure).  
  
**IMPORTANT**: Please also note that the registration/renewal period is in **MONTHS, NOT YEARS**!

</article>

# Account and Handling

## login

### Login with Username &amp; Password

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires (mandatory):**</span>

<table border="1" id="bkmrk-username-joker.com-u" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">username</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;"> Joker.com username (email address)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">password</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Joker.com password</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> **Returns:**</span>

<table border="1" id="bkmrk-auth-sid-authenticat" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Auth-SID</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Authenticated Session ID, must be provided with any other request (parameter *auth-sid*)  
</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">List of TLDs</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">List of domain TLDs which are available to the reseller.</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> To be able to use the entire API, you must have a reseller account with Joker.com (and use this account to log in). </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

`<span style="font-size: small; font-family: courier new,courier;">  https://dmapi.joker.com/request/login?username=johndoe&password=mypass</span>`

### Login with API Keys

Instead of using your user- and password credentials, you may also use so called '**API keys**' for login. This way, you can create several DMAPI access facilities, which has several advantages:

- you do not need to expose username and password in your scripts
- API keys **can be restricted** to be "read only" (no modifications possible), or to allow 'modifications only' (can not produce costs)
- you may hand API keys to your staff to enable them to do specific things with Joker.com

Create your API keys in '[**My Profile**](https://joker.com/goto/myjoker)' in section '**Manage Joker.com API access keys**'

Example usage:

```
https://dmapi.joker.com/request/login?api-key=Key_created_in_your_Profile_at_Joker.com
```

The result is the same as for "login"-request, you have to use the provided auth-sid for the subsequent actions.

## logout

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns: Nothing** </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Used to forcibly close (terminate) a session. The session identified by Auth-SID may not be used anymore to send requests. Normally not required as session will timeout anyway (default: 1 hour).</span>

## result-list

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Accepts:** </span>

<table border="0" id="bkmrk-pending%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0-get-res" style="width: 643px; height: 271px;"><tbody><tr><td>*pending* </td><td>get results of requests still in progress

</td></tr><tr><td>*showall*</td><td>get all results incl. deletes using result-delete</td></tr><tr><td>*period*</td><td>get results for specifed period of days (default: 90)

</td></tr><tr><td>*date*</td><td>get results received on (or before) specified date. When date is specified, parameter "period" will be applied to this date (instead of today) and defaults to 1</td></tr><tr><td>*offset*</td><td>start dispalying results from specified position

</td></tr><tr><td>*limit*</td><td>only get number of results specified by limit</td></tr><tr><td>*status*</td><td>get results having specified status (ack/nack/?)

</td></tr><tr><td>*count-only* </td><td>when set to 1, only count number of records and return single line in format "Records: N"

</td></tr><tr><th colspan="2">All following filters may use patterns ("\*" and "?")

</th></tr><tr><td>*rtype*

</td><td>get results for requests of specified type (domain-register/etc)</td></tr><tr><td>*objid*</td><td>get results for specified object ids (domain names, contacts, hosts)

</td></tr><tr><td>*procid*</td><td>get results for specified proc-id</td></tr><tr><td>*svtrid*</td><td>get results for specifued SvTrId</td></tr><tr><td>*cltrid*</td><td>get results for specified ClTrId</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns:**</span>

List of answers from joker.com (one per line):<span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
</span>

```
TimeStamp SvTrId Proc-ID request-type status ClTrId
```

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Where:**</span>

```
TimeStamp: The time when request was made, YYYYMMDDHHMMSS
SvTrID: Tracking-Id associated with this request.
Proc-ID: Proc-Id associated with this request.
request-type: The type of the request.
request-object: The object name (host, domain or contact handle)
status: ack, nack or ?, where ack means that request was completed successfully.
ClTrId: User specified transaction ID, or "-" if nothing was provided by the user
```

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span>**Example:**

```
https://dmapi.joker.com/request/result-list
```

## result-retrieve

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Accepts:**</span>

<table border="1" id="bkmrk-proc-id-one-of-these" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Proc-ID</span>*</td><td rowspan="2"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">One of these must be specified. If both are specified, SvTrId has precedence.</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">SvTrID</span>*</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns:**</span>

<table border="1" id="bkmrk-answer-%28processing-r" style="width: 80%;"><tbody><tr><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Answer (processing result) associated with specified Tracking/Processing ID. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">If detailed information (content) is not available, only status will be returned</span>

</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Please note:** </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Since there is no requirement of uniqueness for user-specified transaction ids, it is not possible to use them to retrieve specific results. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

`<span style="font-size: small; font-family: courier new,courier;">  https://dmapi.joker.com/request/result-retrieve?proc-id=8181810&auth-sid=<your-current-session-id></span>`

## result-delete<span style="font-family: arial,helvetica,sans-serif; font-size: small;">   
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Accepts:**</span>

<table border="1" id="bkmrk-proc-id-one-of-these-1" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Proc-ID</span>*

</td><td rowspan="2"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">One of these must be specified. If both are specified, SvTrId has precedence</span>

</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">SvTrID</span>*

</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> A descriptive message (confirmation) in case of success.  
  
This request will delete the content (not the status) of a reply to an asynchronous request. Deleted results will not be listed anymore when using *result-list*.</span>

## query-profile <span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> Returns reseller profile data in format "key: value". May be used to query account balance</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span>Example:

```
https://dmapi.joker.com/request/query-profile
```

## query-account-balance

**Returns:**

Returns actual account balance - available, pending and total.

Example:

```
https://dmapi.joker.com/request/query-account-balance
```

You will get a response like this:

```
Status-Code: 1000
Status-Text: OK
Columns: available,pending,total,currency
Separator: TAB

975.00	25.00	1000.00	USD
```

The columns are:

<table border="1" id="bkmrk-available-amount-ava" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 16.4692%;"></col><col style="width: 83.6297%;"></col></colgroup><tbody><tr><td>available  
</td><td>amount available for orders

</td></tr><tr><td>pending  
</td><td>amount reserved for pending operations (renewals, transfers etc)  
</td></tr><tr><td>total  
</td><td>the sum of available and pending, i.e. the effective balance  
</td></tr><tr><td>currency  
</td><td>currency of your account</td></tr></tbody></table>

## query-order-list

##### Parameters

<table border="1" id="bkmrk-show-all-show-all-or" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 18.6191%;"></col><col style="width: 81.4762%;"></col></colgroup><tbody><tr><td>show-all</td><td>Show all orders including those which did not incur any charges.</td></tr><tr><td>after</td><td>Show only orders after specified date (inclusive). Date must be in ISO format: YYYY-MM-DD

</td></tr><tr><td>before</td><td>Show only orders before specified data (inclusive).

<p class="callout info">If neither "after" or "before" is specified, the default is a list of orders within last 30 days.</p>

</td></tr><tr><td>type</td><td>Show only orders of specified type. Types are:

<table border="1" style="border-collapse: collapse; width: 100.169%; height: 296px;"><colgroup><col style="width: 18.1627%;"></col><col style="width: 81.7059%;"></col></colgroup><tbody><tr style="height: 29.6px;"><td style="height: 29.6px;">create</td><td style="height: 29.6px;">create domain</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">renew</td><td style="height: 29.6px;">renew domain</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">transfer</td><td style="height: 29.6px;">transfer domain</td></tr><tr><td>restore</td><td>restore domain from RGP</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">delete\_domain</td><td style="height: 29.6px;">delete domain</td></tr><tr><td>cor</td><td>COR (Change Of Registrant aka Domain Owner Change)</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">create-contact</td><td style="height: 29.6px;">create contact</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">autons</td><td style="height: 29.6px;">modify DNS zone</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">lock</td><td style="height: 29.6px;">lock domain</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">unlock</td><td style="height: 29.6px;">unlock domain</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">privacy\_pp1</td><td style="height: 29.6px;">Privacy Basic</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">privacy\_pp2</td><td style="height: 29.6px;">Privacy Pro</td></tr><tr><td>credit-increase</td><td>account top-up</td></tr><tr><td>payment\_fee</td><td>payment fee, amount deducted from account top-up</td></tr></tbody></table>

</td></tr><tr><td>status</td><td>Show only orders with specified completion status.

Possible values are: ok, error, pending

</td></tr><tr><td>tld</td><td>Filter by TLD. By default all TLDs are included.</td></tr><tr><td>fqdn</td><td>Filter by FQDN (domain name). By default all domains (and other objects) are included.</td></tr><tr><td>fqdn-like  
</td><td>Filter by FQDN with wilcards. Wildcards are "\*" (any number of any characters) and "?" (exactly one any character).

*Example*: "\*.com" will list orders involving any .com domains.

</td></tr><tr><td>order-id  
</td><td>Only show order with specified id.  
</td></tr><tr><td>order-id-after  
</td><td>Show orders with ids greater or equal than specified.</td></tr><tr><td>order-id-before  
</td><td>Show orders with ids less or equal than than specified.</td></tr><tr><td>proc-id</td><td>Only show order with specified processing id.</td></tr><tr><td>proc-id-after  
</td><td>Show orders with processing ids greater or equal than specified.  
</td></tr><tr><td>proc-id-before  
</td><td>Show orders with processing ids less or equal than than specified.  
</td></tr><tr><td>limit  
</td><td>Limit the number of returned rows. Used only when above described id ranges are specified. Ignored when parameters `after` or `before` are used.

The default (and the maximum) is 1000.

</td></tr><tr><td>asc</td><td>If true, sort ascending - recent orders come last. The default is false - recent orders come first.</td></tr><tr><td>separator</td><td>Use specified separator in table output. Default is "tab". Possible values:

<table border="1" style="border-collapse: collapse; width: 62.2089%;"><colgroup><col style="width: 50.0376%;"></col><col style="width: 50.0376%;"></col></colgroup><tbody><tr><td>tab</td><td>\\t</td></tr><tr><td>comma</td><td>,</td></tr><tr><td>semicolon</td><td>;</td></tr><tr><td>pipe</td><td>|</td></tr></tbody></table>

  
</td></tr><tr><td>num-comma</td><td>If true, use comma (",") as decimal separator in numbers. Default is false, i.e. use dot (".")

<p class="callout info">Please note that "comma" separator cannot be used when "num-comma" is set to "true".</p>

</td></tr><tr><td>csv</td><td>If true, return result as a downloadable CSV file, without DMAPI headers.

</td></tr><tr><td>per-page</td><td>Number of rows returned per single request when using paging. Must be at least 10.

</td></tr><tr><td>page</td><td>Page number when `per_page` is set. Pages are numbered starting with 1.

</td></tr><tr><td>count-only</td><td>Only count number of rows that would be returned given specified parameters.

</td></tr></tbody></table>

##### Returns

A CSV-like list following the usual DMAPI header:

```
Status-Code: 1000
Status-Text: OK
Row-Count: 6
Columns: order_id,proc_id,created_at,status,type,amount_brutto,amount_netto,currency,identifier

85671266	917263183	2024-03-17T07:58:14Z	ok	renew	10.19	10.19	USD	example.org
85671265	917263182	2024-03-17T07:58:12Z	ok	renew	10.19	10.19	USD	example.com
85671256	917263173	2024-03-17T07:57:06Z	ok	renew	29.40	29.40	USD	example.net
85671255	917263172	2024-03-17T07:57:05Z	ok	create	2.00	2.00	USD	example.zone
85671227	917263144	2024-03-17T07:54:07Z	ok	service_request	0	0		example.com
85671226	917263143	2024-03-17T07:54:07Z	ok	create-contact	0	0		CCOM-91167381

```

##### Output columns description

<table border="1" id="bkmrk-order_id-order-id-pr" style="border-collapse: collapse; width: 100%; height: 265.125px;"><colgroup><col style="width: 22.1826%;"></col><col style="width: 77.8969%;"></col></colgroup><tbody><tr style="height: 29.4583px;"><td style="height: 29.4583px;">order\_id</td><td style="height: 29.4583px;">Order ID</td></tr><tr style="height: 29.4583px;"><td style="height: 29.4583px;">proc\_id</td><td style="height: 29.4583px;">Processing ID</td></tr><tr style="height: 29.4583px;"><td style="height: 29.4583px;">created\_at</td><td style="height: 29.4583px;">Order creation time (UTC)</td></tr><tr style="height: 29.4583px;"><td style="height: 29.4583px;">status</td><td style="height: 29.4583px;">Order status: ok, error, pending</td></tr><tr style="height: 29.4583px;"><td style="height: 29.4583px;">type</td><td style="height: 29.4583px;">Order type</td></tr><tr style="height: 29.4583px;"><td style="height: 29.4583px;">amount\_brutto</td><td style="height: 29.4583px;">Amount charged including VAT. If VAT is not deducted then it has same value as amount\_netto.</td></tr><tr style="height: 29.4583px;"><td style="height: 29.4583px;">amount\_netto</td><td style="height: 29.4583px;">Amount charged excluding VAT.</td></tr><tr style="height: 29.4583px;"><td style="height: 29.4583px;">currency</td><td style="height: 29.4583px;">Currency if amount is non-zero; empty if amount is zero.</td></tr><tr style="height: 29.4583px;"><td style="height: 29.4583px;">identifier</td><td style="height: 29.4583px;">Domain or other object name that is affected by the order</td></tr></tbody></table>

<p class="callout info">Positive amounts are amounts ***paid***, i.e. ***deducted*** from your balance.  
  
Negative amounts are amounts ***received***, i.e. ***added*** to your balance. This usually happens if you get a refund.  
  
If `status` is not `ok`, then the amount is neither added or deducted - it is just a reference to the cost of the order.</p>

<p class="callout info">If `show-all=false` (the default) then only orders processed within last 3 years are visible.  
  
If `show-all=true` then only orders from last 90 days are visible.  
  
Period covered by `after`/`before` parameters may not be longer than 90 days. The period is enforced *silently*, you will get no warning - just orders within 90 days, so if there are none you will see empty response.  
  
Empty (no rows) output means that there are no orders matching specified parameters are visible.</p>

<p class="callout info">If you use ranged search by `order-id` or `proc-id` and do not limit search period using `after` and/or `before`, the maximum number of rows returned is 1000 (and is the default). It could be lowered by using `limit` parameter, but 1000 is the maximum anyway.  
  
However, if you do use `after` and/or `before` parameters, they will be applied `independently` - this means that if specified id range does not fit into specified time range, you will get no results.  
</p>

<p class="callout info">Parameters `fqdn` and `fqdn-like` actually could be used not only for domain names but for other object identifies, like contact handles - it depends on operation.</p>

<p class="callout warning">**Please note that all returned data, including amounts charged, is for informational purposes only!**  
  
The sum of amounts may not exactly match the issued invoices due to possible adjustments related to discounts, manual processing, and other corrections that cannot be properly reflected in this list.  
</p>

# Domains

## query-domain-list

**Accepts (optional)**

<table border="1" id="bkmrk-pattern-pattern-to-m" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">pattern</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Pattern to match (globbing, like "dom\*")</span></td></tr><tr><td>*<span style="font-size: small;">from</span>*

</td><td><span style="font-size: small;">Start from this item in list</span>

</td></tr><tr><td>*<span style="font-size: small;">to</span>*

</td><td><span style="font-size: small;">End by this item</span>

</td></tr><tr><td><span style="font-size: small;">*showstatus*    
</span>

</td><td><span style="font-size: small;">Returns additional column, showing domain status; may be 0 or 1  
</span>

</td></tr><tr><td>*<span style="font-size: small;">showgrants</span>*

</td><td><span style="font-size: small;">Returns additional column, showing domain grants; may be 0 or 1  
</span>

</td></tr><tr><td>*<span style="font-size: small;">showprivacy </span>*

</td><td><span style="font-size: small;">Returns additional columns, showing privacy status; may be 0 or 1  
</span>

<span style="font-size: small;">The following columns will be added:  
</span>

<span style="font-size: small;">privacy-status - shows the currently active privacy status  
privacy-origin - shows the privacy status, which was bought  
privacy-expiration - shows the expiration date of privacy</span>

</td></tr></tbody></table>

**Returns**

<span style="font-size: small;">List of registered domains and their expiration dates (one per line, separated by whitespace). If "showstatus" is present, the the list will be with three columns, the last one showing domain status (like "lock,autorenew" etc - comma separated). </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

`<span style="font-size: small; font-family: courier new,courier;">https://dmapi.joker.com/request/query-domain-list?pattern=a*&showstatus=1&auth-sid=<your-current-session-id></span>`

## domain-register

**Requires (mandatory)**

<table border="1" id="bkmrk-domain%C2%A0%C2%A0%C2%A0%C2%A0%C2%A0-domain-n" style="width: 546px; height: 128px;"><tbody><tr><td>*domain* </td><td>Domain name to register</td></tr><tr><td>*period*</td><td>Registration period in **months** (not in years!)</td></tr><tr><td>*status*</td><td>Set domain status (only "production" is accepted so far)</td></tr><tr><td>*owner-c*</td><td>Owner contact handle</td></tr><tr><td>*billing-c*</td><td>Billing contact handle</td></tr><tr><td>*admin-c*</td><td>Administrative contact handle</td></tr><tr><td>*tech-c*</td><td>Technical contact handle</td></tr><tr><td>*ns-list*</td><td>List of name servers, delimited by colon</td></tr></tbody></table>

**Accepts (optional)**

<table border="1" id="bkmrk-autorenew-if-set-to-" style="width: 600px; height: 64px;"><tbody><tr><td>*autorenew*</td><td>if set to "1", domain will be autorenewed upon expiration</td></tr><tr><td>*language*</td><td>3 letter language code for <abbr class="glossary" title="Internationalized Domain Names">IDN</abbr> domains

</td></tr><tr><td>*registrar-tag* </td><td>Registrar tag, also known as "Membership token", currently only needed for .**XXX** domains

</td></tr><tr><td>*privacy*</td><td>basic|pro|none - adds whois privacy subscription to domain order, see also Whois Privacy Services

</td></tr><tr><td>*max-price*</td><td>maximum price user is willing to pay for a domain registration, renewal or transfer. If provided, it must be a number (fractions allowed) above 0.

If not provided and domain has non-standard pricing, or if *max-price* is lower than actual domain price at the moment of registration, the request will fail.   
If *max-price* is higher than the actual domain price, then only the actual price will be deducted

</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">This request allows to **register** a domain.   
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">You must have **registered contacts** (handles) to be able to register a domain.(=&gt; contact-create, query-contact-list)  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Important:** Please note that the registration period is in **months, not years**. In most cases, this number is a **multiple of 12**.  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">`<span style="font-size: small; font-family: courier new,courier;">https://dmapi.joker.com/request/domain-register?domain=example.com&period=12&status=production&owner-c=COCO-4711&billing-c=COCO-4712&admin-c=COCO-4712&tech-c=COCO-4712&ns-list=a.ns.joker.com,b.ns.joker.com,c.ns.joker.com&auth-sid=<your-current-session-id></span>`</span>

## domain-renew

**Requires (mandatory)**

<table border="1" id="bkmrk-domain-domain-name-t" style="width: 80%;"><tbody><tr><td>*domain*</td><td>domain name to renew</td></tr><tr><td>*period*</td><td>renewal period in **months** (not in years!)</td></tr><tr><td>*expyear*

</td><td>the wanted expiration year (e.g. '2014')</td></tr></tbody></table>

**Accepts (optional)**

<table border="0" id="bkmrk-privacy-%C2%A0-%C2%A0-%C2%A0-%C2%A0%C2%A0-bas" style="width: 667px; height: 105px;"><tbody><tr><td>*privacy*  </td><td>basic|pro|none|keep - adds whois privacy subscription to domain renewal</td></tr><tr><td> </td><td>none: explicitly do a renew without privacy services, even if currently privacy is enabled

keep: renew with the same level of privacy service which is currently active for the domain

see also Whois Privacy Services

</td></tr><tr><td>*max-price*</td><td><table border="1"><tbody><tr><td> </td><td>maximum price user is willing to pay for a domain registration, renewal or transfer. If provided, it must be a number (fractions allowed) above 0.

If not provided and domain has non-standard pricing, or if *max-price* is lower than actual domain price at the moment of registration, the request will fail.   
If *max-price* is higher than the actual domain price, then only the actual price will be deducted

</td></tr></tbody></table>

</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> With this request you can renew the domain. Please be aware that all renewals are not refundable. </span>

"**expyear**" is a safety option which can be used **instead of "period"** to renew domain till specified year (not longer). If you use "period", and by mistake send the request more than once, domain will be renewed again, while with "expyear", it will not be renewed if it's expiration year is greater or equals to specified.

**Only one of "period" or "expyear" may be used, but not both.**

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Please note:** </span>

- <span style="font-family: arial,helvetica,sans-serif; font-size: small;">registration period is in **months, not years**! In most cases, this number is a **multiple of 12**.  
    </span>
- <span style="font-family: arial,helvetica,sans-serif; font-size: small;">to prevent from unintended/errorneous multiple renewals, **a specific domain name can only be renewed once per 6 hours.** This means, if you want to renew a domain for 2 years, you should use a period of "24" - in case you want to renew using two requests with a period of "12", the 2nd request must not be sent before 6 hours after the 1st one.  
    </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">`<span style="font-size: small; font-family: courier new,courier;">  https://dmapi.joker.com/request/domain-renew?domain=example.com&period=12&auth-sid=<your-current-session-id</span>`<span style="font-size: small; font-family: courier new,courier;"> </span></span>

## domain-modify

**Requires (mandatory)**

<table border="1" id="bkmrk-domain-domain-name-t-1" style="width: 294px; height: 18px;"><tbody><tr><td>*domain*</td><td style="text-align: left;">domain name to modify</td></tr></tbody></table>

**Accepts (optional)**

<table border="1" id="bkmrk-billing-c-domain-con"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> billing-c</span>*</td><td rowspan="3"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain contact data to modify </span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> admin-c</span>*</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> tech-c</span>*</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> ns-list </span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">list of new nameservers delimited by colon ":" (it will **<span class="moz-txt-underscore">replace</span>** existing nameservers!)</span></td></tr><tr><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">*registrar-tag*  </span></td><td>Registrar tag, also known as "Membership token", currently used for **.XXX** domains

</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">dnssec</span>*</td><td>i<span style="font-family: arial,helvetica,sans-serif; font-size: small;">f specified, allows setting or removal of DNSSEC keys for domain. If not specified, DNSSEC records will not be changed. Value of "0" will remove DNSSEC, value of "1" will add DNSSEC (and ds-N parameters must be provided)</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> ds-1 list of DNSSEC parameter sets (min. 2, max. 6) for DNSSEC enabled domains   
 ds-2 for com/net/org/tv/cc each entry has format:   
 ds-3 tag:alg:digest-type:digest   
 ds-4 for de:   
 ds-5 protocol:alg:flags:pubkey-base64   
 ds-6   
</span>

</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
With this request you can modify </span>

- <span style="font-family: arial,helvetica,sans-serif; font-size: small;">contact handles</span>
- <span style="font-family: arial,helvetica,sans-serif; font-size: small;">nameservers </span>
- <span style="font-family: arial,helvetica,sans-serif; font-size: small;">DNSSEC </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">parameters (for DNSSEC capable nameservers and TLDs supporting DNSSEC) </span>

<span style="font-size: small;"> </span><span style="font-size: small;">Please only specify contact handles which you want to modify, all unspecified handles will be left as is.</span>

<span style="font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">For DNSSEC, you will find more information [here](http://en.wikipedia.org/wiki/Domain_Name_System_Security_Extensions) .</span>

**Example:**

<div id="bkmrk-1-%C2%A0%C2%A0https%3A%2F%2Fdmapi.jo"><div class="syntaxhighlighter  plain" id="bkmrk-1-%C2%A0%C2%A0https%3A%2F%2Fdmapi.jo-1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`<a href="https://dmapi.joker.com/request/domain-modify?ns-list=a.my-own-ns.com:b.my-own-ns.com&auth-sid=<your-current-session-id">https://dmapi.joker.com/request/domain-modify?ns-list=a.my-own-ns.com:b.my-own-ns.com&auth-sid=<your-current-session-id</a>>`</div></div></td></tr></tbody></table>

</div></div>**<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span>Example for adding a key** (and enabling DNSSEC):

<div id="bkmrk-1-http%3A%2F%2Fdmapi.joker"><div class="syntaxhighlighter  plain" id="bkmrk-1-http%3A%2F%2Fdmapi.joker-1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`<a href="http://dmapi.joker.com/request/domain-modify?domain=example.de&dnssec=1&ds-1=256:3:5:AwEAAd4TaRzEn0zJfw9w2qkazHTqOX97XwNzoDHMKgClJbX/jr9YGdCYKpTfcKQbVmpI4EVBJOjNWawOJEgpVivw53yHbtEFLOCSYyjwHuXaWiEv0sESNAoPCXQurp4tbHSlnRpyxyzV3dsh9/qUIkJEXxcEuFPaLG3bz1z0Ude6gMXr">http://dmapi.joker.com/request/domain-modify?domain=example.de&dnssec=1&ds-1=256:3:5:AwEAAd4TaRzEn0zJfw9w2qkazHTqOX97XwNzoDHMKgClJbX/jr9YGdCYKpTfcKQbVmpI4EVBJOjNWawOJEgpVivw53yHbtEFLOCSYyjwHuXaWiEv0sESNAoPCXQurp4tbHSlnRpyxyzV3dsh9/qUIkJEXxcEuFPaLG3bz1z0Ude6gMXr</a>`</div></div></td></tr></tbody></table>

</div></div><div id="bkmrk-1-http%3A%2F%2Fdmapi.joker-2"><div class="syntaxhighlighter  plain" id="bkmrk-1-http%3A%2F%2Fdmapi.joker-3"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`<a href="http://dmapi.joker.com/request/domain-modify?domain=example.com&dnssec=1&ds-1=38698:5:1:AFE249392848D0458B3967BA1EE9BDEA6C3ECB43">http://dmapi.joker.com/request/domain-modify?domain=example.com&dnssec=1&ds-1=38698:5:1:AFE249392848D0458B3967BA1EE9BDEA6C3ECB43</a>`</div></div></td></tr></tbody></table>

</div></div>**Example for removing DNSSEC information:**

<div id="bkmrk-1-https%3A%2F%2Fdmapi.joke"><div class="syntaxhighlighter  plain" id="bkmrk-1-https%3A%2F%2Fdmapi.joke-1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`<a href="https://dmapi.joker.com/request/domain-modify?domain=example.com&dnssec=0">https://dmapi.joker.com/request/domain-modify?domain=example.com&dnssec=0</a>`</div></div></td></tr></tbody></table>

</div></div>## domain-delete

**Requires (mandatory)**

<table border="1" id="bkmrk-domain%C2%A0%C2%A0%C2%A0-domain-nam"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain   
</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain name to delete</span></td></tr></tbody></table>

**Accepts (optional)**

<table border="1" id="bkmrk-force-%C2%A0-%C2%A0-%C2%A0-if-prese" style="width: 80%;"><tbody><tr><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">*force*    
</span></td><td align="left"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">if present and set to '1', 'Y' or 'Yes', the domain will be deleted even if older than 72 hours.</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
With this request you can delete a domain. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> If you delete a domain (**gTLDs only**) within the **first 72 hours** after the registration, **the registration-fee will be refunded** to your account. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> To delete a domain which is registered for more than 72 hours, you must specify "force=1", otherwise the request will be rejected.  
Please note: The number of refundable deletions of domains per month is limited, and depends on the number of domains in a portfolio, and the related TLD registry.</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<div id="bkmrk-https%3A%2F%2Fdmapi.joker.-2"><div class="syntaxhighlighter  plain" id="bkmrk-https%3A%2F%2Fdmapi.joker.-3">`<a href="https://dmapi.joker.com/request/domain-delete?domain=example.com&force=1&auth-sid=<your-current-session-id">https://dmapi.joker.com/request/domain-delete?domain=example.com&force=1&auth-sid=<your-current-session-id</a>>`</div></div>## domain-owner-change

**Requires**

<table border="1" id="bkmrk-domain-domain-name-t-2" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain name to change the owner of</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">name</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional) full name (if empty, fname + lname will be used)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">fname</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">first name</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">lname</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">last name</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">title</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">individual</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional) Y, Yes, N, No</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">organization </span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional if individual)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">email</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">mailaddress of the contact</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">address-1</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">street address</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">address-2</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">address-3</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">city</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">state</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">postal-code</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">country</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">ISO country code (2 letters)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">phone</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">extension</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">fax</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional)</span></td></tr><tr><td> </td><td> </td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">lock-opt-out</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional) yes, no **(new IRTP-C: do not apply a 60 days transfer lock to the domain)**</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
With this request you can change the visible **WHOIS owner** of a domain. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> Either "name" or "lname" and "fname" must be provided. Fields **not** marked as optional are mandatory, and must not be empty. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">For the revised ICANN IRTP-C (change of registrar) policy, please also visit our [documentation](https://joker.com/goto/resdocs).  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<div id="bkmrk-1-https%3A%2F%2Fdmapi.joke-2"><div class="syntaxhighlighter  plain"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`<a href="https://dmapi.joker.com/request/domain-owner-change?domain=example.com&fname=John&lname=Doe&email=johnd@someisp.com&address-1=Smartroad">https://dmapi.joker.com/request/domain-owner-change?domain=example.com&fname=John&lname=Doe&email=johnd@someisp.com&address-1=Smartroad</a>1&city=Smalltown&postal-code=40122&country=US&phone=+1.422.8001&auth-sid=<your-current-session-id>`</div></div></td></tr></tbody></table>

</div></div>## domain-lock

**Requires (mandatory)**

<table border="1" id="bkmrk-domain-domain-name-t-3" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain name to lock</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
With this request you can **lock a domain** to **prevent from fraudulent transfer attempts**. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">If a domain is locked, each transfer-request from a foreign registrar will be declined. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">`<span style="font-size: small; font-family: courier new,courier;">https://dmapi.joker.com/request/domain-lock?domain=example.com&auth-sid=<your-current-session-id></span>`</span>

## domain-unlock

**Requires (mandatory)**

<table border="1" id="bkmrk-domain-domain-name-t-4" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain name to unlock</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
With this request you can **unlock a domain**. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">If you want to transfer a domain to a foreign registrar, it has to be unlocked.</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">`<span style="font-size: small; font-family: courier new,courier;">https://dmapi.joker.com/request/domain-unlock?domain=example.com&auth-sid=<your-current-session-id></span>`</span>

## domain-transfer-in-reseller

**Requires (mandatory)**

<table border="1" id="bkmrk-domain-full-qualifie" style="width: 589px; height: 286px;"><tbody><tr><td>*domain*</td><td>full qualified domain name to transfer to Joker.com</td></tr><tr><td>*transfer-auth-id*</td><td>AUTH-ID required for all domains except .eu</td></tr><tr><td>*owner-c*</td><td>new owner contact handle to be used for transferred domain</td></tr><tr><td colspan="2">Accepts (optional)

</td></tr><tr><td>*admin-c*</td><td>new admin contact handle

</td></tr><tr><td>*tech-c*</td><td>new tech contact handle</td></tr><tr><td>*billing-c*</td><td>new billing contact handle</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">status</span>*</td><td>new domain status to be set after transfer (lock, production)

</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">period</span>*</td><td>renewal period in months, **not** in years! \[not in use, please leave empty\]

</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">autorenew</span>*</td><td>Autorenew flag for the domain (0 or 1); if not set explicitly, defaults to 1

</td></tr><tr><td>*ns-list* </td><td>list of colon-separated nameservers

</td></tr><tr><td>*privacy*</td><td>basic|pro|none - adds whois privacy subscription to domain transfer, see also Whois Privacy Services</td></tr><tr><td>*max-price*</td><td>maximum price user is willing to pay for a domain registration, renewal or transfer. If provided, it must be a number (fractions allowed) above 0.

If not provided and domain has non-standard pricing, or if *max-price* is lower than the actual domain price at the moment of registration, the request will fail.   
If *max-price* is higher than the actual domain price, then only the actual price will be deducted

 </td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> With this request you can initiate a transfer of the domain from another registrar to Joker.com.</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">You have to provide a valid **AUTH-ID** (you have to request this from the **current** provider of the domain). </span>

**Please note:**

- please make sure, that there is no so-called 'registry lock' active for the domain to be transferred. Please verify, that the current registrar does not block the domain, resp. deactivates the blocking
- the domain to be transferred must have been active for at least 60 days at the current registrar, otherwise the transfer may fail
- the domain to be transferred must not be object of an active ICANN UDRP dispute procedure
- the domain should have a remaining term of least 7 days, to ensure that the transfer succeeds within the time limits (a maximum of 5 days is granted to confirm or object a transfer). In case the domain has less than 7 days of remaining term, a successful transfer cannot be warranted.
- this procedure will trigger email notifications to the owner and the admin contact of the domain to be transferred (this is following mandatory ICANN transfer provisions)

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<div id="bkmrk-https%3A%2F%2Fdmapi.joker.-6"><div class="syntaxhighlighter  plain" id="bkmrk-https%3A%2F%2Fdmapi.joker.-7">`<a href="https://dmapi.joker.com/request/domain-transfer-in-reseller?domain=example.com&transfer-auth-id=abc123xyz&owner-c=COCO-4711&admin-c=COCO-4712&tech-c=COCO-4712&billing-c=COCO-4712&auth-sid=<your-current-session-id">https://dmapi.joker.com/request/domain-transfer-in-reseller?domain=example.com&transfer-auth-id=abc123xyz&owner-c=COCO-4711&admin-c=COCO-4712&tech-c=COCO-4712&billing-c=COCO-4712&auth-sid=<your-current-session-id</a>>`</div></div><div id="bkmrk-">  
</div>## domain-set-property

**Requires (mandatory)**

<div id="bkmrk-domain-domain-name-o"><table border="1" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain name or pattern</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">pname</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">property name </span></td></tr><tr><td>*<span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">pvalue</span></span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">property value (may be empty)  
</span></td></tr></tbody></table>

</div><span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span>With this request you can set a property (flag) for a domain or a set of domains, selected by wildcard pattern.

List of available properties and their effects:

<div id="bkmrk-autorenew-0-or-1-if-"><table border="0" style="width: 609px; height: 115px;"><tbody><tr><td>*autorenew*</td><td>0 or 1

If set to 1, the domain will be automatically renewed on expiration (if you have enough funds in your account)

</td></tr><tr><td>*whois-opt-out*</td><td> 0 or 1

currently only used for .tel domains; if set to 1, owner information will not be shown in whois

</td></tr><tr><td>*privacy*</td><td>off or basic or pro (if available)

</td></tr><tr><td>*gdpr-opt-in* </td><td>0 or 1

opt-in to display contact data which is normally redacted by GDPR

</td></tr></tbody></table>

</div>If an empty value is provided, then the property will be cleared, i.e. the default will be used.

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<div id="bkmrk-https%3A%2F%2Fdmapi.joker.-8"><div><div class="syntaxhighlighter  plain" id="bkmrk-https%3A%2F%2Fdmapi.joker.-9">`<a href="https://dmapi.joker.com/request/domain-set-property?domain=example.com&pname=autorenew&pvalue=1&auth-sid=<your-current-session-id">https://dmapi.joker.com/request/domain-set-property?domain=example.com&pname=autorenew&pvalue=1&auth-sid=<your-current-session-id</a>>`</div></div></div><div id="bkmrk--1">  
</div>## domain-get-property

<div id="bkmrk--2">  
</div>**Requires**

<div id="bkmrk-domain-domain-name-p"><table border="1" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain name</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">pname</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">property name (same as in domain-set-property)</span></td></tr></tbody></table>

</div><span style="font-family: arial,helvetica,sans-serif; font-size: small;">With this request you can query the value of a specific property set for a domain. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">It returns a single line, which looks like: </span>

<div id="bkmrk-1-autorenew%3A-0"><div><div class="syntaxhighlighter  plain" id="bkmrk-1-autorenew%3A-0-1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`autorenew: 0`</div></div></td></tr></tbody></table>

</div></div></div><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<div id="bkmrk-1-https%3A%2F%2Fdmapi.joke-3"><div><div class="syntaxhighlighter  plain"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`<a href="https://dmapi.joker.com/request/domain-get-property?domain=example.com&pname=autorenew&auth-sid=<your-current-session-id">https://dmapi.joker.com/request/domain-get-property?domain=example.com&pname=autorenew&auth-sid=<your-current-session-id</a>>`</div></div></td></tr></tbody></table>

</div></div></div>## domain-transfer-get-auth-id

**Requires**

<table border="1" id="bkmrk-domain-domain-name-t-5" style="width: 411px; height: 16px;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain name to get AUTH-ID for</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Retrieves domain's **Auth-ID**, which is required when transfering domains to another registrar. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> This request is not real-time, i.e. you have to check detailed reply (use "result-retrieve") to get the Auth-ID. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Please note**: </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Every request will generate a new Auth-ID**, thus rendering any previously requested Auth-ID invalid. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<div id="bkmrk-1-https%3A%2F%2Fdmapi.joke-4"><div class="syntaxhighlighter  plain"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`<a href="https://dmapi.joker.com/request/domain-transfer-get-auth-id?domain=example.com&auth-sid=<your-current-session-id">https://dmapi.joker.com/request/domain-transfer-get-auth-id?domain=example.com&auth-sid=<your-current-session-id</a>>`</div></div></td></tr></tbody></table>

</div></div>## domain-transfer-control

This request allows to retrieve status information for all pending transfers. Additionally, transfers can be cancelled, or the FOA email can be re-sent.

**Parameters:**

```
        action                  One of: <em>list, show, resend-foa, cancel</em>
        domain                  Domain name to control transfer of (ignored when action=<em>list</em>)
 
```

**action=*list***

When action=list, this request returns a list (columns are separated by tabs) of all currently pending transfers:

```
        <domain> <state> <owner-email> <admin-email>
```

where &lt;state&gt; is one of (listed in "natural" transition order):

```
                IN_DB
                PAYMENT_PREPARED
                PAYMENT_ACQUIRED

                PENDING_FOA_SENDING

                        Joker.com could not parse the recipient of the FOA.
                        Manual action from Joker.com is required and happens
                        during office hours, thus in worst case it may take
                        few days (during weekend or holidays).

                FOA_BEEN_SENT
                
                        FOA is sent and Joker.com is waiting for owner's
                        reaction. Owner has 5 days to react, thus the state
                        may last up to 5 days.
                        
                FOA_NACK                FOA is rejected
                FOA_ACK                 FOA is accepted

                REGISTRY_REQUEST_SENT

                REGISTRY_REQUEST_RECEIVED_NOW_WAITING
                
                        FOA had been accepted, transfer request is sent
                        and the losing registrar has to release the domain.
                        This state may take up to 5 days, we could do nothing
                        to speed it up.
                        While in this state, transfer may be cancelled
                        by using "action=cancel".

                REGISTRY_CANCELATION_PENDING
                
                        The user has requested cancel of domain transfer
                        by using "action=cancel".

                DOMAIN_WITH_JOKER_PENDING_COMPLETE
                
                        The domain is actually with Joker.com, but either
                        we haven’t noticed yet (batch pending) or manual
                        work is necessary.
                        Please contact Joker.com if this state lasts longer
                        than 1 hour.

                PAYMENT_COMMITTED

                TRANSFER_PROCESSED_SUCCESSFULLY

```

**action=*show***

When action=*show*, the status of a specified domain is returned like:

```
        domain: example.com
        status: FOA_BEEN_SENT
        owner_email: <a class="moz-txt-link-abbreviated" href="mailto:owner@example.com">owner@example.com</a>
        admin_email: <a class="moz-txt-link-abbreviated" href="mailto:admin@example.com">admin@example.com</a>
        transfer-id: 123456
```

**action=*resend-foa***

When action=resend-foa, FOA will be resent (only possible in state FOA\_BEEN\_SENT).

**action=*cancel***

When action=cancel, the (pending) transfer will be cancelled.

**Returns**

Status code is 1000 for successful request, or &gt;= 2000 otherwise.

**Example**

```
https://dmapi.joker.com/request/domain-transfer-control?domain=example.com&action=resend-foa
```

## domain-check

**Requires (mandatory)**

<table border="1" id="bkmrk-domain-domain-name-t-6" style="width: 80%;"><tbody><tr><td>*domain*</td><td>domain name to check</td></tr></tbody></table>

**Accepts (optional)**

<table border="1" id="bkmrk-check-price-if-provi" style="width: 527px; height: 64px;"><tbody><tr><td>*check-price*</td><td>If provided, specifically check the price for: **create**, **renew**, **transfer**, **restore**</td></tr><tr><td>*period* </td><td>If provided, price will be calculated based on specified period. Period may be specified in years (values from 1 to 10) or in traditional for DMAPI months (&gt;= 12, must be a multiple of 12).

</td></tr><tr><td>*language* </td><td>Relevant only for IDN domains, specifies language as 2 letter (ISO 639.1) or 3 letter (ISO 639.2) code:

[https://www.loc.gov/standards/iso639-2/php/code\_list.php](https://www.loc.gov/standards/iso639-2/php/code_list.php)

</td></tr><tr><td> </td><td> </td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">With this request you can **check if a domain is available for registration, and what type of domain pricing will be applied for different types of orders.**</span>

**Returns** one or more lines with key-value pairs as follows:

**domain-status:** &lt;status&gt;   
  
&lt;status&gt; can be one of:

<table border="0" id="bkmrk-available%C2%A0%C2%A0%C2%A0%C2%A0-regula"><tbody><tr><td>**available** </td><td>regular domain (non-premium) available for registration</td></tr><tr><td>**premium**</td><td>premium domain available for registration</td></tr><tr><td>**unavailable** </td><td>domain is not available for registration</td></tr></tbody></table>

  
If &lt;status&gt; is "unavailable", then domain-register request will fail, though domain-transfer-\* and domain-renew (if domain is with Joker.com) are possible, of course.   
  
**domain-status-reason:** &lt;status-reason&gt;   
  
Provides human-readable description why domain is unavailable for registration, like *blocked*, *reserved*, *registered* etc.   
May be absent if registry does not provide specific reason. Should not be parsed as value is registry dependent and could be virtually anything.   
  
**domain-class:** &lt;class&gt;   
  
Specifies price-class. Anything but "standard" is considered "premium", though some registries use "tier-1", "premium", "BBB" etc.   
Mostly a hint, values except "standard" should not be interpreted as they have no useful meaning and vary among registries.   
  
**domain-price-&lt;type&gt;:** &lt;price&gt; &lt;currency&gt; &lt;period&gt;y   
  
Reports domain price, where &lt;type&gt; will be value provided in check-price parameter, i.e. create, renew, transfer, restore.

- &lt;price&gt; is the final price, i.e. amount that will be deducted from the user's account, considering all discounts, promos etc.
- &lt;currency&gt; is a 3-letter currency code, serves only as information.
- &lt;period&gt; is reported in years and suffixed by "y", like "5y", and it may be different from "period" parameter value (depends on registry), for instance when requested period is not available, too low or too high.   
    The price reported is valid only for specified period, i.e. if price is 100 for 2 years it does not necessarily mean that price for 1 year is 50, thus it only makes sense to check price for the period which will be used verbatim in subsequent request of specified &lt;type&gt;.

**domain-price-promo:** &lt;start&gt; &lt;end&gt;   
  
&lt;start&gt; and &lt;end&gt; are ISO timestamps in format like *2019-07-01T00:00:00.000Z*

For domains that have promotional pricing, this provides start and end timestamps of promotional period. Usually its mere presence means that promo-pricing is in effect, but to be sure values have to be checked explicitly.   
**If "domain-status" returned "premium" or "domain-class" returned anything but "standard", then the parameter *max-price* must be present in register/transfer/renew requests.**   
  
Full response example (web.blog):

```
    domain-status: unavailable <br></br>    domain-status-reason: blocked <br></br>    domain-class: standard <br></br>    domain-price-create: 8.21 USD 1y <br></br>    domain-price-promo: 2019-09-01T00:00:00.000Z 2019-12-31T23:59:59.000Z 
```

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">`<span style="font-size: small; font-family: courier new,courier;">https://dmapi.joker.com/request/domain-check?domain=example.com&auth-sid=<your-current-session-id></span>`</span>

<div id="bkmrk--3"><div class="syntaxhighlighter  plain" id="bkmrk--4"></div></div><div id="bkmrk--5"><div><div class="syntaxhighlighter  plain" id="bkmrk--6"></div></div></div><div id="bkmrk--7"><div class="syntaxhighlighter  plain" id="bkmrk--8"></div></div>

# Contacts

<p class="callout info">For a complete list of contact handle prefixes used across all TLDs, please refer to the [**Contact Prefix Reference Table**](https://joker.com/faq/books/reseller-documentation-en/page/tld-list-and-assosiated-contact-prefixes)</p>

### query-contact-list

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Accepts:**</span>

<table border="1" id="bkmrk-pattern-pattern-to-m" style="width: 635px;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">pattern</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;"> pattern to match (against handle)</span></td></tr><tr><td>*<span style="font-size: small;">from</span>*</td><td><span style="font-size: small;">start from this item in list</span></td></tr><tr><td>*<span style="font-size: small;">to</span>*</td><td><span style="font-size: small;">end by this item in list</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"><abbr class="glossary" title="Top Level Domain">tld</abbr></span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">limits output to contact handles which may be used with specified toplevel domain (<abbr class="glossary" title="Top Level Domain">tld</abbr>), like "com".</span></td></tr><tr><td>*<span style="font-size: small;">extended-format</span>*</td><td><span style="font-size: small;">provides additional information for every contact listed: name &amp; organization. May be "1" or "0", defaults to "0"</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> List of registered contacts (handles), one per line. </span>

<span style="font-size: small;">When "extended-format" is requested, output columns are separated by tabs ("\\t"), and "Columns" header provides column names. </span>

<span style="font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

`<span style="font-size: small; font-family: courier new,courier;">https://dmapi.joker.com/request/query-contact-list?pattern=coco-47*&<abbr class="glossary" title="Top Level Domain">tld</abbr>=com&auth-sid=<your-current-session-id></span>`

## contact-create

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span>

<table border="1" id="bkmrk-tld-target-tld-where" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"><abbr class="glossary" title="Top Level Domain">tld</abbr></span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">target <abbr class="glossary" title="Top Level Domain">TLD</abbr> where this contact is intended to be used.</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">name</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">full name (if empty, fname + lname will be used)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">fname</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">first name (required for .FI contacts)  
</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">lname</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">last name (required for .FI contacts)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">title</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">individual</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional) Y, Yes, N, No</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">organization</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional if individual)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">email</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">email address of the contact</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">address-1</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">street address</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">address-2</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">city</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">state</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">postal-code</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">country</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">ISO country code (2 letters)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">phone</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">fax</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(optional)</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">lang</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">language to use for .EU contacts</span></td></tr><tr><td>*app-purpose*

</td><td>required for .US contacts</td></tr><tr><td>*nexus-category*

</td><td>required for .US contacts</td></tr><tr><td>*nexus-category-country*</td><td>required for .US contacts</td></tr><tr><td>*account-type*</td><td>required for .UK contacts, if used as owner contact</td></tr><tr><td>*company-number*</td><td>required for .UK contacts with specific account types

</td></tr><tr><td>*orgid*</td><td>required for .SE/.NU contacts

</td></tr><tr><td>*vatid*</td><td>(optional) for .SE/.NU contacts

</td></tr><tr><td>*x-ficora-type*</td><td>required for .FI contacts

</td></tr><tr><td>*x-ficora-is-finnish*</td><td>(yes/no) required for .FI contacts</td></tr><tr><td>*x-ficora-registernumber* </td><td>required for .FI contacts, if ficora-type is company</td></tr><tr><td>*x-ficora-identity*</td><td>required for .FI contacts, if type is person and finnish</td></tr><tr><td>*x-ficora-birthdate*</td><td>required for .FI contacts, if type is persion and not finnish</td></tr><tr><td>*x-ficora-legalemail*</td><td>(optional) for .FI contacts</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Either "name" or "lname" and "fname" must be provided. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Fields **not** marked '(optional)' are mandatory (and must not be empty). </span>

Parameters "lname" and "fname", if provided, will be converted to "name" (simple concatenation of "fname" and "lname"), because registries support only "name" format. In general, use of "fname" and "lname" is deprecated, and support for these fields will be removed in version 1.2.

"**orgid**" represents Swedish personal or organisational number and is required for .SE/.NU contacts.

It starts with ISO 3166 Alpha-2 country code in square brackets. If the country code for Sweden is given \[SE\] a valid Swedish personal or organisational number must be given (6 digits, dash, 4 digits), otherwise 1 to 123 characters can follow.

If organization is empty and the country code for Sweden \[SE\] is given, orgid must be a personal number, not an organisational number.

"**vatid**" is optional for .SE/.NU contacts. It starts with a two letter country code (uppercase), followed by an optional space, followed by a country specific string containing digits 0-9, and letters a-z and A-Z, maximum 64 Chars.

**For .fi contacts:**

**"x-ficora-type"** is required for .fi contacts. The following values are accepted: privateperson, company, corporation, institution, politicalparty, township, government, publiccommunity

**"x-ficora-registernumber"** is required if x-ficora-type is set to "company".

**"x-ficora-is-finnish"** is always required for .fi contacts: yes = finnish company or person, no = not a finnish person or company

**"x-ficora-identity"** is required for .fi contacts, if x-ficora-type is set to 'privateperson' and x-ficora-is-finnish is set to 'yes'

**"x-ficora-birthdate"** is required for .fi contacts, if x-ficora-type is set to 'privateperson' and x-ficora-is-finnish is set to 'no' in the following date format "YYYY-MM-DD".

**For .uk contacts:**

**"account-type"** is a required for all .UK contacts which will be used as domain owner contacts. Possible values are:

<table border="1" id="bkmrk-value%C2%A0-meaning-ltd-u" style="border-collapse: collapse; width: 80%; border-width: 1px;"><colgroup><col style="width: 36.9063%;"></col><col style="width: 63.0616%;"></col></colgroup><thead><tr><td class="align-center">**Value** </td><td class="align-center">**Meaning**</td></tr></thead><tbody><tr><td align="left" height="21">LTD</td><td align="left">UK Limited Company</td></tr><tr><td align="left" height="21">PLC</td><td align="left">UK Public Limited Company</td></tr><tr><td align="left" height="21">PTNR</td><td align="left">UK Partnership</td></tr><tr><td align="left" height="21">STRA</td><td align="left">UK Sole Trader</td></tr><tr><td align="left" height="21">LLP</td><td align="left">UK Limited Liability Partnership</td></tr><tr><td align="left" height="21">IP</td><td align="left">UK Industrial/Provident Registered Company</td></tr><tr><td align="left" height="21">IND</td><td align="left">UK Individual (representing self)</td></tr><tr><td align="left" height="21">SCH</td><td align="left">UK School</td></tr><tr><td align="left" height="21">RCHAR</td><td align="left">UK Registered Charity</td></tr><tr><td align="left" height="21">GOV</td><td align="left">UK Government Body</td></tr><tr><td align="left" height="21">CRC</td><td align="left">UK Corporation by Royal Charter</td></tr><tr><td align="left" height="21">STAT</td><td align="left">UK Statutory Body</td></tr><tr><td align="left" height="21">OTHER</td><td align="left">UK Entity that does not fit into any of the above (e.g. clubs, associations, many universities)</td></tr><tr><td align="left" height="21">FIND</td><td align="left">Non-UK Individual (representing self)</td></tr><tr><td align="left" height="21">FCORP</td><td align="left">Non-UK Corporation</td></tr><tr><td align="left" height="21">FOTHER</td><td align="left">Non-UK Entity</td></tr></tbody></table>

By default, if **"account-type"** is not provided, value **"FIND"** or **"IND"** will be used  
 (dependent **"country"** value - for GB and UK it will be **"IND"**, for everything else **"FIND"**).  
   
**"company-number"** is required when "account-type" is one of: SCH, RCHAR, LTD, PLC, LLP, IP

#### Known extensions, grouped by TLD

**.be**

<table border="1" id="bkmrk-extension-value-mean" style="width: 80%; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr><th style="width: 12.7551%;">Extension</th><th style="width: 36.5115%;">Value</th><th style="width: 50.7015%;">Meaning</th></tr></thead><tbody><tr><td style="width: 12.7551%;">x-be-lang</td><td style="width: 36.5115%;">(en|fr|nl)</td><td style="width: 50.7015%;">Language for emails from the registry to contact.</td></tr><tr><td style="width: 12.7551%;">x-be-type</td><td style="width: 36.5115%;">(owner|admin|tech|licensee|onsite)</td><td style="width: 50.7015%;">type for the contact</td></tr><tr><td style="width: 12.7551%;">x-be-vatid</td><td style="width: 36.5115%;">  
</td><td style="width: 50.7015%;">Vatid of the company</td></tr></tbody></table>

**.ca**

<table border="1" id="bkmrk-extension-value-x-ca" style="width: 80%; border-collapse: collapse; border-style: solid; height: 59.2px; border-width: 1px;"><thead><tr style="height: 29.6px;"><th style="width: 16.7377%; height: 29.6px;">Extension</th><th style="width: 83.2319%; height: 29.6px;">Value</th></tr></thead><tbody><tr style="height: 29.6px;"><td style="width: 16.7377%; height: 29.6px;">x-ca-legal-type</td><td style="width: 83.2319%; height: 29.6px;">(ABO|ASS|CCO|CCT|EDU|GOV|HOP|INB|LAM|LGR|MAJ|OMK|PLT|PRT|RES|TDM|TRD|TRS)</td></tr></tbody></table>

**.cn**

<table border="1" id="bkmrk-extension-value-mean-1" style="width: 80%; height: 269.6px; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr style="height: 29.6px;"><th style="width: 20.4957%; height: 29.6px;">Extension</th><th style="width: 27.6454%; height: 29.6px;">Value</th><th style="width: 51.8351%; height: 29.6px;">Meaning</th></tr></thead><tbody><tr style="height: 46.4px;"><td style="width: 20.4957%; height: 46.4px;">x-cn-owner-id-number</td><td style="width: 27.6454%; height: 46.4px;">\[\\x20-\\xff\]{1,30}</td><td style="width: 51.8351%; height: 46.4px;">Passport ID or company ID from official docs</td></tr><tr style="height: 164px;"><td style="width: 20.4957%; height: 164px;">x-cn-owner-id-type</td><td style="width: 27.6454%; height: 164px;">(SFZ|HZ|GAJMTX|TWJMTX|WJLSFZ|GAJZZ|TWJZZ|JGZ|QT|ORG|QT|YYZZ|TYDM|BDDM|JDDWFW|SYDWFR|WGCZJG|SHTTFR|ZJCS|MBFQY|JJHFR|LSZY|WGZHWH|WLCZJG|SFJD|JWJG|SHFWJG|MBXXBX|YLJGZY|GZJGZY|BJWSXX|QTTYDM)</td><td style="width: 51.8351%; height: 164px;">for I only (SFZ, HZ, GAJMTX, TWJMTX, WJLSFZ, GAJZZ, TWJZZ, JGZ, QT) allowed!</td></tr><tr style="height: 29.6px;"><td style="width: 20.4957%; height: 29.6px;">x-cn-owner-type</td><td style="width: 27.6454%; height: 29.6px;">(E|I)</td><td style="width: 51.8351%; height: 29.6px;">E=Enterprise, I=Individual</td></tr></tbody></table>

**at, co.at, or.at**

<table border="1" id="bkmrk-extension-value-mean-2" style="width: 80%; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr><th style="width: 20.3488%;">Extension</th><th style="width: 48.7478%;">Value</th><th style="width: 30.8587%;">Meaning</th></tr></thead><tbody><tr><td style="width: 20.3488%;">x-atnic-type</td><td style="width: 48.7478%;">(privateperson|role|organisation)</td><td style="width: 30.8587%;">type for the contact</td></tr></tbody></table>

**.uk, .co.uk, .me.uk, .net.uk, .plc.uk, .org.uk, .ltd.uk**

<table border="1" id="bkmrk-extension-value-mean-3" style="width: 80%; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr><th style="width: 17.6684%;">Extension</th><th style="width: 41.8212%;">Value</th><th style="width: 40.4803%;">Meaning</th></tr></thead><tbody><tr><td style="width: 17.6684%;">x-nominet-trading-name</td><td style="width: 41.8212%;">\[\\x20-\\xff\]{1,50}</td><td style="width: 40.4803%;">The trading name of the organization</td></tr><tr><td style="width: 17.6684%;">x-nominet-company-no</td><td style="width: 41.8212%;">\[\\x20-\\xff\]{1,30}</td><td style="width: 40.4803%;">The registered company number</td></tr><tr><td style="width: 17.6684%;">x-nominet-type</td><td style="width: 41.8212%;">(LTD|PLC|PTNR|STRA|LLP|IP|IND|SCH|RCHAR|GOV|CRC|STAT|OTHER|FIND|FCORP|FOTHER)</td><td style="width: 40.4803%;">account type</td></tr></tbody></table>

**.de**

<table border="1" id="bkmrk-extension-value-mean-4" style="width: 80%; border-collapse: collapse; border-style: solid; height: 59.2px; border-width: 1px;"><thead><tr style="height: 29.6px;"><th style="width: 23.2005%; height: 29.6px;">Extension</th><th style="width: 35.693%; height: 29.6px;">Value</th><th style="width: 41.3444%; height: 29.6px;">Meaning</th></tr></thead><tbody><tr style="height: 29.6px;"><td style="width: 23.2005%; height: 29.6px;">x-de-type</td><td style="width: 35.693%; height: 29.6px;">(person|role|org)</td><td style="width: 41.3444%; height: 29.6px;">type for the contact</td></tr></tbody></table>

**.dk**

<table border="1" id="bkmrk-extension-value-mean-5" style="width: 80%; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr><th style="width: 23.9336%;">Extension</th><th style="width: 47.7043%;">Value</th><th style="width: 28.3295%;">Meaning</th></tr></thead><tbody><tr><td style="width: 23.9336%;">x-dk-user-id-number</td><td style="width: 47.7043%;">.\*</td><td style="width: 28.3295%;">user id for .dk domains</td></tr><tr><td style="width: 23.9336%;">x-dk-user-type</td><td style="width: 47.7043%;">(COMPANY|PERSON|PUBORG|ASSOCIATION)</td><td style="width: 28.3295%;">user type for .dk domains</td></tr></tbody></table>

**.eu, .xn--e1a4c, .xn--qxa6a**

<table border="1" id="bkmrk-extension-value-mean-6" style="width: 80%; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr><th style="width: 18.5891%;">Extension</th><th style="width: 39.7998%;">Value</th><th style="width: 41.5872%;">Meaning</th></tr></thead><tbody><tr><td style="width: 18.5891%;">x-eu-natural-person</td><td style="width: 39.7998%;">(true|false)</td><td style="width: 41.5872%;">if set it is used</td></tr><tr><td style="width: 18.5891%;">x-eu-country-of-citizenship</td><td style="width: 39.7998%;">\[A-Z\]{2,2}</td><td style="width: 41.5872%;">country code</td></tr><tr><td style="width: 18.5891%;">x-eu-lang</td><td style="width: 39.7998%;">(bg|cs|da|de|el|en|es|et|fi|fr|ga|hr|hu|it|lt|lv|mt|nl|pl|pt|ro|sk|sl|sv)</td><td style="width: 41.5872%;">Sets the domain owners language displayed in the EURid WHOIS.</td></tr><tr><td style="width: 18.5891%;">x-eu-type</td><td style="width: 39.7998%;">(owner|admin|onsite)</td><td style="width: 41.5872%;">type for the contact</td></tr></tbody></table>

**.fi**

<table border="1" id="bkmrk-extension-value-mean-7" style="width: 80%; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr><th style="width: 25.8878%;">Extension</th><th style="width: 36.2922%;">Value</th><th style="width: 37.7898%;">Meaning</th></tr></thead><tbody><tr><td style="width: 25.8878%;">x-ficora-birthdate</td><td style="width: 36.2922%;">\\d{4}-\\d{2}-\\d{2}</td><td style="width: 37.7898%;">birthdate for owner contact</td></tr><tr><td style="width: 25.8878%;">x-ficora-identity</td><td style="width: 36.2922%;">(\[\\w\\-\]{5,20})</td><td style="width: 37.7898%;">identity number of private individuals</td></tr><tr><td style="width: 25.8878%;">x-ficora-is-finnish</td><td style="width: 36.2922%;">(yes|no)</td><td style="width: 37.7898%;">Is it a Finnish person or company?</td></tr><tr><td style="width: 25.8878%;">x-ficora-legalemail</td><td style="width: 36.2922%;">!@email</td><td style="width: 37.7898%;">if type=company, it must be present</td></tr><tr><td style="width: 25.8878%;">x-ficora-registernumber</td><td style="width: 36.2922%;">.{3,30}</td><td style="width: 37.7898%;">registration number for companies</td></tr><tr><td style="width: 25.8878%;">x-ficora-role</td><td style="width: 36.2922%;">(billing|admin|tech|owner)</td><td style="width: 37.7898%;">role of contact</td></tr><tr><td style="width: 25.8878%;">x-ficora-type</td><td style="width: 36.2922%;">(association|privateperson|company|corporation|institution|politicalparty|township|government|publiccommunity|municipality)</td><td style="width: 37.7898%;">type of contact</td></tr></tbody></table>

**.fr**

<table border="1" id="bkmrk-extension-value-mean-8" style="width: 80%; height: 507.2px; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr style="height: 29.6px;"><th style="width: 27.9856%; height: 29.6px;">Extension</th><th style="width: 23.647%; height: 29.6px;">Value</th><th style="width: 48.3374%; height: 29.6px;">Meaning</th></tr></thead><tbody><tr style="height: 46.4px;"><td style="width: 27.9856%; height: 46.4px;">x-fr-announce</td><td style="width: 23.647%; height: 46.4px;">\\d+</td><td style="width: 48.3374%; height: 46.4px;">"The ""announce"" attribute shows the number of the announcement(e.g. 5). Only digits allowed"</td></tr><tr style="height: 29.6px;"><td style="width: 27.9856%; height: 29.6px;">x-fr-birthcity</td><td style="width: 23.647%; height: 29.6px;">\[\\x20-\\xff\]{1,30}</td><td style="width: 48.3374%; height: 29.6px;">Only for natural persons born in France...</td></tr><tr style="height: 29.6px;"><td style="width: 27.9856%; height: 29.6px;">x-fr-birthdate</td><td style="width: 23.647%; height: 29.6px;">\\d{4}-\\d{2}\\-d{2}</td><td style="width: 48.3374%; height: 29.6px;">The registrant's birthdate</td></tr><tr style="height: 29.6px;"><td style="width: 27.9856%; height: 29.6px;">x-fr-birthpc</td><td style="width: 23.647%; height: 29.6px;">\[\\x20-\\xff\]{1,30}</td><td style="width: 48.3374%; height: 29.6px;">postcode of the place of birth</td></tr><tr style="height: 29.6px;"><td style="width: 27.9856%; height: 29.6px;">x-fr-birthplace</td><td style="width: 23.647%; height: 29.6px;">\[A-Z\]{2}</td><td style="width: 48.3374%; height: 29.6px;">birthplace country code</td></tr><tr style="height: 29.6px;"><td style="width: 27.9856%; height: 29.6px;">x-fr-date-association</td><td style="width: 23.647%; height: 29.6px;">\\d{4}-\\d{2}\\-d{2}</td><td style="width: 48.3374%; height: 29.6px;">date of association</td></tr><tr style="height: 29.6px;"><td style="width: 27.9856%; height: 29.6px;">x-fr-date-publication-jo</td><td style="width: 23.647%; height: 29.6px;">\\d{4}-\\d{2}\\-d{2}</td><td style="width: 48.3374%; height: 29.6px;">date of publication JO</td></tr><tr style="height: 29.6px;"><td style="width: 27.9856%; height: 29.6px;">x-fr-duns</td><td style="width: 23.647%; height: 29.6px;">\[\\x20-\\xff\]{1,30}</td><td style="width: 48.3374%; height: 29.6px;">Company DUNS</td></tr><tr style="height: 29.6px;"><td style="width: 27.9856%; height: 29.6px;">x-fr-local</td><td style="width: 23.647%; height: 29.6px;">\[\\x20-\\xff\]{1,30}</td><td style="width: 48.3374%; height: 29.6px;">Company Local</td></tr><tr style="height: 46.4px;"><td style="width: 27.9856%; height: 46.4px;">x-fr-numero-de-page-announce-jo</td><td style="width: 23.647%; height: 46.4px;">\\d+</td><td style="width: 48.3374%; height: 46.4px;">page number of announcement</td></tr><tr style="height: 29.6px;"><td style="width: 27.9856%; height: 29.6px;">x-fr-restrict-pub</td><td style="width: 23.647%; height: 29.6px;">\\d{1}</td><td style="width: 48.3374%; height: 29.6px;">0=show, 1=do not show</td></tr><tr style="height: 29.6px;"><td style="width: 27.9856%; height: 29.6px;">x-fr-siren-or-siret</td><td style="width: 23.647%; height: 29.6px;">\[\\x20-\\xff\]{1,30}</td><td style="width: 48.3374%; height: 29.6px;">SIREN/SIRET number</td></tr><tr style="height: 29.6px;"><td style="width: 27.9856%; height: 29.6px;">x-fr-trademark</td><td style="width: 23.647%; height: 29.6px;">\[\\x20-\\xff\]{1,30}</td><td style="width: 48.3374%; height: 29.6px;">Trademark number</td></tr><tr style="height: 29.6px;"><td style="width: 27.9856%; height: 29.6px;">x-fr-vatid</td><td style="width: 23.647%; height: 29.6px;">\[\\x20-\\xff\]{1,30}</td><td style="width: 48.3374%; height: 29.6px;">Company VAT ID</td></tr><tr style="height: 29.6px;"><td style="width: 27.9856%; height: 29.6px;">x-fr-waldec</td><td style="width: 23.647%; height: 29.6px;">\\d+</td><td style="width: 48.3374%; height: 29.6px;">Waldec ID</td></tr></tbody></table>

**.ie**

<table border="1" id="bkmrk-extension-value-mean-9" style="width: 80%; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr><th style="width: 15.6436%;">Extension</th><th style="width: 52.2944%;">Value</th><th style="width: 32.0322%;">Meaning</th></tr></thead><tbody><tr><td style="width: 15.6436%;">x-ie-applicant</td><td style="width: 52.2944%;">.\*</td><td style="width: 32.0322%;">Name of applicant</td></tr><tr><td style="width: 15.6436%;">x-ie-applicant-class</td><td style="width: 52.2944%;">(Company|Business Owner|Club/Band/Local Group| School/College|State Agency|Blogger/Other)</td><td style="width: 32.0322%;"> </td></tr></tbody></table>

**.it**

<table border="1" id="bkmrk-extension-value-x-it" style="width: 80%; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr><th style="width: 72.9074%;">Extension</th><th style="width: 27.063%;">Value</th></tr></thead><tbody><tr><td style="width: 72.9074%;">x-it-consentforpublishing</td><td style="width: 27.063%;">\[0|1\]</td></tr><tr><td style="width: 72.9074%;">x-it-entity-type</td><td style="width: 27.063%;">\[1|2|3|4|5|6|7\]</td></tr><tr><td style="width: 72.9074%;">x-it-pin</td><td style="width: 27.063%;">(.\*)</td></tr><tr><td style="width: 72.9074%;">x-it-sect3-liability</td><td style="width: 27.063%;">\[0|1\]</td></tr><tr><td style="width: 72.9074%;">x-it-sect5-personal-data-for-registration</td><td style="width: 27.063%;">\[0|1\]</td></tr><tr><td style="width: 72.9074%;">x-it-sect6-personal-data-for-diffusion</td><td style="width: 27.063%;">\[0|1\]</td></tr><tr><td style="width: 72.9074%;">x-it-sect7-explicit-acceptance</td><td style="width: 27.063%;">\[0|1\]</td></tr></tbody></table>

**.nl**

<table border="1" id="bkmrk-extension-value-mean-10" style="width: 80%; border-collapse: collapse; border-style: solid; height: 156px; border-width: 1px;"><thead><tr style="height: 29.6px;"><th style="width: 20.5257%; height: 29.6px;">Extension</th><th style="width: 40.3193%; height: 29.6px;">Value</th><th style="width: 39.1253%; height: 29.6px;">Meaning</th></tr></thead><tbody><tr style="height: 80px;"><td style="width: 20.5257%; height: 80px;">x-nl-legal-form</td><td style="width: 40.3193%; height: 80px;">(ANDERS|BGG|BRO|BV|BVI/O|COOP|CV|EENMANSZAAK|EESV|KERK|MAATSCHAP|NV|OWM|PERSOON|REDR|STICHTING|VERENIGING|VOF)</td><td style="width: 39.1253%; height: 80px;">legal form of the contact</td></tr><tr style="height: 46.4px;"><td style="width: 20.5257%; height: 46.4px;">x-nl-legal-form-registration-no</td><td style="width: 40.3193%; height: 46.4px;">\[\\x20-\\xff\]{1,30}</td><td style="width: 39.1253%; height: 46.4px;">registration number of the company.</td></tr></tbody></table>

**.nu**

<table border="1" id="bkmrk-extension-value-mean-11" style="width: 80%; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr><th style="width: 22.1566%;">Extension</th><th style="width: 27.5726%;">Value</th><th style="width: 50.2216%;">Meaning</th></tr></thead><tbody><tr><td style="width: 22.1566%;">x-iinu-orgid</td><td style="width: 27.5726%;">\[\\x20-\\xff\]{1,30}</td><td style="width: 50.2216%;">organisation id for the contact</td></tr><tr><td style="width: 22.1566%;">x-iinu-vatid</td><td style="width: 27.5726%;">\[\\x20-\\xff\]{1,30}</td><td style="width: 50.2216%;">vatid for the contact</td></tr></tbody></table>

**.se, .pp.se**

<table border="1" id="bkmrk-extension-value-mean-12" style="width: 80%; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr><th style="width: 21.5774%;">Extension</th><th style="width: 27.7778%;">Value</th><th style="width: 50.5952%;">Meaning</th></tr></thead><tbody><tr><td style="width: 21.5774%;">x-iise-vatid</td><td style="width: 27.7778%;">\[\\x20-\\xff\]{1,30}</td><td style="width: 50.5952%;">vatid for the contact</td></tr><tr><td style="width: 21.5774%;">x-iise-orgid</td><td style="width: 27.7778%;">\[\\x20-\\xff\]{1,30}</td><td style="width: 50.5952%;">organisation id for the contact</td></tr></tbody></table>

**.sk**

<table border="1" id="bkmrk-extension-value-mean-13" style="width: 80%; height: 105.6px; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr style="height: 29.6px;"><th style="width: 30.1545%; height: 29.6px;">Extension</th><th style="width: 17.2311%; height: 29.6px;">Value</th><th style="width: 52.5847%; height: 29.6px;">Meaning</th></tr></thead><tbody><tr style="height: 46.4px;"><td style="width: 30.1545%; height: 46.4px;">x-sk-contact-ident-number</td><td style="width: 17.2311%; height: 46.4px;">.\*</td><td style="width: 52.5847%; height: 46.4px;">commercial registration number for companies; personal ID for natural persons</td></tr><tr style="height: 29.6px;"><td style="width: 30.1545%; height: 29.6px;">x-sk-contact-legal-form</td><td style="width: 17.2311%; height: 29.6px;">(CORP|PERS)</td><td style="width: 52.5847%; height: 29.6px;">CORP=Company/org; PERS=natural person</td></tr></tbody></table>

**.us**

<table border="1" id="bkmrk-extension-value-mean-14" style="width: 80%; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr><th style="width: 37.4618%;">Extension</th><th style="width: 27.9052%;">Value</th><th style="width: 34.5948%;">Meaning</th></tr></thead><tbody><tr><td style="width: 37.4618%;">x-us-app-purpose</td><td style="width: 27.9052%;">\[Pp\]\[12345\]</td><td style="width: 34.5948%;">.us purpose of contact</td></tr><tr><td style="width: 37.4618%;">x-us-nexus-category</td><td style="width: 27.9052%;">(\[Cc\])(11|12|21|31|32)</td><td style="width: 34.5948%;">.us nexus category</td></tr><tr><td style="width: 37.4618%;">x-us-nexus-category-country</td><td style="width: 27.9052%;">!@country</td><td style="width: 34.5948%;">.us nexus category country</td></tr></tbody></table>

**.xxx**

<table border="1" id="bkmrk-extension-value-mean-15" style="width: 80%; border-collapse: collapse; border-style: solid; border-width: 1px;"><thead><tr><th style="width: 37.6185%;">Extension</th><th style="width: 24.4372%;">Value</th><th style="width: 37.9147%;">Meaning</th></tr></thead><tbody><tr><td style="width: 37.6185%;">x-xxx-membership-token</td><td style="width: 24.4372%;">\[\\x20-\\xff\]{1,30}</td><td style="width: 37.9147%;">Registrar tag for domains</td></tr></tbody></table>

**Please note:**

- Parameters listed here (except "<abbr class="glossary" title="Top Level Domain">tld</abbr>") may be used (or are required) in other requests, this is indicated by referring to "Contact fields".
- "lang" must contain two-letter ISO country (language) code, and is only required when creating .EU contacts. The purpose is to specify language to be used in notifications emails, sent from EURid. Please note - this field cannot be modified later, and the default is 'EN' (English)!
- "app-purpose", "nexus-category" and "nexus-category-contry" are required only when creating .US contacts, and cannot be modified later.

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">`<span style="font-size: small; font-family: courier new,courier;">https://dmapi.joker.com/request/contact-create?<abbr class="glossary" title="Top Level Domain">tld</abbr>=com&name=John Doe&email=johnd@someisp.com&address-1=Smartroad 1&city=Smalltown&postal-code=40122&country=US&phone=+1.422.8001&auth-sid=<your-current-session-id</span>`</span>

## contact-modify

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span>

<table border="1" id="bkmrk-handle-contact-handl" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">handle</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">contact handle to modify.</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Accepts:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> Field names exactly like in contact-create request, except that omitted fields won't be modified. That is, if you specify a field, it will be used as a new value, if you omit it, the old value will remain. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">The field "<abbr class="glossary" title="Top Level Domain">tld</abbr>" is not relevant for this request and will be ignored if present. </span>

## contact-delete

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span>

<table border="1" id="bkmrk-handle-contact-handl-1" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> handle </span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;"> contact handle to delete </span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">With this request you can delete previously registered contacts </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

`<span style="font-size: small; font-family: courier new,courier;">https://dmapi.joker.com/request/contact-delete?handle=coco-4711&auth-sid=<your-current-session-id></span>`

# Nameservers

## query-ns-list

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Accepts:**</span>

<table border="1" id="bkmrk-pattern-pattern-to-m" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">pattern</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">pattern to match (against host name, like "ns.dom\*")</span></td></tr><tr><td>*<span style="font-size: small;">full</span>*

</td><td><span style="font-size: small;">include IPs if non-zero (0 or 1)</span>

</td></tr></tbody></table>

**<span style="font-size: small;"> </span><span style="font-size: small;">Returns:</span>**

<span style="font-size: small;">List of registered name servers, one per line.</span>

<span style="font-size: small;"> If "full" is non-zero, then the list will include IP addresses, IPv4 (2nd column) and IPv6 (3rd column).</span>

<span style="font-size: small;">Columns will be separated by tab ("\\t") character. If specific IP is not present (say, there is only IPv4 or IPv6), it will be listed as "-". </span>

<span style="font-size: small;"> </span><span style="font-size: small;">Example of list with IPs: </span>

<div id="bkmrk-1-2-ns.example.com-1"><div class="syntaxhighlighter  plain" id="bkmrk-1-2-ns.example.com-1-1"><table border="0" cellpadding="0" cellspacing="0"><tbody><tr><td class="gutter"><div class="line number1 index0 alt2">1</div><div class="line number2 index1 alt1">2</div></td><td class="code"><div class="container"><div class="line number1 index0 alt2">`ns.example.com 1.2.3.4 - `</div><div class="line number2 index1 alt1">`ns6.example.com - FE80:0000:0000:0000:0202:B3FF:FE1E:8329`</div></div></td></tr></tbody></table>

</div></div><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">`<span style="font-size: small; font-family: courier new,courier;">  https://dmapi.joker.com/request/query-ns-list?pattern=*my-own-ns*&full=1&auth-sid=<your-current-session-id></span>`</span>

## ns-create

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span>

<table border="1" id="bkmrk-host-full-qualified-" style="width: 80%;"><tbody><tr><td style="width: 50.2084%;">*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">host</span>*</td><td style="width: 49.9108%;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Full qualified host name</span></td></tr><tr><td style="width: 50.2084%;">*<span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">ip</span></span>*</td><td style="width: 49.9108%;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">IPv4 address (must not be from IANA's reserved range)</span>

</td></tr><tr><td style="width: 50.2084%;">*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">ipv6</span>*</td><td style="width: 49.9108%;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">IPv6 address (short notation like fec0::17 is accepted)</span></td></tr></tbody></table>

  
<span style="font-family: arial,helvetica,sans-serif; font-size: small;">With this request a new nameserver can be registered with the registry. This is needed to use a nameserver with glue records.</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Either an IPv4 or IPv6 address is required.</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Multiple IPs could be specified using "," (comma) as a separator, like "ip=1.2.3.4,4.5.6.7"</span>

## ns-modify or host-modify

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span>

<table border="1" id="bkmrk-host-full-qualified--1" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">host</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">full qualified host name</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">ip</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">IPv4 address (must not be from IANA's reserved range)</span>

</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">ipv6</span>*</td><td><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">IPv6 address (short notation </span></span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">like 'fec0::17' </span><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">is accepted)</span></span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">With this request you can modify the IP address of a registered nameserver. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Multiple IPs could be specified using "," (comma) as a separator, like "ip=1.2.3.4,4.5.6.7"</span>

## ns-delete or host-delete

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span>

<table border="1" id="bkmrk-host-full-qualified--2" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">host </span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;"> Full qualified host name </span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">With this request you can delete a registered nameserver.</span>

# Modify Zonedata

## dns-zone-list

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Accepts:**  
</span>

<table border="1" id="bkmrk-pattern-pattern-to-m" style="width: 387px;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> pattern</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Pattern to match (globbing, like "dom\*")</span></td></tr></tbody></table>

**<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Returns:</span>**

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">List zones (domains) which are managed and served by Joker.com name  
servers. Zones are listed one per line.</span>

## dns-zone-get

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span>

<table align="left" border="1" cellpadding="2" cellspacing="0" id="bkmrk-domain-zone-%28domain%29" style="width: 80%;"><tbody><tr align="left" valign="middle"><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain</span>*</td><td align="left" valign="middle"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Zone (domain) name to fetch data from</span></td></tr></tbody></table>

**Accepts:**

<table border="1" id="bkmrk-include-defaults-if-" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>include-defaults</td><td>If specified with value "1", the zone will always include default values (which are omitted otherwise)</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Returns list of zone records. </span>

The format of zone is as follows (one record per line):

```
<label> <type> <pri> <target> <ttl> <valid-from> <valid-to> <parameters(s)> 
```

Where:<span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
</span>

<table border="1" cellpadding="2" cellspacing="0" id="bkmrk-label-subdomain%2Fredi" style="height: 181px; width: 542px;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">label</span>*

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">subdomain/redirection label, relative to current zone, or '@' (which means current zone name)</span>

</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> type</span>*

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">record type (A, AAAA, MX, CNAME, URL, MAILFW, TXT, NAPTR, DYNA, DYNAAAA, SRV, CAA)</span>

</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> pri</span>*

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">numeric value, meaningful only for types MX, NAPTR and SRV, must be 0 for all other types</span>

</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> target</span>*

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">record target/value. Must be quoted if contains spaces</span>

</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> ttl</span>*

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">record TTL (time to live) in seconds</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">if empty, the default is 86400 (1 day)</span>

</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> valid-from</span>*

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">record is not valid before this time (UNIX timestamp) or 0</span>

</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> valid-to</span>*

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">record is not valid after this time (UNIX timestamp) or 0</span>

</td></tr><tr><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;"> *parameters*    
</span>

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">record-specific parameter(s)</span>

</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">All values from "name" to "ttl" are mandatory for every record.  
  
&lt;valid-to&gt; and &lt;valid-from&gt; are not implemented yet, so usually are 0, and may be omitted if there are no other parameters required.  
  
&lt;parameters(s)&gt; are record dependent, used in NAPTR, MAILFW, FRAME and URL records.  
  
&lt;ttl&gt; must be at least 60 for all records except NAPTR and SVC, where it can be 0 (meaning: no caching). For MAILFW/URL/FRAME &lt;ttl&gt; is irrelevant and assumed to be 60 seconds (i.e., any change will be  
in effect within 60 seconds from zone change).  
  
&lt;pri&gt; preference value for MX records, priority/weight for SRV records and order/preference for NAPTR records. For any other record, the value must be 0.  
  
</span> Examples of zone records:<span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;"><span style="font-family: courier new,courier;">www A 0 127.0.0.1 86400  
www AAAA 0 fec0::17 86400  
</span>  
<span style="font-family: courier new,courier;"> @ MX 10 mail.example.com. 86400  
  
redirect URL 0 [http://joker.com](https://joker.com//) 86400  
</span></span>

Sets redirection from redirect.joker.com to [http://joker.com](https://joker.com//) (assuming that current zone is "joker.com").  
<span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
<span style="font-family: courier new,courier;"> frame FRAME 0 [http://joker.com](https://joker.com//) 86400 0 0 "Header: Frame-Forward" "head" "title" "body"  
</span>  
Sets frame-based redirection similar to URL redirection.  
  
For FRAME record, extra parameters are as follows:  
  
</span>

- <span style="font-family: arial,helvetica,sans-serif; font-size: small;"> Extra HTTP headers. (newlines may be escaped as \\n)</span>
- <span style="font-family: arial,helvetica,sans-serif; font-size: small;"> Extra text placed in &lt;head&gt;&lt;/head&gt; section of generated HTML.</span>
- <span style="font-family: arial,helvetica,sans-serif; font-size: small;"> Title text (&lt;title&gt;&lt;/title&gt;) of generated HTML.</span>
- <span style="font-family: arial,helvetica,sans-serif; font-size: small;"> Body text (used for &lt;noframes&gt; section)</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">  
<span style="font-family: courier new,courier;"> username MAILFW 0 <redirected@example.com> 86400 0 0 1  
</span>  
This MAILFW records makes redirection of mail sent to <username@joker.com> (assuming that current zone name is "joker.com") to <redirected@example.com>, extra parameter ("1") specifies that spam-filtering should be used.  
  
<span style="font-family: courier new,courier;"> naptr NAPTR 10/100 replacement 86400 0 0 "flags" "service" "regex"</span>  
  
This NAPTR record has order 10 and preference 100. Only one of "replacement" or "regex" may be  
specified, if "regex" is specified, "replacement" must be "." (without quotes), if "replacement"  
is specified, "regex" must be empty string. Quotes are mandatory for all extra parameters.  
For details please consult RFC 2915, or look here: [http://de.wikipedia.org/wiki/NAPTR](http://de.wikipedia.org/wiki/NAPTR)  
  
<span style="font-family: courier new,courier;"> \_ldap.\_tcp SRV 10/100 ldap.example.com:389 60</span>  
  
This SRV record has priority 10, weight 100, target "ldap.example.com" and port "389" with TTL 60 seconds. Please consult RFC 2782 for details.  
  
<span style="font-family: courier new,courier;"> txt TXT 0 "key=value" 86400</span>  
  
Quoting of values for TXT records is mandatory.  
  
</span>

<span style="font-family: 'courier new', courier; font-size: small;">caa CAA 0 issue "letsencrypt.org" 86400  
caa CAA 0 issuewild "letsencrypt.org" 86400  
</span>

<span style="font-family: 'courier new', courier; font-size: small;">caa CAA 0 iodef "mailto:certissues@example.com" 86400</span>

<span style="font-family: arial, helvetica, sans-serif; font-size: small;">For more information about CAA records please check [Wikipedia](https://en.wikipedia.org/wiki/DNS_Certification_Authority_Authorization "CAA record").</span><span style="font-size: 13px;"> </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"><span style="font-family: courier new,courier;">www CNAME 0 example.com. 86400</span>  
  
Two special record types, DYNA and DYNAAAA, are used in case if DynDNS is active.  
They have same meaning as corresponding "A" and "AAAA" records, except that their targets may be updated using Joker DynDNS service.  
  
To enable/disable DynDNS service, and to define username/password used to access it, the record format is as follows:  
  
<span style="font-family: courier new,courier;"> $dyndns=yes:username:password</span>  
  
username/password may not contain spaces or colon (":") characters. If "no" is specified instead of "yes", DynDNS will be turned off (i.e. DYN\* entries will have no effect).  
  
In case if there are any errors, zone modification will not be accepted. All errors will be reported for every erroneous line, so if there are more than one, you will be able to see all detected errors.</span>

## dns-zone-put

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span>

<table align="left" border="1" cellpadding="2" cellspacing="0" id="bkmrk-domain-zone-%28domain%29-1" style="width: 80%;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain</span>*

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Zone (domain) name to store data to</span>

</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">zone</span>*

</td><td align="left" valign="middle"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">URL encoded zone data</span>

</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Replace current zone for provided domain with specified value.</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> Field "zone" will be parsed as multiline text (so usual line erminators are expected).</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Warning: This request will overwrite current zone, i.e. all current ecords will be replaced by new records.**  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">The format of zone is as follows (one record per line):  
</span>

```
<label> <type> <pri> <target> <ttl> <valid-from> <valid-to> <parameters(s)><br></br>
```

# Rights and Roles

## grants-list

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span>

<table border="1" id="bkmrk-domain-full-qualifie" style="width: 594px;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain</span>*

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Full qualified domain name</span>

</td></tr></tbody></table>

**<span style="font-size: small;">Accepts:</span>**

<table border="1" id="bkmrk-showkey-show-invitat" style="width: 594px;"><tbody><tr><td>*<span style="font-size: small;">showkey</span>*</td><td><span style="font-size: small;">Show invitation access key</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Get a list of active and pending grants. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Returns lines in the following format (space-separated): </span>

```
invitation <nr> <scope> <key> domain <domain-name> <role> - - - <invitee-email> <nick-name> grant <nr> <scope> domain <domain-name> <role> <inviter-username> <invitee-username> <invitee-userid> <invitee-email> <nick-name> 
```

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Where**: </span>

<table border="1" id="bkmrk-%3Cnr%3E-record-number-%3C" style="width: 623px; height: 176px;"><tbody><tr><td>&lt;nr&gt;</td><td>record number</td></tr><tr><td>&lt;scope&gt; </td><td>Grant/Invite id (used to uniquely identify records for revocation)</td></tr><tr><td>&lt;key&gt;</td><td>Invitation access key, present only when "showkey" is non-zero; it has meaning only for pending invitations, and always is "-" for grants</td></tr><tr><td>&lt;domain-name&gt;</td><td>domain name (identical to domain in request)</td></tr><tr><td>&lt;role&gt;</td><td>one of @admin/@billing/@tech/@creator</td></tr><tr><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">&lt;inviter-username&gt;</span></td><td>y<span style="font-family: arial,helvetica,sans-serif; font-size: small;">our username</span> (owner of the domain)</td></tr><tr><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">&lt;invitee-username&gt;</span></td><td>u<span style="font-family: arial,helvetica,sans-serif; font-size: small;">sername of invited user</span></td></tr><tr><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">&lt;invitee-userid&gt;   
</span></td><td>\[leave empty\] u<span style="font-family: arial,helvetica,sans-serif; font-size: small;">ser-ID of invited user </span> </td></tr><tr><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">&lt;nick-name&gt;</span></td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">name or comment you want to assign to this role</span></td></tr></tbody></table>

## grants-invite

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Request parameters:**</span>

<table border="1" id="bkmrk-name-value-mandatory" style="width: 549px; height: 128px;"><tbody><tr><th scope="col" style="text-align: left;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">name</span></th><th scope="col" style="text-align: left;"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">value</span></th><th scope="col"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">mandatory</span>

</th></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Full qualified domain name</span></td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;"> yes</span>

</td></tr><tr><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">*email*  
</span></td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Email of user to be invited to accept a role for 'domain'  
</span>

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;"> yes</span>

</td></tr><tr><td>*<span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">role</span></span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Role offered (@admin/@billing/@tech/@creator)</span>

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;"> yes</span>

</td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">client-uid </span>*

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">receiving Joker.com user id as shown on Joker.com - also conforms to reseller-id </span>

</td><td> <span style="font-family: arial,helvetica,sans-serif; font-size: small;">no</span>

</td></tr><tr><td><span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">*nick-name*</span></span></td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Name or comment for this role/grant for later identification (defaults to email)</span>

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;"> no</span>

</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">With this request you can assign 'Roles' (permissions) of domains to other Joker.com users. The special role "creator" is an equivalent to an **internal transfer** of that domain to another Joker.com user. In this case, the domain is **assigned** to the receiving account's portfolio, including all rights and permissions on this domain.</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">There are two variants to use this functionality: If the **client-uid** (**Joker.com user account id**) is given, and the client-uid **matches** the **associated user's email address** in our system, the role is **applied immediately** - there will be no request for confirmation on the receiver's side. In case the client-uid is not given, but only the email address, the transaction has to be acknowledged by the receiving user. For this, he will get an email ('invitation'), containing a link and a key. Either the link has to be clicked, or the key has to be applied using Joker.com (=&gt; Transfer). This can also be used for **users which do not yet have a Joker.com account**.</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Returns status only (ok or not). Email is sent if request was succesfull.</span>

## grants-revoke

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span>

<table border="1" id="bkmrk-domain-full-qualifie-1" style="width: 607px;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">full qualified domain name</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">role</span>*

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Role to be revoked from domain </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">(@admin/@billing/@tech/@creator)</span>

</td></tr><tr><td>*<span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">scope</span></span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">identifier from 'grants-list' request  
</span>

</td></tr><tr><td>*<span style="font-size: small;"><span style="font-family: arial,helvetica,sans-serif;">type</span></span>*

</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">type of the record to revoke - "grant" or "invitation"</span>

</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Deletes an issued grant (permission) of a domain, or a pending invitation for a grant.   
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Returns status only (ok or not). Email is sent if request was succesfull.</span>

# Other Requests

## query-object

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Accepts:**</span>

<table border="1" id="bkmrk-domain%C2%A0%C2%A0-domain-name" style="width: 535px; height: 64px;"><tbody><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">domain   
</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Domain name   
</span></td><td rowspan="3"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Exactly one of those must be specified. Only objects registered with Joker.com may be queried. </span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">contact</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Contact handle</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">host</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Nameserver</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> Information about specified object (similar to whois), in format "key: value". </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> This request is **deprecated** - please use ' query-whois' instead. </span>

## query-whois

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Accepts:**</span>

<table border="1" id="bkmrk-domain%C2%A0%C2%A0-domain-name-1" style="width: 541px; height: 64px;"><tbody><tr><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">*domain*    
</span></td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Domain name</span></td><td rowspan="3"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Exactly one of those must be specified. Only objects registered with Joker.com may be queried. </span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">contact</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Contact handle</span></td></tr><tr><td>*<span style="font-family: arial,helvetica,sans-serif; font-size: small;">host</span>*</td><td><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Nameserver</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns**: </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Information about specified object (similar to whois), in the format "key: value". </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">The difference to the *query-object* request is, that this request reflects actual (live) data in Joker.com database, while *query-object* may show data which not yet up-to-date. </span>

## wa-email-list

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Lists all domains and owner emails **of domains from your portfolio** which are **pending** **whois (email) verification**. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">For Whois validation, the email address of the owner contact of a newly created, transfered or modifed <abbr class="glossary" title="generic Top Level Domain">gTLD</abbr> has to be verified.This verification is done by sending an email to the owner contact, which contains a unique key in a link. When this link is clicked, the related email address is set to "validated".  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">For full ICANN policy, please see [Whois-Validation](https://joker.com/goto/icann_ra_whois).  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span> Nothing

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns**: </span>

`<span style="font-family: courier new,courier;"><span style="font-size: small;">  email-address<TAB>domain-name<TAB>verification-expiration-date</span></span>`

```
  email-address<TAB>domain-name<TAB>verification-expiration-date
```

<span style="font-size: small; font-family: arial,helvetica,sans-serif;"> </span><span style="font-size: small; font-family: arial,helvetica,sans-serif;">**Where**:</span>

<table border="0" cellspacing="6" id="bkmrk-email-address%C2%A0-email"><tbody><tr><td><div><span style="font-size: small; font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">email-address</span> </span></div></td><td><span style="font-size: small; font-family: arial,helvetica,sans-serif;">email address of the domain owner which is pending verification</span></td></tr><tr><td><span style="font-size: small; font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">domain-name</span></span></td><td><span style="font-size: small; font-family: arial,helvetica,sans-serif;">domain name where email is the owner</span></td></tr><tr><td><span style="font-size: small; font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">verification-expiration-date   
</span></span></td><td><span style="font-size: small; font-family: arial,helvetica,sans-serif;"> verification deadline, i.e. if by this date and time (specified in standard ISO format) email is not positively verified, the domain name listed may be deactivated </span></td></tr></tbody></table>

<div id="bkmrk-example%3A"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span></div><div id="bkmrk-%C2%A0-https%3A%2F%2Fdmapi.joke">`<span style="font-size: small; font-family: courier new,courier;">  https://dmapi.joker.com/request/wa-email-list?auth-sid=<your-current-session-id></span>`</div>## wa-email-details

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Returns email **verification status** and the **associated domain** for provided verification key (whois verification, email validation).If there is more than one domain using the email address to be verified, output will have one line per domain.</span><span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">For full ICANN policy, please see [Whois-Validation](https://joker.com/goto/icann_ra_whois).</span><span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span>

**<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Requires:</span>**

`<span style="font-family: courier new,courier; font-size: small;">key Verification key sent to owner by verification email</span>`

  
<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns**: </span>

`<span style="font-size: small; font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">status<TAB>email<TAB>domain</span> </span>`

<span style="font-size: small; font-family: arial,helvetica,sans-serif;">**Where**:</span>

<table border="0" cellspacing="6" id="bkmrk-status%C2%A0-is-%27verifica"><tbody><tr><td><div><span style="font-size: small; font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">status</span>   
</span></div></td><td><span style="font-size: small; font-family: arial,helvetica,sans-serif;">is 'verification', if 'key' is a valid verification key  
</span></td></tr><tr><td><span style="font-size: small; font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">email</span></span></td><td><span style="font-size: small; font-family: arial,helvetica,sans-serif;">email address 'key' has been sent to  
</span></td></tr><tr><td><span style="font-size: small; font-family: arial,helvetica,sans-serif;"><span style="font-family: courier new,courier;">domain</span></span></td><td><span style="font-size: small; font-family: arial,helvetica,sans-serif;">related domain</span></td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Sample:**</span>

<div id="bkmrk-https%3A%2F%2Fdmapi.joker.">`<span style="font-size: small; font-family: courier new,courier;">https://dmapi.joker.com/request/wa-email-details?key=<key-to-query>&auth-sid=<your-current-session-id></span>`</div>## wa-email-validate

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Triggers a new email verification**. In case the original verification email got lost or did not succeed otherwise, this request will send a new email. The original key will be **automatically included**.</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">This request returns special response header "Result", which will contain "ACK" if the validation request has been sent successfully, or "NACK" otherwise, e.g. if the email address is not in "verification pending" status, or already verified (whois verification, email validation). </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">For full ICANN policy, please see [Whois-Validation](https://joker.com/goto/icann_ra_whois).  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span>

```
email   Email address to send validation request to. This must be domain owner's email address.
```

 <span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns**: </span>

```
Result: ACK    validation request has been sent<br></br>Result: NACK   no validation request has been sent for this email<br></br>
```

<span style="font-size: small; font-family: arial,helvetica,sans-serif;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Sample:**</span>

<div id="bkmrk-https%3A%2F%2Fdmapi.joker.-1"><span style="font-size: small; font-family: courier new,courier;">https://dmapi.joker.com/request/wa-email-validate?email=&lt;email-of-owner&gt;&amp;auth-sid=&lt;your-current-session-id&gt;</span></div>## wa-email-verify

<article id="bkmrk-set-an-email-address"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Set an email address to 'validated'** by using the correct key, and voting with 'yes'. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">This request returns a special response header "Result", which will contain "ACK" if the verification has been accepted or "NACK" otherwise, e.g. in case the key is not correct (whois verification, email validation).  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">This is usefull e.g. in case you want to implement your own indivídual landing page for your customers. The URL for this landing page can be set in Joker.com's 'Reseller Settings'.  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">For full ICANN policy, please see [Whois-Validation](https://joker.com/goto/icann_ra_whois).  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span>

```
key      Verification key sent to owner by verification email<br></br>answer   Answer to verification request - "yes" or "no"
```

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">If the answer is "yes", the verification status is set to "verified" and email is confirmed as valid, if the answer is "no", then verification status is set to "invalid". If there is no answer before verification deadline (normally 15 days), the status is also set to "invalid". </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns**: </span>

```
Result: ACK    validation request has been successful<br></br>Result: NACK   validation request has been rejected or failed<br></br>
```

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Sample:**</span><div>`<span style="font-size: small; font-family: courier new,courier;">  https://dmapi.joker.com/request/wa-email-verify?key=<key-to-use>&answer=[yes|no]&auth-sid=<your-current-session-id></span>`</div></article>## domain-privacy-order

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">This request adds a subscription to Whois Privacy Services to an existing domain name.   
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">A summary of all privacy related DMAPI commands is also available at DMAPI Whois Privacy Services.  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires (mandatory):**</span>

<table border="1" id="bkmrk-domain-domain-name-t" style="width: 80%;"><tbody><tr><td>*domain*</td><td>domain name to order privacy service for</td></tr><tr><td>*privacy*

</td><td>basic|pro</td></tr></tbody></table>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Accepts (optional):**</span>

<table border="1" id="bkmrk-period-renewal-perio" style="width: 80%;"><tbody><tr><td>*period*</td><td>renewal period in **months** (not in years!)</td></tr><tr><td>*expyear*

</td><td>the wanted expiration year (e.g. '2016')</td></tr></tbody></table>

"**expyear**" is a safety option which can be used **instead of "period"** to order privacy until the specified year (not longer).

If you use "period", and by mistake send the request more than once, the order would be executed again, while with "expyear", it will not be renewed if it's expiration year is greater or equals to the specified one.

**Only one of "period" or "expyear" may be used, but not both.**

 If neither period nor expyear is provided, then privacy is ordered for the remaining domain lifetime, whatever it is.**

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Important:** Please note that registration period is in **months, not years**! In most cases, this number is a **multiple of 12**.  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">`<span style="font-size: small; font-family: courier new,courier;">  https://dmapi.joker.com/request/domain-privacy-order?domain=example.com&privacy=pro&auth-sid=<your-current-session-id</span>`<span style="font-size: small; font-family: courier new,courier;">   
</span></span>

This would order privacy service "pro" for the same period as the current term of the domain "example.com".

## cor-verify

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Authorizes a 'Change of Registrant' (COR)** according to the ICANN IRTP-C policy as of 2016-12-01. </span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;">Please find the full documentation of the process at Joker.com [here](https://joker.com/goto/resdocs), the original ICANN policy is available [here](https://joker.com/goto/icann_irtp).  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">This request can be used if you did not setup a verification 'push' URL with our provided module (see link above), or you want to use the standard email procedure.  
</span>

<span style="font-family: arial,helvetica,sans-serif; font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">This request returns special response header "Result", which will contain "ACK" if the authorization request has been sent successfully, or "NACK" otherwise, e.g. if the key sent does not match the transaction. </span>

 <span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Requires:**</span>

```
key     authorization key (provided in COR confirmation request)<br></br>answer  answer to confirm the COR - "yes" or "no"<br></br>
```

If the answer is "yes", the change-of-registrant will be executed, if in case of "no", it will be rejected. Please also note the new flag 'lock-opt-out' in 'domain-owner-change' if you do **not** want to lock the domain after the COR for 60 days.  
<span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Returns**: </span>

```
Result: ACK    authorization key has been accepted<br></br>Result: NACK   authorization key has not been accepted<br></br>
```

<span style="font-size: small; font-family: arial,helvetica,sans-serif;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Sample:**</span>

<div id="bkmrk-https%3A%2F%2Fdmapi.joker.-2"><span style="font-size: small; font-family: courier new,courier;">https://dmapi.joker.com/request/cor-verify?key=&lt;authorization key sent by Joker.com&gt;&amp;answer=yes&amp;auth-sid=&lt;your-current-session-id&gt;</span></div>## query-price-list

**Returns**

<span style="font-size: small;">List of domain prices per action and year (separated by tab) in the currency of the reseller account. The prices already include the reseller discount and also vat if it applies.  
</span>

<span style="font-size: small;"> </span><span style="font-family: arial,helvetica,sans-serif; font-size: small;">**Example:**</span>

`<span style="font-size: small; font-family: courier new,courier;">https://dmapi.joker.com/request/query-price-list?auth-sid=<your-current-session-id></span>`

## query-promos-list

**Parameters:**

<table border="1" id="bkmrk-name-default-type-on" style="border-collapse: collapse; width: 100%; height: 89.6978px;"><colgroup><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col><col style="width: 33.3333%;"></col></colgroup><thead><tr><td>Name</td><td>  
</td><td>Default</td></tr></thead><tbody><tr style="height: 30.7812px;"><td style="height: 30.7812px;">type</td><td style="height: 30.7812px;">One of `current`, `upcoming` or `all`</td><td style="height: 30.7812px;">`current`</td></tr><tr style="height: 29.4583px;"><td style="height: 29.4583px;">currency</td><td style="height: 29.4583px;">Currency to list prices in (USD, EUR etc)</td><td style="height: 29.4583px;">Account currency</td></tr><tr style="height: 29.4583px;"><td style="height: 29.4583px;">country</td><td style="height: 29.4583px;">Country id for VAT calculation (DE, US etc)</td><td style="height: 29.4583px;">Account country</td></tr></tbody></table>

**Returns:**

List of promos with prices, current (active), upcoming or both, example response:

```
Status-Code: 1000
Status-Text: OK
SvTrId: 01db520b6683da6ae6a40ad503527bd8
Tracking-Id: 01db520b6683da6ae6a40ad503527bd8
Separator: TAB
Columns: type,operation,tld,currency,vat,price,standard_price,retail_price,min_period,max_period,period_type,valid_from,valid_to

domain	create	art	EUR	0.19	1.9	20.01	33.35	1	1	flex	2024-12-01T00:00:00.000Z	2024-12-31T23:59:59.000Z
domain	create	blog	EUR	0.19	3.72	19.66	32.77	1	1	flex	2024-12-01T00:00:00.000Z	2024-12-31T23:59:59.000Z
domain	create	com	EUR	0.19	12.36	10.16	16.93	1	1	flex	2024-11-01T00:00:00.000Z	2024-12-31T23:59:59.000Z
domain	create	eu	EUR	0.19	3.25	4.46	7.44	1	1	flex	2024-11-01T00:00:00.000Z	2024-12-31T23:59:59.000Z
...
domain	create	fun	EUR	0.19	1.91	25.01	41.68	1	1	exact	2024-07-01T00:00:00.000Z	2024-12-31T23:59:59.000Z
domain	create	fun	EUR	0.19	10.0	50.02	83.36	2	2	exact	2024-07-01T00:00:00.000Z	2024-12-31T23:59:59.000Z
domain	create	fun	EUR	0.19	18.1	75.03	125.05	3	3	exact	2024-07-01T00:00:00.000Z	2024-12-31T23:59:59.000Z
...
```

Values are TAB-separated, columns are:

<table border="1" id="bkmrk-type-object-type-%28us" style="border-collapse: collapse; width: 100%; height: 444.387px;"><colgroup><col style="width: 18.7113%;"></col><col style="width: 81.249%;"></col></colgroup><tbody><tr style="height: 30.9125px;"><td style="height: 30.9125px;">type</td><td style="height: 30.9125px;">Object type (currently `domain` but in the future it might be other kind of service).</td></tr><tr style="height: 30.9125px;"><td style="height: 30.9125px;">operation</td><td style="height: 30.9125px;">The kind of operation that the promo applies to (`create`, `renew`, `transfer`).</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">tld</td><td style="height: 29.6px;">The TLD that the promo price applies to.</td></tr><tr style="height: 30.9125px;"><td style="height: 30.9125px;">currency</td><td style="height: 30.9125px;">Price's currency (matches `currency` parameter).</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">vat</td><td style="height: 29.6px;">VAT rate (example: 0.19 means 19%); 0 if not applicable.</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">price</td><td style="height: 29.6px;">Netto price per year when promo is active.</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">standard\_price</td><td style="height: 29.6px;">Netto standard price per year, i.e. the regular price when promo is *not* active.</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">retail\_price</td><td style="height: 29.6px;">Netto retail price per year, i.e. the price without reseller's discount when promo is *not* active.</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">min\_period</td><td style="height: 29.6px;">Minimum number of years (create/renew/transfer) that the promo price could be applied to.</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">max\_period</td><td style="height: 29.6px;">Maximum number of years (create/renew/transfer) that the promo price could be applied to.</td></tr><tr style="height: 85.25px;"><td style="height: 85.25px;">period\_type</td><td style="height: 85.25px;">One of `exact` or `flex`.

`flex` means that the promo price is valid for *any* number of years between `min_period` and `max_period`. In this case the price is *per year*, i.e. will be applied for *every year* of registration.

`exact` means that promo price is valid *exactly* for the period specified by `min_period`, in such cases `max_period` will be equivalent to `min_period`, and the price is for the number of years specified in `min_period`.

</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">valid\_from</td><td style="height: 29.6px;">Promo start date &amp; time (ISO format). Promo price is not valid before this date.</td></tr><tr style="height: 29.6px;"><td style="height: 29.6px;">valid\_to</td><td style="height: 29.6px;">Promo end date &amp; time (ISO format) Promo price is not valid after this date.</td></tr></tbody></table>

<p class="callout info">All prices are netto (without VAT).  
  
When `period_type` is `flex`, the price is per year, i.e. when you create/renew/transfer domain for more than one year the named price will be charged for *every* year*.* When `period_type` is `exact`, the price is applied to the number of years specified in `min_period`, i.e. *total price for the whole period*. Please pay attention in such cases, as there may be multiple rows with same TLD for this kind of price - one for specific number of years (check last 3 rows in the example above).</p>

# Code-Examples

## Perl

### List domains of customer

```perl
#!/usr/bin/perl
use LWP::UserAgent;
use Data::Dumper;

my $dmapiURL = "https://dmapi.joker.com/request";

my $ua = LWP::UserAgent-> new;

my $req = HTTP::Request-> new(GET => $dmapiURL.'/login?username='.shift().'&password='.shift());
my $res = $ua-> request($req);

unless ($res-> is_success) {
print "Failed: ", $res-> status_line, "n";
exit -1;
}

my $auth=$res-> as_string;
my $output;

if ($auth =~ /Auth-Sid:s*(w+)/ms) {
$req=HTTP::Request-> new(GET => $dmapiURL.'/query-domain-list?auth-sid='.$1);
$res = $ua-> request($req);
if ($res-> is_success) {
$output=$res-> content;
}

else{
print "Failed: ", $res-> status_line, "n";
exit -2;
}
}

else {
print "Failed: Got no auth-id from DMAPI:n";
print $res-> content;
exit -3;
}


my @lines=split ("n",$output);
my $month=now + ("2M");
my %list;

my $p=0;
for my $line(@lines) {
#Skip first line
next unless $p or $line =~ /^s*$/;
unless ($p) { $p=1; next};
my ($fqdn,$exp)=split ("[ t]+",$line);
$list{$fqdn}=$exp;
}

for (sort keys %list) {
print "$_n";
}
```

### List domains to expire next month  


**Needs:**

Class::Date and Date::Parse from CPAN!

```perl
#!/usr/bin/perl

use LWP::UserAgent;
use Data::Dumper;
use Class::Date qw(:errors date localdate gmdate now -DateParse);

my $dmapiURL = "https://dmapi.joker.com/request";

my $ua = LWP::UserAgent-> new;
my $req = HTTP::Request-> new(GET => $dmapiURL. '/login?username='.shift().'&password='.shift());
my $res = $ua-> request($req);

unless ($res-> is_success) {
print "Failed: ", $res-> status_line, "n";
exit -1;
}

my $auth=$res-> as_string;
my $output;

if ($auth =~ /Auth-Sid:s*(w+)/ms) {
$req=HTTP::Request-> new(GET => $dmapiURL. '/query-domain-list?auth-sid='.$1);
$res = $ua-> request($req);

if ($res-> is_success) {
$output=$res-> content;
}
else {
print "Failed: ", $res-> status_line, "n";
exit -2;
}
}
else {
print "Failed: Got no auth-id from DMAPI:n";
print $res-> content;
exit -3;
}


my @lines=split ("n",$output);
my $month=now + ("2M");
my %list;

my $p=0;
for my $line(@lines) {
#Skip first line
next unless $p or $line =~ /^s*$/;
unless ($p) { $p=1; next};
my ($fqdn,$exp)=split ("[ t]+",$line);
next unless localdate($exp) < $month;
$list{$fqdn}=$exp;
}

for ( map {$_-> [0]}
sort {
$a-> [1] < => $b-> [1]
||
$a-> [2] cmp $b-> [2]
}
map {[$_, localdate $list{$_},$_]}
keys %list ) {
print "$_:".$list{$_}."n";
} 
```

### Replace admin-c in multiple domains

```perl
#
# replace admin-c in multiple domains
#
#!/usr/bin/perl
use LWP::UserAgent;
use Data::Dumper;
my $ua = LWP::UserAgent->new;
my $req = HTTP::Request->new(GET => 'https://dmapi.joker.com/request/login?username='.shift().'&password='.shift());
my $res = $ua->request($req);
#--Admin-C :
my %ADMIN = ( de =>'CODE-12345' , org => 'CORG-12345', com => 'CCOM-12345', 'eu' => 'c12345' );
unless ($res->is_success) {
  print "Failed: ", $res->status_line, "\n";
  exit -1;
}
my $auth=$res->as_string;
my $output;
if ($auth =~ /Auth-Sid:\s*([a-z0-9]+)/m ) {
$auth = $1;
} else {
  print "Failed: Got no auth-id from DMAPI:\n";
  print $res->content;
  exit -3;
}
while ( <DATA> ) {
  chomp;
  my $fqdn = $_;
  ## for 3rd level domains this must be changed!
  my ( $sld, $tld ) = split ( /\./ , $fqdn );
  my $admin = $ADMIN{ $tld };
$req=HTTP::Request->new(GET => 'https://dmapi.joker.com/request/domain-modify?domain='.$fqdn.'&admin-c='.$admin.'&auth-sid='.$auth);
$res = $ua->request($req);
  if ($res->is_success) {
$output=$res->content;
     print $output;
  } else {
     print "Failed: ", $res->status_line, "\n";
     exit -2;
  }
}
__DATA__
domain1.de
domain2.eu
domain3.org
domain4.com
__END__
```

## PHP

### Introduction

<div align="justify" id="bkmrk-please-note-that-the"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Please note that there is a full DMAPI based interface written in PHP available. It is free to download and modify, and could be [downloaded from Github](https://github.com/joker-registrar/rcp-reseller-api-demo/). </span></div><div align="justify" id="bkmrk-please-read-more-at-"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">Please read more at section [Joker PHP client](https://joker.com/faq/books/reseller-documentation-en/page/the-jokercom-php-client "The Joker PHP Client"). </span></div><div align="justify" id="bkmrk-the-published-exampl"><span style="font-family: arial,helvetica,sans-serif; font-size: small;">The published examples in PHP are parts of this project and are stripped in terms of functionality and error handling. It is strongly recommended to use the complete code base from Sourceforge. </span></div>### List domains of a customer

<div align="justify" id="bkmrk-">  
</div>```php
<?php
 
//sends HTTP request using CURL
 
function query_host($conn_server, $params = "", $get_header = false)
{
 
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $conn_server.$params);
    if (preg_match("/^https:\/\//i", $conn_server)) {
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
    }
 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 
    if ($get_header) {
        curl_setopt($ch, CURLOPT_HEADER, 1);
    }
 
    else {
        curl_setopt($ch, CURLOPT_HEADER, 0);
    }
 
    $result = curl_exec($ch);
 
    if (curl_errno($ch)) {
        print "curl error";
    }
 
    else {
        curl_close($ch);
    }
 
    return $result;
}
 
//builds query, sends request and gets the answer back
 
function execute_request($request, $params, &$sessid)
{
    //build the query
    $http_query = "/request/" . $request . "?" . $params   ."&auth-sid=".$sessid."&client-ip=".$_SERVER["REMOTE_ADDR"];
    //send the request
    $raw_res = query_host("https://dmapi.joker.com", $http_query, true);
    $temp_arr = @explode("\r\n\r\n", $raw_res, 2);
    //split the response for further processing
    if (is_array($temp_arr) && 2 == count($temp_arr)) {
        return $temp_arr[1];
    }
 
    else {
        return false;
    }
}
 
//basic parsing of the DMAPI header
 
function parse_response_header($header)
{
    $raw_arr = explode("\n", trim($header));
    $result = array();
    if (is_array($raw_arr)) {
        foreach ($raw_arr as $key => $value)
        {
            $keyval = array();
            if (preg_match("/^([^\s]+):\s+(.+)\s*$/", $value, $keyval)) {
                $arr[strtolower($keyval[1])] = $keyval[2];
            }
 
            else {
                print "Header line not parseable - pattern does not match\nRaw header:\n$value";
            }
        }
    }
 
    else {
        $arr = "";
        print "Unidentified error\nRaw header:\n$header";
    }
 
    return $arr;
}
 
//parses the reply from DMAPI into a header and body
function parse_response($res)
{
    $raw_arr = explode("\n\n", trim($res));
    $arr_elements = count($raw_arr);
    if ($arr_elements > 0) {
        $temp["response_header"] = parse_response_header($raw_arr["0"]);
        $temp["response_body"] = $raw_arr["1"];
    }
 
    else {
        print "Couldn't split the response into response header and response body\nRaw result:\n$res";
        $temp = "";
    }
 
return $temp;
}
 
$response = "";
$authid = "none";
//first obtaining an Auth-ID
$username = "<your username here>";
$password = "<your password here>";
$fields = "username=".urlencode($username)."&password=".urlencode($password);
$result = execute_request("login", $fields, $authid);
$result = parse_response($result);
$authid = $result["response_header"]["auth-sid"];
if (!$authid) {
    print "no auth-id was obtained - probably due to wrong username or password";
    exit;
}
 
//now asking for the domain list
$pattern = "*";
$fields = "pattern=".urlencode($pattern);
$result = execute_request("query-domain-list", $fields, $authid);
$result = parse_response($result);
 
print_r($result["response_header"]);
print "< br /> ";
print_r($result["response_body"]); 
```

## Python  


### Introduction

Python is easy to use with DMAPI. Our examples are tested with python 3 on Windows and Linux, but should work on all platforms.

Running the Python example will look like:

```
$ ./dmapi-example.py 
Request-URL:  https://dmapi.ote.joker.com/request/login
Login: Status-Code: 0
 
Request-URL:  https://dmapi.ote.joker.com/request/query-domain-list
Domain List: Status-Code: 0
 
 domain: another-privacy-test.com
 expiration_date: 2018-06-30
 
 domain: another-privacy-test.net
 expiration_date: 2020-06-30
 
Request-URL:  https://dmapi.ote.joker.com/request/logout
Logout: Status-Code: 0
```

### Login and list your domains  


```python
#!/usr/bin/env python
import requests
  
dmapiURL = 'https://dmapi.ote.joker.com'
dmapiUser = 'username'
dmapiPassword = 'password'
  
def main():
    loginResponse = login(dmapiUser,dmapiPassword)
    print("Login: Status-Code:", loginResponse.header['Status-Code'])
    if loginResponse.header['Status-Code'] !='0':
        print(loginResponse.header['Status-Text'])
        return
  
    sessionId = loginResponse.header['Auth-Sid'];
    print("")
    domainResponse = domainList(sessionId,1,5)
    print("Domain List: Status-Code:", domainResponse.header['Status-Code'])
    print("")
    domains = domainResponse.resultListWithNames()
    for domain in domains:
        for key, value in domain.items():
            print(" %s: %s" % (key, value))
        print("")
    logoutResponse = logout(sessionId)
    print("Logout: Status-Code:", logoutResponse.header['Status-Code'])
  
  
# implement dmapi commands as functions
def login(username,password):
    parameters = { 'username': username, 'password': password }
    message = sendCommand('login', parameters)
    return message;
  
def logout(sessionId):
    parameters = { 'auth-sid': sessionId }
    message = sendCommand('logout', parameters)
    return message;
  
def domainList(sessionId, list_from=1, list_to=""):
    parameters = { 'auth-sid': sessionId , 'from': list_from, 'to': list_to }
    message = sendCommand('query-domain-list', parameters)
    return message;
  
# general dmapi command call
def sendCommand(command,parameter={}):
    try:
        url = dmapiURL+'/request/'+command
        print("Request-URL: ", url)
        response = requests.get(url, params=parameter)
        # print URL with parameters for debugging purposes
        # print("Request-URL: ", response.url)
        if response.status_code != requests.codes.ok:
            raise CommandError("Command Failed! HTTP Status Code: %s" % response.status_code)
        return DmapiResponse(response.text)
    except requests.ConnectionError as e:
        raise CommandError("Connection Error: %s" % str(e))
    except requests.HTTPError as e:
        raise CommandError("Http Error: %s" % str(e))
    except CommandError as e:
        raise
    except Exception as e:
       raise CommandError("Unexpected Error: %s" % str(e))
  
class DmapiResponse():
    def __init__(self,responseBody):
        parts = responseBody.split("\n\n",1)
        if len(parts)>0:
            self.header = self.__parseKeyValueList(parts[0])
        if len(parts)>1:
            self.body = parts[1]
  
    def __parseKeyValueList(self,text):
        lines = text.split("\n")
        keyValueList = {}
        for line in lines:
            keyValue = line.split(' ',1)
            key = keyValue[0].rstrip(':')
            value = keyValue[1]
            keyValueList[key] = value
        return keyValueList
  
    def __getSeparator(self):
        if self.header.get('Separator') == 'TAB':
            return "\t"
        else:
            return " "
  
    def resultList(self):
        lines = self.body.split("\n")
        resultList = []
        separator = self.__getSeparator()
        for line in lines:
            values = line.split(separator)
            resultList.append(line.split(separator))
        return resultList
  
    def resultListWithNames(self):
        columnNames = self.resultListColumns()
        resultList = []
        if len(columnNames) > 0:
            rawList = self.resultList()
            resultList = []
            for row in rawList:
                columns = {}
                for idx, column in enumerate(row):
                    columns[columnNames[idx]] = column
                resultList.append(columns)
        return resultList
  
    def resultListColumns(self):
        if 'Columns' in self.header:
            columnsText = self.header['Columns']
            columns = columnsText.split(',')
            return columns
        else:
            return []
  
    def resultValues(self):
        return self.__parseKeyValueList(self.body)
  
class CommandError(Exception):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)
  
# call main function
try:
    main()
except CommandError as e:
    print("Error:", str(e).strip("'"))
```

### Login and list all A and CNAME records  


```python
#!/usr/bin/env python
import requests
 
dmapiURL = 'https://dmapi.joker.com'
dmapiUser = 'username'
dmapiPassword = 'password'
 
def main():
    loginResponse = login(dmapiUser,dmapiPassword)
    #print("Login: Status-Code:", loginResponse.header['Status-Code'])
    if loginResponse.header['Status-Code'] !='0':
        print(loginResponse.header['Status-Text'])
        return
 
    sessionId = loginResponse.header['Auth-Sid'];
    #print("")
    dnsZoneListResponse = dnsZoneList(sessionId,"")
    #print("DNS Zone List: Status-Code:", dnsZoneListResponse.header['Status-Code'])
    dnslist = dnsZoneListResponse.resultList()
    for row in dnslist:
        domain = row[0]
        expiration = row[1]
        #print(" domain: %s" % (domain))
        #print(" expiration: %s" % (expiration))
        #print("")
        dnsZoneResponse = dnsZoneGet(sessionId, domain)
        #print("DNS Zone GET for %s: Status-Code:" % (domain), dnsZoneResponse.header['Status-Code'])
        zoneEntries = dnsZoneResponse.resultList()
        for entry in zoneEntries:
            #print(' '.join(entry))
            if len(entry)<5:
                continue
            eLabel = entry[0]
            eType = entry[1]
            ePriority = entry[2]
            eTarget = entry[3]
            eTTL = entry[4]
            if eType == 'A' or eType == 'CNAME':
                print(("%s.%s\t%s" % (eLabel,domain,eTarget)).lstrip('@.'))
 
    logoutResponse = logout(sessionId)
    #print "Logout: Status-Code:", logoutResponse.header['Status-Code']
 
 
# implement dmapi commands as functions
def login(username,password):
    parameters = { 'username': username, 'password': password }
    message = sendCommand('login', parameters)
    return message;
 
def logout(sessionId):
    parameters = { 'auth-sid': sessionId }
    message = sendCommand('logout', parameters)
    return message;
 
def domainList(sessionId, pattern="", list_from=1, list_to=""):
    parameters = { 'auth-sid': sessionId , 'from': list_from, 'to': list_to, 'pattern': pattern }
    message = sendCommand('query-domain-list', parameters)
    return message;
 
def dnsZoneList(sessionId, pattern="", list_from=1, list_to=""):
    parameters = { 'auth-sid': sessionId , 'from': list_from, 'to': list_to, 'pattern': pattern }
    message = sendCommand('dns-zone-list', parameters)
    return message;
 
def dnsZoneGet(sessionId, domain):
    parameters = { 'auth-sid': sessionId , 'domain': domain }
    message = sendCommand('dns-zone-get', parameters)
    return message;
 
# general dmapi command call
def sendCommand(command,parameter={}):
    try:
        url = dmapiURL+'/request/'+command
        #print("Request-URL: ", url)
        response = requests.get(url, params=parameter)
        # print URL with parameters for debugging purposes
        # print("Request-URL: ", response.url)
        if response.status_code != requests.codes.ok:
            raise CommandError("Command Failed! HTTP Status Code: %s" % response.status_code)
        return DmapiResponse(response.text)
    except requests.ConnectionError as e:
        raise CommandError("Connection Error: %s" % str(e))
    except requests.HTTPError as e:
        raise CommandError("Http Error: %s" % str(e))
    except CommandError as e:
        raise
    except Exception as e:
       raise CommandError("Unexpected Error: %s" % str(e))
 
class DmapiResponse():
    def __init__(self,responseBody):
        parts = responseBody.split("\n\n",1)
        if len(parts)>0:
            self.header = self.__parseKeyValueList(parts[0])
        if len(parts)>1:
            self.body = parts[1]
 
    def __parseKeyValueList(self,text):
        lines = text.split("\n")
        keyValueList = {}
        for line in lines:
            keyValue = line.split(' ',1)
            key = keyValue[0].rstrip(':')
            value = keyValue[1]
            keyValueList[key] = value
        return keyValueList
 
    def __getSeparator(self):
        if self.header.get('Separator') == 'TAB':
            return "\t"
        else:
            return " "
 
    def resultList(self):
        lines = self.body.split("\n")
        resultList = []
        separator = self.__getSeparator()
        for line in lines:
            values = line.split(separator)
            resultList.append(line.split(separator))
        return resultList
 
    def resultListWithNames(self):
        columnNames = self.resultListColumns()
        resultList = []
        if len(columnNames) > 0:
            rawList = self.resultList()
            resultList = []
            for row in rawList:
                columns = {}
                for idx, column in enumerate(row):
                    columns[columnNames[idx]] = column
                resultList.append(columns)
        return resultList
 
    def resultListColumns(self):
        if 'Columns' in self.header:
            columnsText = self.header['Columns']
            columns = columnsText.split(',')
            return columns
        else:
            return []
 
    def resultValues(self):
        return self.__parseKeyValueList(self.body)
 
class CommandError(Exception):
    def __init__(self, value):
        self.value = value
    def __str__(self):
        return repr(self.value)
 
# call main function
try:
    main()
except CommandError as e:
    print("Error:", str(e).strip("'"))
```

## C#

Applications for domain management with DMAPI are very easy to create using MS Visual Studio. This example code logs into the Joker.com system using DMAPI requests.

It provides a domain listing, whois lookup and "Email verification".

This has been tested using Visual Studio 2008 and 2010, but should work with any version, and also with free Visual Studio Express and .NET versions from 3.5 onwards. Please find the source code as an attachment below.

We also provide this as a windows binary to try without the need of building it before. In case you run Windows 10 with "Smartscreen", you have to click on "more information" to execute this, since this binray of course is not signed by a "manufacturer"...

This is how this will look like:

![C#/.NEt DMAPI Example](https://joker.com/faq/images/Image/C_sharp_DMAPI_Example.png)