The ELITEDOMAINS API allows you to manage domains, handles, and catcher orders programmatically through a simple REST API.
This documentation provides all the information you need to work with the ELITEDOMAINS API.
To use the API, please contact our support team to enable API access for your account. Once activated, you can manage personal access tokens in your account settings.
All API requests must include your personal access token as a Bearer token:
Authorization: Bearer {YOUR_TOKEN}
All API requests should be made to: https://api.elitedomains.de
The API supports all TLDs offered by ELITEDOMAINS — the full list including prices is available via GET /domains/prices. Requests for unsupported TLDs are rejected with a dedicated error message.
DENIC specific features (catcher backorders, AuthInfo2, transit) remain limited to .de domains.
Paid actions (registration, transfer) are billed like in the web app: accounts with monthly invoicing for a TLD are billed via the collective invoice; all other orders are charged instantly to the stored payment method (credit card or PayPal). Orders are rejected when no instant payment method is available or the payment cannot be authorized. Use GET /domains/order/check to preview costs, available periods and billing for a domain before ordering.
Every API request can be run in Sandbox mode by adding ?sandbox=1 to the URL. In Sandbox mode, no actual changes are performed (no database writes or registry calls).
These limits are shared between the REST API and the MCP server (below): requests to either interface count against the same per-account counter.
Every API operation is also available to AI agents through a Model Context Protocol (MCP) server. Any MCP-compatible client (for example Claude) can manage your domains, handles, offers and catcher orders directly.
https://mcp.elitedomains.de (Streamable HTTP transport)default ability.Point your MCP client at the endpoint and provide your token in the Authorization header. Example client configuration:
{
"mcpServers": {
"elitedomains": {
"type": "http",
"url": "https://mcp.elitedomains.de",
"headers": {
"Authorization": "Bearer {YOUR_TOKEN}"
}
}
}
}
The server exposes the same operations documented below: domains (list, check availability, check order options, prices, register/transfer, update, delete, tags, authinfo), handles (list, create, update), offers (list) and catcher backorders (list, info, create, delete). As with the REST API, all offered TLDs are supported (catcher and AuthInfo2 remain .de only).
To authenticate requests, include an Authorization header with the value "Bearer {YOUR_TOKEN}".
All authenticated endpoints are marked with a requires authentication badge in the documentation below.
You can retrieve your personal access token by visiting your account settings page in the ELITEDOMAINS dashboard. Contact support to enable API access for your account.
Retrieve a paginated list of all domain catcher orders in your account.
The page number for pagination.
Number of results per page. Default: 500, Max: 500.
curl --request GET \
--get "https://api.elitedomains.de/catcher?page=1&per_page=500" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"current_page": 1,
"per_page": 500,
"data": [
{
"name": "example.de",
"status": "rgp",
"users": 3,
"price": 5,
"dropdate_at": "2024-03-15",
"created_at": "2024-03-10 14:30:00",
"tags": [
"tag1",
"tag2"
]
}
]
}
Retrieve status information for any domain in the catcher, including the number of users competing for it, the current status and the expected drop date. The domain does not need to be in your own catcher orders.
The domain name.
curl --request GET \
--get "https://api.elitedomains.de/catcher/info?name=example.de" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"name": "example.de",
"status": "rgp",
"users": 3,
"dropdate_at": "2024-03-15 00:00:00"
}
Add a new domain to the RGP (Redemption Grace Period) catcher. Successfully caught domains will be registered using your default handle configuration.
curl --request POST \
"https://api.elitedomains.de/catcher" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"example.de\",
\"price\": 10
}"
{
"message": "Domain added to catcher",
"name": "example.de"
}
Remove a domain from your catcher order list.
curl --request DELETE \
"https://api.elitedomains.de/catcher" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"example.de\"
}"
{
"message": "Domain deleted",
"name": "example.de"
}
Retrieve a paginated list of all domains in your account.
The page number for pagination.
Number of results per page. Default: 500, Max: 500.
curl --request GET \
--get "https://api.elitedomains.de/domains?page=1&per_page=500" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"current_page": 1,
"per_page": 500,
"data": [
{
"name": "example.de",
"redirector_settings": {
"type": "landing",
"method": "redirect_sale_page"
},
"authinfo": "E-Hc$f3xx",
"auto_expire": "2024-12-31",
"paid_until": "2024-12-31",
"expires_at": "2025-01-01T00:00:00.000000Z",
"created_at": "2023-01-15T10:30:00.000000Z"
}
]
}
Retrieve the prices for all top-level domains (TLDs) available for registration. All prices are net (excluding VAT) and quoted per year.
The price object holds the price currently valid for your account. It may be lower than the standard price because of an active promotion or because an individual price has been negotiated for your account. The original_price object holds the standard list price without any promotions or individual pricing. The custom object indicates, per price type, whether an individual price is configured for your account that deviates from the standard price.
A price may be null when the corresponding action is not offered for a TLD.
Filter the result by a single TLD. The leading dot is optional.
curl --request GET \
--get "https://api.elitedomains.de/domains/prices?tld=de" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"data": [
{
"tld": "de",
"price": {
"reg": 5,
"transfer": 5,
"renew": 5,
"restore": 80
},
"original_price": {
"reg": 5,
"transfer": 5,
"renew": 5,
"restore": 80
},
"custom": {
"reg": false,
"transfer": false,
"renew": false,
"restore": false
}
}
]
}
Register a new domain or transfer an existing domain to your account. Domains will be created using your default redirector and handle configuration.
All TLDs from the price list (GET /domains/prices) are supported. Use GET /domains/order/check
to preview the required action, available periods and costs for a domain beforehand.
Paid actions are charged instantly to your stored payment method (credit card or PayPal) unless your
account uses monthly invoicing for the TLD. If the payment cannot be authorized the order is rejected.
For instantly billed orders the response contains a payment field: captured (charged), authorized
(the order succeeded but the charge is still pending — no action required), canceled (the order
failed, nothing was charged) or not_required (free of charge, e.g. fully discounted).
Transfers of some TLDs (e.g. most gTLDs) do not complete immediately; in that case the response is
Domain transfer initiated and the transfer continues in the background.
curl --request POST \
"https://api.elitedomains.de/domains" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"example.de\",
\"authinfo\": \"E-Hc$f3xx\",
\"handle_id\": 123,
\"period\": 12,
\"redirector_settings\": {
\"type\": \"landing\",
\"method\": \"redirect_sale_page\",
\"url\": \"https:\\/\\/example.com\",
\"ns\": [
\"ns1.example.com\",
\"ns2.example.com\"
],
\"dns\": [
{
\"type\": \"A\",
\"name\": \"@\",
\"value\": \"192.168.1.1\",
\"prio\": 10,
\"ttl\": 3600
}
],
\"options\": {
\"dnssec-active\": \"false\",
\"dnssec-key\": \"AwEAAa...\",
\"dnssec-algorithm\": \"13\",
\"dnssec-flags\": \"257\"
}
}
}"
{
"message": "Domain registered successfully",
"name": "example.de",
"period": 12,
"payment": "captured"
}
Add or update tags for a specific domain in your portfolio. Tags help organize and categorize your domains.
curl --request POST \
"https://api.elitedomains.de/domains/tags" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"example.de\",
\"tags\": [
\"premium\",
\"aged\",
\"brandable\"
]
}"
Check the registry status of a domain. The message field contains the
current status. The most common values are free (available for registration)
and connect (already registered). Other registry statuses such as
redemptionPeriod, transfer_lock or transit may also be returned.
All TLDs from the price list (GET /domains/prices) are supported.
The response additionally contains the same order preview fields as
GET /domains/order/check (action, periods, price, billing, ...);
see that endpoint for their documentation. message always contains the
plain registry status.
The domain name to check.
curl --request GET \
--get "https://api.elitedomains.de/domains/check?name=example.de" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"name": "example.de",
"message": "free",
"tld": "de",
"status": "free",
"action": "register",
"periods": [
{
"months": 12,
"price": 5,
"price_gross": 5.95
}
],
"default_period": 12,
"price": 5,
"price_gross": 5.95,
"tax_rate": 19,
"billing": "instant",
"instant_payment_method_available": true
}
Preview what an order for a domain would look like before placing it via POST /domains:
the current registry status, the resulting action (register or transfer), the available
periods with their cost and how the order would be billed.
price values are net in EUR; price_gross includes VAT at your account's tax_rate
and is the amount an instant payment actually charges.
billing is instant when the order is charged immediately to your stored payment
method (credit card or PayPal) and monthly_invoice when it is added to your collective
invoice. For instant billing, instant_payment_method_available indicates whether a
payment method is stored in your account's billing settings.
For transfers the price is independent of the period; the period only determines the
added runtime (some TLDs do not allow choosing a period on transfer, then periods is empty).
The domain name to check.
curl --request GET \
--get "https://api.elitedomains.de/domains/order/check?name=example.com" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"name": "example.com",
"message": "Domain can be registered",
"tld": "com",
"status": "free",
"action": "register",
"periods": [
{
"months": 12,
"price": 9.5,
"price_gross": 11.31
},
{
"months": 24,
"price": 19,
"price_gross": 22.61
}
],
"default_period": 12,
"price": 9.5,
"price_gross": 11.31,
"tax_rate": 19,
"billing": "instant",
"instant_payment_method_available": true
}
Update domain settings such as redirector configuration or handle assignment.
curl --request PATCH \
"https://api.elitedomains.de/domains" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"example.de\",
\"redirector_settings\": {
\"type\": \"landing\",
\"method\": \"redirect_sale_page\",
\"url\": \"https:\\/\\/example.com\",
\"ns\": [
\"ns1.example.com\",
\"ns2.example.com\"
],
\"dns\": [
{
\"type\": \"A\",
\"name\": \"@\",
\"value\": \"192.168.1.1\",
\"prio\": 10,
\"ttl\": 3600
}
],
\"options\": {
\"dnssec-active\": \"false\",
\"dnssec-key\": \"AwEAAa...\",
\"dnssec-algorithm\": \"13\",
\"dnssec-flags\": \"257\"
}
},
\"handle_id\": 1234
}"
{
"message": "Domain updated"
}
Delete a domain from your account or put it into DENIC transit state.
Transit is a DENIC concept and therefore only available for .de domains.
curl --request DELETE \
"https://api.elitedomains.de/domains" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"example.de\",
\"transit\": 0
}"
{
"message": "Domain deleted",
"name": "example.de"
}
Retrieve the AuthInfo/transfer code for a domain. If none exists, a new one will be generated.
The domain name.
curl --request GET \
--get "https://api.elitedomains.de/domains/authinfo?name=example.de" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"message": "Authcode exists",
"name": "example.de",
"authinfo": "EDxHc$f3xx",
"expires_at": "07.04.2024 21:34:35"
}
Check if an AuthInfo2 letter can be ordered for a .de domain via DENIC. Only available for accounts
that use monthly invoicing (Sammelrechnung). AuthInfo2 is a DENIC concept and therefore only
available for .de domains.
The domain name to check.
curl --request GET \
--get "https://api.elitedomains.de/domains/authinfo2/check?name=example.de" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"name": "example.de",
"available": true,
"message": "AuthInfo2 can be ordered"
}
Order an AuthInfo2 letter from DENIC for a .de domain. Only available for accounts that use monthly
invoicing (Sammelrechnung); the order is added to the next collective invoice. A confirmation email
is sent on success. AuthInfo2 is a DENIC concept and therefore only available for .de domains.
curl --request POST \
"https://api.elitedomains.de/domains/authinfo2" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"example.de\",
\"sandbox\": \"0\"
}"
{
"name": "example.de",
"message": "AuthInfo2 letter for example.de has been ordered and will be sent within 1-2 business days."
}
List a domain on the Sedo marketplace with a specified price. The domain will be configured for Paynow transactions.
curl --request POST \
"https://api.elitedomains.de/domains/sedo" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"name\": \"example.de\",
\"price\": 1500
}"
{
"message": "SEDO-Domain added or updated successfully",
"name": "example.de"
}
Retrieve a paginated list of all sale pages (domain offers) in your account with relevant data including status, pricing, visitors, leads, and template information.
The page number for pagination.
Number of results per page. Default: 50, Max: 500.
Filter by offer type. Options: paynow, 4sale.
paynow4saleFilter by status. Options: verified, hold, not_configured, unverified, inactive, deconnect.
verifiedholdnot_configuredunverifiedinactivedeconnectFilter by internal domains (true) or external domains (false).
Filter by template name.
Minimum price filter.
Maximum price filter.
Minimum visitors in the last 30 days.
Field to order by. Default: created_at. Options: created_at, name, price, visitors, status.
created_atnamepricevisitorsstatusOrder direction. Default: desc. Options: asc, desc.
ascdesccurl --request GET \
--get "https://api.elitedomains.de/offers?page=1&per_page=50&type=paynow&status=verified&is_internal=1&template=slim&min_price=99&max_price=5000&min_visitors=10&order_by=visitors&order_direction=desc" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"current_page": 1,
"per_page": 50,
"total": 125,
"last_page": 3,
"data": [
{
"name": "example.de",
"type": "paynow",
"status": "verified",
"price": 2999,
"template": "slim",
"created_at": "2023-01-15T10:30:00.000000Z",
"is_internal": true,
"redirect_status": true,
"hide_on_marketplace": false,
"visitors": {
"last_30_days": 142,
"last_7_days": 35,
"referrer_30_days": 12
},
"template_data": {
"theme-color": "blue",
"price-suggest": "true"
},
"tags": [
"premium",
"short"
]
}
]
}
Retrieve a paginated list of all contact handles in your account.
The page number for pagination.
Number of results per page. Default: 500, Max: 500.
curl --request GET \
--get "https://api.elitedomains.de/handles?page=1&per_page=500" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" {
"current_page": 1,
"per_page": 500,
"data": [
{
"id": 123,
"alias": "JohnPrivate",
"type": "PERSON",
"handle_name": "John Doe",
"contact_person": null,
"street_name": "Unter den Linden",
"street_number": "12",
"address_addition": null,
"postalcode": "12345",
"city": "Berlin",
"state": null,
"country_id": 276,
"country_iso": "DE",
"email": "[email protected]",
"phone": "+49.16094751251",
"created_at": "2023-01-15T10:30:00.000000Z"
}
]
}
Add a new contact handle to your account. Handles are used for domain contact information at the registry.
curl --request POST \
"https://api.elitedomains.de/handles" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"alias\": \"JohnPrivate\",
\"type\": \"PERSON\",
\"handle_name\": \"John Doe\",
\"contact_person\": \"John Doe\",
\"street_name\": \"Unter den Linden\",
\"street_number\": \"12\",
\"address_addition\": \"3rd floor\",
\"postalcode\": \"12345\",
\"city\": \"Berlin\",
\"state\": \"Berlin\",
\"country_iso\": \"DE\",
\"country_id\": 276,
\"email\": \"[email protected]\",
\"phone\": \"+49.16094751251\",
\"general_request\": \"[email protected]\",
\"abuse_contact\": \"[email protected]\"
}"
{
"id": 123,
"alias": "JohnPrivate",
"type": "PERSON",
"handle_name": "John Doe",
"contact_person": null,
"street_name": "Unter den Linden",
"street_number": "12",
"address_addition": null,
"postalcode": "12345",
"city": "Berlin",
"state": null,
"country_id": 276,
"country_iso": "DE",
"email": "[email protected]",
"phone": "+49.16094751251",
"created_at": "2023-01-15T10:30:00.000000Z"
}
Update an existing contact handle. Only include fields you want to update.
The handle ID.
curl --request PATCH \
"https://api.elitedomains.de/handles/123" \
--header "Authorization: Bearer {YOUR_TOKEN}" \
--header "Content-Type: application/json" \
--header "Accept: application/json" \
--data "{
\"alias\": \"JohnPrivate\",
\"contact_person\": \"John Doe\",
\"street_name\": \"Unter den Linden\",
\"street_number\": \"12\",
\"address_addition\": \"3rd floor\",
\"postalcode\": \"12345\",
\"city\": \"Berlin\",
\"state\": \"Berlin\",
\"country_iso\": \"DE\",
\"country_id\": 276,
\"email\": \"[email protected]\",
\"phone\": \"+49.16094751251\",
\"general_request\": \"[email protected]\",
\"abuse_contact\": \"[email protected]\"
}"
{
"id": 123,
"alias": "JohnPrivate",
"type": "PERSON",
"handle_name": "John Doe",
"contact_person": null,
"street_name": "Unter den Linden",
"street_number": "12",
"address_addition": null,
"postalcode": "12345",
"city": "Berlin",
"state": null,
"country_id": 276,
"country_iso": "DE",
"email": "[email protected]",
"phone": "+49.16094751251",
"created_at": "2023-01-15T10:30:00.000000Z"
}