ELITEDOMAINS API Documentation

Postman collection → OpenAPI spec →

Introduction

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.

Getting Started

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.

Authentication

All API requests must include your personal access token as a Bearer token:

Authorization: Bearer {YOUR_TOKEN}

Base URL

All API requests should be made to: https://api.elitedomains.de

Supported Domains

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.

Payment

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.

Sandbox Mode

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).

Rate Limiting

Endpoints that can execute a registry operation — domain registration/transfer, update, delete/transit, AuthInfo/AuthInfo2, domain status checks, creating or updating a handle, and adding a domain to the catcher — count against your main limit. This applies per endpoint, not per request: every call to such an endpoint counts, even one that only touches local data (e.g. a PATCH /domains call that only changes redirector settings, or updating a handle field that a registry does not track).

  • Standard: 100 requests/minute, 1,000 requests/day
  • During droptime (02:00-04:00): 10 requests/minute, 100 requests total

All other endpoints (listing domains/handles/offers/catcher orders, prices, offer management, removing a domain from the catcher, ...) fall under a separate, much looser limit intended only to prevent abuse: 600 requests/minute, 20,000 requests/day, not reduced during droptime.

Each endpoint's description above states whether it counts against the main (registry) limit.

These limits are shared between the REST API and the MCP server (below): requests to either interface count against the same per-account counters.

MCP Server (AI Agents)

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.

  • Endpoint: https://mcp.elitedomains.de (Streamable HTTP transport)
  • Authentication: the same personal access token as the REST API, sent as a Bearer token. The token needs the default ability.
  • Rate limiting: MCP usage counts toward the same rate limits as the REST API, on shared per-account counters (main limit for registry operations, looser fallback limit for everything else, exactly as described above) — it makes no difference whether a request is made via the API or via MCP.

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, list filter options, check availability, check order options, prices, register/transfer, update, delete, tags, authinfo), handles (list, create, update), offers (list, list filter options, create, update, update price, delete), leads (list, send counter-offer, accept price suggestion), journal (list), transactions (list), invoices (list, get with line items, list service records) and catcher backorders (list, list filter options, info, create, delete). As with the REST API, all offered TLDs are supported (catcher and AuthInfo2 remain .de only).

Authenticating requests

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.

Catcher Management

List all catcher orders

GET
https://api.elitedomains.de
/catcher
requires authentication

Retrieve a paginated list of all domain catcher orders in your account.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number for pagination.

Example:
1
per_page
integer

Number of results per page. Default: 500, Max: 500.

Example:
500
tags
string

Filter by tags (comma-separated tag names, e.g. priority,short). An order must have all listed tags.

Example:
priority
tld
string

Filter by TLD (comma-separated, e.g. de,com).

Example:
de
order_by
string

Field to order by. created_at sorts by when this catch cycle started (kept as the default for backward compatibility). queued_at sorts by when you personally added the domain to your catcher — the same value the listing returns as created_at. Default: created_at. Options: created_at, queued_at, price, status, dropdate_at, tags.

Must be one of:
  • created_at
  • queued_at
  • price
  • status
  • dropdate_at
  • tags
Example:
dropdate_at
order_direction
string

Order direction. Default: desc. Options: asc, desc.

Must be one of:
  • asc
  • desc
Example:
desc

Response Fields

Example request:
curl --request GET \
    --get "https://api.elitedomains.de/catcher?page=1&per_page=500&tags=priority&tld=de&order_by=dropdate_at&order_direction=desc" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "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"
            ]
        }
    ]
}

List catcher filter options

GET
https://api.elitedomains.de
/catcher/filters
requires authentication

Retrieve the tags and TLDs your catcher orders can be filtered by via GET /catcher, along with how many orders currently match each option.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Response Fields

Example request:
curl --request GET \
    --get "https://api.elitedomains.de/catcher/filters" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "tags": [
        {
            "name": "Priority",
            "slug": "priority",
            "count": 3
        }
    ],
    "tlds": [
        {
            "tld": "de",
            "count": 12
        }
    ]
}

Get catcher domain info

GET
https://api.elitedomains.de
/catcher/info
requires authentication

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.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

name
string
required

The domain name.

Example:
example.de

Response Fields

Example request:
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"
Example response:
{
    "name": "example.de",
    "status": "rgp",
    "users": 3,
    "dropdate_at": "2024-03-15 00:00:00"
}
{
    "message": "Domain name is missing",
    "name": null
}
{
    "message": "Domain not found",
    "name": "example.de"
}

Add domain to catcher

POST
https://api.elitedomains.de
/catcher
requires authentication

Add a new domain to the RGP (Redemption Grace Period) catcher. Successfully caught domains will be registered using your default handle configuration.

If the domain is already in your catcher orders, the price can be updated instead by passing a different price value.

This endpoint may execute registry operations and counts against your API rate limit.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
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
}"
Example response:
{
    "message": "Domain added to catcher",
    "name": "example.de"
}
{
    "message": "Price updated to 10€",
    "name": "example.de"
}
{
    "message": "Domain name is missing"
}
{
    "message": "Domain name is invalid"
}
{
    "message": "The domain catcher is only available for .de domains"
}
{
    "message": "Default handle in your accounts settings required"
}
{
    "message": "Your catcher access is currently locked. Please check your invoices or contact support."
}
{
    "message": "Catcher Create not possible between 2:00 and 4:00am"
}
{
    "message": "Domain already added to catcher with price 5€"
}

Remove domain from catcher

DELETE
https://api.elitedomains.de
/catcher
requires authentication

Remove a domain from your catcher order list.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
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\"
}"
Example response:
{
    "message": "Domain deleted",
    "name": "example.de"
}
{
    "message": "Domain name is missing"
}
{
    "message": "Domain not found"
}
{
    "message": "Catcher Delete not possible between 2:00 and 4:00am"
}

Domain Management

List all domains

GET
https://api.elitedomains.de
/domains
requires authentication

Retrieve a paginated list of all domains in your account.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number for pagination.

Example:
1
per_page
integer

Number of results per page. Default: 500, Max: 500.

Example:
500
tags
string

Filter by tags (comma-separated tag names, e.g. premium,aged). A domain must have all listed tags.

Example:
premium,aged
tld
string

Filter by TLD (comma-separated, e.g. de,com).

Example:
de
order_by
string

Field to order by. Default: created_at. Options: created_at, name, paid_until, expires_at, auto_expire, handle, tags.

Must be one of:
  • created_at
  • name
  • paid_until
  • expires_at
  • auto_expire
  • handle
  • tags
Example:
created_at
order_direction
string

Order direction. Default: desc. Options: asc, desc.

Must be one of:
  • asc
  • desc
Example:
desc

Response Fields

Example request:
curl --request GET \
    --get "https://api.elitedomains.de/domains?page=1&per_page=500&tags=premium%2Caged&tld=de&order_by=created_at&order_direction=desc" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "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"
        }
    ]
}

List domain filter options

GET
https://api.elitedomains.de
/domains/filters
requires authentication

Retrieve the tags and TLDs your domains can be filtered by via GET /domains, along with how many domains currently match each option.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Response Fields

Example request:
curl --request GET \
    --get "https://api.elitedomains.de/domains/filters" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "tags": [
        {
            "name": "Premium",
            "slug": "premium",
            "count": 12
        },
        {
            "name": "Aged",
            "slug": "aged",
            "count": 4
        }
    ],
    "tlds": [
        {
            "tld": "de",
            "count": 340
        },
        {
            "tld": "com",
            "count": 58
        }
    ]
}

List TLD prices

GET
https://api.elitedomains.de
/domains/prices
requires authentication

Retrieve the prices for all top-level domains (TLDs) available for registration. All prices are net (excluding VAT) in EUR and rounded to up to 3 decimal places.

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 interval object states the billing interval each price value is quoted for: yearly, monthly (e.g. some accounts are billed monthly for .de) or one_time. The original_price object holds the standard yearly list price without any promotions or individual pricing — it is always yearly, even when interval reports a different cadence for price (e.g. a negotiated monthly .de renew price), so do not divide price by original_price to derive a discount unless interval is yearly. 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.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

tld
string

Filter the result by a single TLD. The leading dot is optional.

Example:
de

Response Fields

Example request:
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"
Example response:
{
    "data": [
        {
            "tld": "de",
            "price": {
                "reg": 5,
                "transfer": 5,
                "renew": 5,
                "restore": 80
            },
            "interval": {
                "reg": "yearly",
                "transfer": "yearly",
                "renew": "yearly",
                "restore": "yearly"
            },
            "original_price": {
                "reg": 5,
                "transfer": 5,
                "renew": 5,
                "restore": 80
            },
            "custom": {
                "reg": false,
                "transfer": false,
                "renew": false,
                "restore": false
            }
        }
    ]
}

Register or transfer a domain

POST
https://api.elitedomains.de
/domains
requires authentication

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.

This endpoint may execute registry operations and counts against your API rate limit.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
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\"
        }
    }
}"
Example response:
{
    "message": "Domain registered successfully",
    "name": "example.de",
    "period": 12,
    "payment": "captured"
}
{
    "message": "Domain transferred successfully",
    "name": "example.de",
    "period": 12,
    "payment": "captured"
}
{
    "message": "Domain transfer initiated",
    "name": "example.com",
    "period": 12,
    "payment": "captured"
}
{
    "message": "Domain registered successfully",
    "name": "example.com",
    "period": 12,
    "payment": "authorized",
    "payment_warning": "The payment could not be captured yet and remains authorized. No action is required; the charge will be settled by us."
}
{
    "message": "Domain name is missing"
}
{
    "message": "Domain name is invalid"
}
{
    "message": "This TLD is not supported"
}
{
    "message": "Invalid period. Allowed values (months): 12, 24, 36",
    "allowed_periods": [
        12,
        24,
        36
    ]
}
{
    "message": "Authcode invalid"
}
{
    "message": "Default handle in your accounts sale settings required"
}
{
    "message": "An instant payment method (credit card or PayPal) is required for this order. Please add one in your billing settings."
}
{
    "message": "Payment could not be authorized. Please check your payment method."
}
{
    "message": "The request was rejected by the registry"
}
{
    "message": "Domain already registered"
}
{
    "message": "Domain already in your account"
}

Update domain tags

POST
https://api.elitedomains.de
/domains/tags
requires authentication

Add or update tags for a specific domain in your portfolio. Tags help organize and categorize your domains.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
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\"
    ]
}"
Example response:
{
    "tags": [
        "premium",
        "aged",
        "brandable"
    ],
    "message": "Tags saved."
}
{
    "message": "Domain name is invalid"
}
{
    "message": "Domain not found"
}

Check domain availability

GET
https://api.elitedomains.de
/domains/check
requires authentication

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.

This endpoint may execute registry operations and counts against your API rate limit.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

name
string
required

The domain name to check.

Example:
example.de

Response Fields

Example request:
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"
Example response:
{
    "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
}
{
    "name": "example.de",
    "message": "connect",
    "tld": "de",
    "status": "connect",
    "action": "transfer",
    "authinfo_required": true,
    "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
}
{
    "message": "Domain name is missing"
}
{
    "message": "Domain name is invalid"
}
{
    "message": "This TLD is not supported"
}

Check domain order options

GET
https://api.elitedomains.de
/domains/order/check
requires authentication

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).

This endpoint may execute registry operations and counts against your API rate limit.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

name
string
required

The domain name to check.

Example:
example.com

Response Fields

Example request:
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"
Example response:
{
    "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
}
{
    "name": "example.com",
    "message": "Domain can be transferred",
    "tld": "com",
    "status": "connect",
    "action": "transfer",
    "authinfo_required": true,
    "periods": [
        {
            "months": 12,
            "price": 9.5,
            "price_gross": 11.31
        }
    ],
    "default_period": 12,
    "price": 9.5,
    "price_gross": 11.31,
    "tax_rate": 19,
    "billing": "instant",
    "instant_payment_method_available": true
}
{
    "name": "example.com",
    "message": "Domain can currently not be ordered",
    "tld": "com",
    "status": "transfer_lock",
    "action": null
}
{
    "message": "Domain name is missing"
}
{
    "message": "Domain name is invalid"
}
{
    "message": "This TLD is not supported"
}

Update a domain

PATCH
https://api.elitedomains.de
/domains
requires authentication

Update domain settings such as redirector configuration or handle assignment.

This endpoint may execute registry operations and counts against your API rate limit.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
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
}"
Example response:
{
    "message": "Domain updated"
}
{
    "message": "Domain name is missing"
}
{
    "message": "Validation error details"
}
{
    "message": "The request was rejected by the registry"
}
{
    "message": "Domain not found"
}
{
    "message": "Handle not found"
}

Delete or transit a domain

DELETE
https://api.elitedomains.de
/domains
requires authentication

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.

This endpoint may execute registry operations and counts against your API rate limit.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
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
}"
Example response:
{
    "message": "Domain deleted",
    "name": "example.de"
}
{
    "message": "Domain put in transit",
    "name": "example.de"
}
{
    "message": "Domain name is missing"
}
{
    "message": "The request was rejected by the registry"
}
{
    "message": "Transit not supported."
}
{
    "message": "Domain not found"
}

Get domain AuthInfo code

GET
https://api.elitedomains.de
/domains/authinfo
requires authentication

Retrieve the AuthInfo/transfer code for a domain. If none exists, a new one will be generated.

This endpoint may execute registry operations and counts against your API rate limit.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

name
string
required

The domain name.

Example:
example.de

Response Fields

Example request:
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"
Example response:
{
    "message": "Authcode exists",
    "name": "example.de",
    "authinfo": "EDxHc$f3xx",
    "expires_at": "07.04.2024 21:34:35"
}
{
    "message": "Domain name is missing"
}
{
    "message": "The request was rejected by DENIC"
}
{
    "message": "Domain not found"
}

Check AuthInfo2 availability

GET
https://api.elitedomains.de
/domains/authinfo2/check
requires authentication

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.

This endpoint may execute registry operations and counts against your API rate limit.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

name
string
required

The domain name to check.

Example:
example.de

Response Fields

Example request:
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"
Example response:
{
    "name": "example.de",
    "available": true,
    "message": "AuthInfo2 can be ordered"
}
{
    "name": "example.de",
    "available": false,
    "message": "AuthInfo2 cannot be ordered for this domain"
}
{
    "message": "Domain name is missing"
}
{
    "message": "Domain name is invalid"
}
{
    "message": "AuthInfo2 is only available for .de domains"
}
{
    "message": "AuthInfo2 ordering via API requires monthly invoice billing (Sammelrechnung)"
}

Order AuthInfo2

POST
https://api.elitedomains.de
/domains/authinfo2
requires authentication

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.

This endpoint may execute registry operations and counts against your API rate limit.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
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\"
}"
Example response:
{
    "name": "example.de",
    "message": "AuthInfo2 letter for example.de has been ordered and will be sent within 1-2 business days."
}
{
    "name": "example.de",
    "message": "AuthInfo2 would be ordered (sandbox mode)"
}
{
    "message": "Domain name is missing"
}
{
    "message": "Domain name is invalid"
}
{
    "message": "AuthInfo2 is only available for .de domains"
}
{
    "message": "AuthInfo2 cannot be ordered for this domain"
}
{
    "message": "AuthInfo2 ordering via API requires monthly invoice billing (Sammelrechnung)"
}
{
    "message": "There is a problem with your payment method. Please contact support."
}

Add domain to Sedo marketplace

POST
https://api.elitedomains.de
/domains/sedo
requires authentication

List a domain on the Sedo marketplace with a specified price. The domain will be configured for Paynow transactions.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
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
}"
Example response:
{
    "message": "SEDO-Domain added or updated successfully",
    "name": "example.de"
}
{
    "message": "Domain name is missing"
}
{
    "message": "Price is required and must be greater than 0"
}
{
    "message": "Domain name is invalid"
}
{
    "message": "Domain not found in your inventory"
}
{
    "message": "An error occurred while processing the SEDO task"
}

Domain Offers

List all domain offers

GET
https://api.elitedomains.de
/offers
requires authentication

Retrieve a paginated list of all sale pages (domain offers) in your account with relevant data including status, pricing, visitors, leads, and template information.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number for pagination.

Example:
1
per_page
integer

Number of results per page. Default: 50, Max: 500.

Example:
50
type
string

Filter by offer type. Options: paynow, 4sale.

Must be one of:
  • paynow
  • 4sale
Example:
paynow
status
string

Filter by status. Options: verified, hold, not_configured, unverified, inactive, deconnect.

Must be one of:
  • verified
  • hold
  • not_configured
  • unverified
  • inactive
  • deconnect
Example:
verified
is_internal
boolean

Filter by internal domains (true) or external domains (false).

Example:
true
template
string

Filter by template name.

Example:
slim
min_price
integer

Minimum price filter.

Example:
99
max_price
integer

Maximum price filter.

Example:
5000
min_visitors
integer

Minimum visitors in the last 30 days.

Example:
10
tags
string

Filter by tags (comma-separated tag names, e.g. premium,short). An offer must have all listed tags.

Example:
premium,short
tld
string

Filter by TLD (comma-separated, e.g. de,com).

Example:
de
order_by
string

Field to order by. Default: created_at. Options: created_at, name, price, visitors, leads, trend, color, template, status, tags.

Must be one of:
  • created_at
  • name
  • price
  • visitors
  • leads
  • trend
  • color
  • template
  • status
  • tags
Example:
visitors
order_direction
string

Order direction. Default: desc. Options: asc, desc.

Must be one of:
  • asc
  • desc
Example:
desc

Response Fields

Example request:
curl --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&tags=premium%2Cshort&tld=de&order_by=visitors&order_direction=desc" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "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"
            ]
        }
    ]
}
{
    "message": "Unauthenticated."
}

List offer filter options

GET
https://api.elitedomains.de
/offers/filters
requires authentication

Retrieve the tags and TLDs your sale pages can be filtered by via GET /offers, along with how many sale pages currently match each option.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Response Fields

Example request:
curl --request GET \
    --get "https://api.elitedomains.de/offers/filters" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "tags": [
        {
            "name": "Premium",
            "slug": "premium",
            "count": 8
        },
        {
            "name": "Short",
            "slug": "short",
            "count": 3
        }
    ],
    "tlds": [
        {
            "tld": "de",
            "count": 90
        },
        {
            "tld": "com",
            "count": 35
        }
    ]
}

Create a sale page

POST
https://api.elitedomains.de
/offers
requires authentication

Create a sale page (domain offer) for a domain, identified by its domain name. Domains you manage with ELITEDOMAINS become an internal sale page (status: verified right away); any other domain becomes an external sale page and stays unverified until its nameservers are pointed at ELITEDOMAINS, unless your account is set up to skip that verification.

For an external domain, the sale page is saved before the DNS records that carry out its verification are set up; if a 500 is returned for an external domain, the sale page may already exist in a partially set up state. Retrying the request will then fail with 409 rather than completing the setup — check GET /offers for the domain's status, or use PATCH /offers to adjust its configuration, instead of retrying POST /offers.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://api.elitedomains.de/offers" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"example.de\",
    \"use_default_config\": false,
    \"template\": \"slim\",
    \"price\": 2999,
    \"price_suggest\": true,
    \"qualified_leads\": false,
    \"theme_color\": \"blue\",
    \"hide_on_marketplace\": false,
    \"route_domain\": true,
    \"status\": \"activate\",
    \"display_name\": \"Example.de\",
    \"headline\": \"This domain is for sale\",
    \"text\": \"Contact us to make an offer.\"
}"
Example response:
{
    "message": "Sale page created",
    "name": "example.de",
    "status": "verified",
    "is_internal": true
}
{
    "message": "Sale page would be created (sandbox mode)",
    "name": "example.de"
}
{
    "message": "Domain name is missing"
}
{
    "message": "Domain name is invalid"
}
{
    "message": "Template is required"
}
{
    "message": "Template must be one of: default, smart, expert, slim, sicherheit, vertrieb"
}
{
    "message": "Price must be a whole number"
}
{
    "message": "Price must be between 99 and 10000000"
}
{
    "message": "Theme color must be one of: blue, green, yellow, orange, red, purple, gold, black"
}
{
    "message": "Status must be one of: activate, deactivate"
}
{
    "message": "Display name must match the domain name (only letter casing may differ)"
}
{
    "message": "Text is required when headline is provided"
}
{
    "message": "Instant-buy templates require either a price or price_suggest to be enabled"
}
{
    "message": "A payout bank account is required in your account settings before creating sale pages"
}
{
    "message": "This TLD is not supported"
}
{
    "message": "Invalid configuration",
    "fields": [
        "theme_color"
    ]
}
{
    "message": "Sale page already exists"
}

Update a sale page

PATCH
https://api.elitedomains.de
/offers
requires authentication

Update the configuration of a sale page (domain offer), identified by its domain name. Only the fields provided in the request are changed; any field left out keeps its current value. Setting status to deactivate also stops the domain from routing to the sale page, if it was.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request PATCH \
    "https://api.elitedomains.de/offers" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"example.de\",
    \"template\": \"slim\",
    \"price\": 2999,
    \"price_suggest\": true,
    \"qualified_leads\": false,
    \"theme_color\": \"blue\",
    \"hide_on_marketplace\": false,
    \"route_domain\": true,
    \"status\": \"activate\",
    \"display_name\": \"Example.de\",
    \"headline\": \"This domain is for sale\",
    \"text\": \"Contact us to make an offer.\"
}"
Example response:
{
    "message": "Sale page updated",
    "name": "example.de"
}
{
    "message": "Sale page would be updated (sandbox mode)",
    "name": "example.de"
}
{
    "message": "Domain name is missing"
}
{
    "message": "Domain name is invalid"
}
{
    "message": "No changes provided"
}
{
    "message": "Price must be a whole number"
}
{
    "message": "Price must be between 99 and 10000000"
}
{
    "message": "Template must be one of: default, smart, expert, slim, sicherheit, vertrieb"
}
{
    "message": "Theme color must be one of: blue, green, yellow, orange, red, purple, gold, black"
}
{
    "message": "Status must be one of: activate, deactivate"
}
{
    "message": "Display name must match the domain name (only letter casing may differ)"
}
{
    "message": "Text is required when headline is provided"
}
{
    "message": "Instant-buy templates require either a price or price_suggest to be enabled"
}
{
    "message": "Invalid configuration",
    "fields": [
        "theme_color"
    ]
}
{
    "message": "Sale page not found"
}

Update the price of a sale page

PATCH
https://api.elitedomains.de
/offers/price
requires authentication

Update the asking price of a sale page (domain offer), identified by its domain name.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request PATCH \
    "https://api.elitedomains.de/offers/price" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"example.de\",
    \"price\": 2999
}"
Example response:
{
    "message": "Sale price updated",
    "name": "example.de",
    "price": 2999
}
{
    "message": "Sale price would be updated (sandbox mode)",
    "name": "example.de",
    "price": 2999
}
{
    "message": "Domain name is missing"
}
{
    "message": "Domain name is invalid"
}
{
    "message": "Price is missing"
}
{
    "message": "Price must be a whole number"
}
{
    "message": "Price must be between 99 and 10000000"
}
{
    "message": "Sale page not found"
}

Delete a sale page

DELETE
https://api.elitedomains.de
/offers
requires authentication

Delete a sale page (domain offer), identified by its domain name. This only removes the sale page; the domain itself is not affected.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
curl --request DELETE \
    "https://api.elitedomains.de/offers" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"name\": \"example.de\"
}"
Example response:
{
    "message": "Sale page deleted",
    "name": "example.de"
}
{
    "message": "Sale page would be deleted (sandbox mode)",
    "name": "example.de"
}
{
    "message": "Domain name is missing"
}
{
    "message": "Domain name is invalid"
}
{
    "message": "Sale page not found"
}

Handle Management

List all handles

GET
https://api.elitedomains.de
/handles
requires authentication

Retrieve a paginated list of all contact handles in your account.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number for pagination.

Example:
1
per_page
integer

Number of results per page. Default: 500, Max: 500.

Example:
500

Response Fields

Example request:
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"
Example response:
{
    "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"
        }
    ]
}

Create a new handle

POST
https://api.elitedomains.de
/handles
requires authentication

Add a new contact handle to your account. Handles are used for domain contact information at the registry.

This endpoint may execute registry operations and counts against your API rate limit.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Body Parameters

Response Fields

Example request:
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]\"
}"
Example response:
{
    "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"
}
{
    "message": "Your input is invalid or incomplete.",
    "error": {
        "field": [
            "error message"
        ]
    }
}
{
    "message": "Unknown error"
}

Update a handle

PATCH
https://api.elitedomains.de
/handles/{id}
requires authentication

Update an existing contact handle. Only include fields you want to update.

This endpoint may execute registry operations and counts against your API rate limit.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

id
integer
required

The handle ID.

Example:
123

Body Parameters

Response Fields

Example request:
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]\"
}"
Example response:
{
    "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"
}
{
    "message": "Your input is invalid or incomplete.",
    "error": {
        "field": [
            "error message"
        ]
    }
}
{
    "message": "Handle not found"
}

Invoices

List invoices

GET
https://api.elitedomains.de
/invoices
requires authentication

Retrieve a paginated list of your invoices, most recent first. Amounts are in EUR.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number for pagination.

Example:
1
per_page
integer

Number of results per page. Default: 50, Max: 500.

Example:
50
status
string

Filter by status. Accepts a comma-separated list of statuses (draft, pending, complete, failed, dispute, incomplete, inkasso, lost, cancelled).

Example:
complete
from
string

Only invoices created on or after this date (YYYY-MM-DD).

Example:
2026-01-01
to
string

Only invoices created on or before this date (YYYY-MM-DD).

Example:
2026-06-30
order_direction
string

Sort direction by invoice date. Default: desc (newest first). Options: asc, desc.

Must be one of:
  • asc
  • desc
Example:
desc

Body Parameters

Response Fields

Example request:
curl --request GET \
    --get "https://api.elitedomains.de/invoices?page=1&per_page=50&status=complete&from=2026-01-01&to=2026-06-30&order_direction=desc" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"from\": \"2026-07-17T13:46:18\",
    \"to\": \"2026-07-17T13:46:18\"
}"
Example response:
{
    "current_page": 1,
    "per_page": 50,
    "total": 1,
    "last_page": 1,
    "data": [
        {
            "id": 123,
            "number": "R202600123",
            "date": "2026-03-01T04:30:00.000000Z",
            "status": "complete",
            "payment_method": "card",
            "instant_payment": true,
            "amounts": {
                "net_amount": 100,
                "tax_percentage": 19,
                "tax_amount": 19,
                "gross_amount": 119,
                "warning_fee_amount": 0,
                "total_amount": 119,
                "paid_amount": 119,
                "open_amount": 0
            },
            "discounts": []
        }
    ]
}
{
    "message": "Unauthenticated."
}

Get an invoice

GET
https://api.elitedomains.de
/invoices/{id}
requires authentication

Retrieve a single invoice including its line items (positions), as printed on the invoice document. Amounts are in EUR.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

id
integer
required

The invoice ID, as returned by GET /invoices.

Example:
123

Response Fields

Example request:
curl --request GET \
    --get "https://api.elitedomains.de/invoices/123" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "id": 123,
    "number": "R202600123",
    "date": "2026-03-01T04:30:00.000000Z",
    "status": "complete",
    "payment_method": "card",
    "instant_payment": true,
    "amounts": {
        "net_amount": 100,
        "tax_percentage": 19,
        "tax_amount": 19,
        "gross_amount": 119,
        "warning_fee_amount": 0,
        "total_amount": 119,
        "paid_amount": 119,
        "open_amount": 0
    },
    "discounts": [],
    "positions": [
        {
            "label": "Verlängerung .de, 1 Jahr",
            "count": 20,
            "single_price": 5,
            "total": 100
        }
    ]
}
{
    "message": "Unauthenticated."
}
{
    "message": "Invoice not found"
}

List an invoice's service records

GET
https://api.elitedomains.de
/invoices/{id}/services
requires authentication

Retrieve the service records (Leistungsnachweis) of an invoice: one record per billed domain or service, mirroring the invoice's service record document/CSV. Type and period values match the document (German). Prices are net, in EUR.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

id
integer
required

The invoice ID, as returned by GET /invoices.

Example:
123

Response Fields

Example request:
curl --request GET \
    --get "https://api.elitedomains.de/invoices/123/services" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "invoice": {
        "id": 123,
        "number": "R202600123"
    },
    "data": [
        {
            "name": "example.de",
            "type": "Verlängerung",
            "period": "01.06.2026 - 30.06.2026",
            "price": 5
        }
    ]
}
{
    "message": "Unauthenticated."
}
{
    "message": "Invoice not found"
}

Journal

List the journal

GET
https://api.elitedomains.de
/journal
requires authentication

Retrieve a paginated list of journal entries recording changes made to your domains (registrations, transfers, renewals, handle/redirector changes, deletions, ...), most recent first.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number for pagination.

Example:
1
per_page
integer

Number of results per page. Default: 50, Max: 500.

Example:
50
domain
string

Filter by domain name (matches domains containing this value).

Example:
example.de
type
string

Filter by type of change. Comma-separated for multiple values.

Example:
domain-renewed,domain-transfer
source
string

Filter by where the change originated. Comma-separated for multiple values. Options: interface, api, mcp, customer_service, system, paynow.

Must be one of:
  • interface
  • api
  • mcp
  • customer_service
  • system
  • paynow
Example:
interface

Response Fields

Example request:
curl --request GET \
    --get "https://api.elitedomains.de/journal?page=1&per_page=50&domain=example.de&type=domain-renewed%2Cdomain-transfer&source=interface" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "current_page": 1,
    "per_page": 50,
    "total": 1,
    "last_page": 1,
    "data": [
        {
            "date": "2024-03-10T14:30:00.000000Z",
            "domain": "example.de",
            "type": "domain-renewed",
            "message": "Laufzeit verlängert",
            "source": "interface"
        }
    ]
}
{
    "message": "Unauthenticated."
}

Leads

List all leads

GET
https://api.elitedomains.de
/leads
requires authentication

Retrieve a paginated list of leads (interested buyers) across all your sale pages: buyer price suggestions, contact requests and abandoned checkouts that turned into a negotiation. Draft and in-progress checkout entries that have not become an actual lead yet are not included.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number for pagination.

Example:
1
per_page
integer

Number of results per page. Default: 50, Max: 500.

Example:
50
domain
string

Filter by domain name (matches domains containing this value).

Example:
example.de
order_by
string

Field to order by. Default: last_interaction_at. Options: last_interaction_at, first_contact_at, domain, current_price.

Must be one of:
  • last_interaction_at
  • first_contact_at
  • domain
  • current_price
Example:
last_interaction_at
order_direction
string

Order direction. Default: desc. Options: asc, desc.

Must be one of:
  • asc
  • desc
Example:
desc

Response Fields

Example request:
curl --request GET \
    --get "https://api.elitedomains.de/leads?page=1&per_page=50&domain=example.de&order_by=last_interaction_at&order_direction=desc" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "current_page": 1,
    "per_page": 50,
    "total": 1,
    "last_page": 1,
    "data": [
        {
            "id": 123,
            "domain": "example.de",
            "source": "buyer_price_suggestion",
            "original_price": 2999,
            "current_price": 2500,
            "first_contact_at": "2024-03-08T09:15:00.000000Z",
            "last_interaction_at": "2024-03-10T14:30:00.000000Z",
            "metadata": {
                "timezone": "Europe/Berlin",
                "city": "Berlin",
                "country": "Germany",
                "device_type": "Desktop"
            }
        }
    ]
}
{
    "message": "Unauthenticated."
}

Send a counter-offer

POST
https://api.elitedomains.de
/leads/{id}/counter-offer
requires authentication

Set a new asking price for a lead, identified by its lead ID from GET /leads. Use this both to send the seller's first price to a lead that only made contact (no price on the table yet), and to counter a buyer's pending price suggestion. The buyer receives an email with the new price and a checkout link, valid for 72 hours.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

id
integer
required

The lead ID, as returned by GET /leads.

Example:
123

Body Parameters

Response Fields

Example request:
curl --request POST \
    "https://api.elitedomains.de/leads/123/counter-offer" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json" \
    --data "{
    \"price\": 2500
}"
Example response:
{
    "message": "Counter-offer sent",
    "id": 123,
    "price": 2500
}
{
    "message": "Counter-offer would be sent (sandbox mode)",
    "id": 123,
    "price": 2500
}
{
    "message": "Price is missing"
}
{
    "message": "Price must be a whole number"
}
{
    "message": "Price must be between 99 and 10000000"
}
{
    "message": "This lead has no buyer email on file"
}
{
    "message": "Lead not found"
}

Accept a price suggestion

POST
https://api.elitedomains.de
/leads/{id}/accept
requires authentication

Accept a lead's pending buyer price suggestion, identified by its lead ID from GET /leads. The buyer receives an email confirming their price and a checkout link to complete the purchase, valid for 72 hours.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

URL Parameters

id
integer
required

The lead ID, as returned by GET /leads.

Example:
123

Response Fields

Example request:
curl --request POST \
    "https://api.elitedomains.de/leads/123/accept" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "message": "Price suggestion accepted",
    "id": 123,
    "price": 2500
}
{
    "message": "Price suggestion would be accepted (sandbox mode)",
    "id": 123,
    "price": 2500
}
{
    "message": "This lead has no pending price suggestion to accept"
}
{
    "message": "This lead has no buyer email on file"
}
{
    "message": "Lead not found"
}

Transactions

List transactions

GET
https://api.elitedomains.de
/transactions
requires authentication

Retrieve a paginated list of your domain sale transactions (purchases made by buyers through Paynow), most recent first. Buyer personal data is never included.

Headers

Authorization
Example:
Bearer {YOUR_TOKEN}
Content-Type
Example:
application/json
Accept
Example:
application/json

Query Parameters

page
integer

The page number for pagination.

Example:
1
per_page
integer

Number of results per page. Default: 50, Max: 500.

Example:
50
domain
string

Filter by domain name (matches domains containing this value).

Example:
example.de
order_by
string

Field to sort by. Default: purchase_date. Options: purchase_date, completion_date, domain, net_price, gross_price, payout_amount.

Must be one of:
  • purchase_date
  • completion_date
  • domain
  • net_price
  • gross_price
  • payout_amount
Example:
purchase_date
order_direction
string

Sort direction. Default: desc. Options: asc, desc.

Must be one of:
  • asc
  • desc
Example:
desc

Response Fields

Example request:
curl --request GET \
    --get "https://api.elitedomains.de/transactions?page=1&per_page=50&domain=example.de&order_by=purchase_date&order_direction=desc" \
    --header "Authorization: Bearer {YOUR_TOKEN}" \
    --header "Content-Type: application/json" \
    --header "Accept: application/json"
Example response:
{
    "current_page": 1,
    "per_page": 50,
    "total": 1,
    "last_page": 1,
    "data": [
        {
            "id": 123,
            "domain": "example.de",
            "status": {
                "payment": "success",
                "transfer": "transferred",
                "payout": "done"
            },
            "price": {
                "net_price": 1000,
                "gross_price": 1190,
                "tax_percentage": 19,
                "tax_amount": 190,
                "fee_percentage": 8,
                "fee_amount": 80,
                "payout_amount": 1110
            },
            "payment_method": "paypal",
            "purchase_date": "2024-03-10T14:30:00.000000Z",
            "completion_date": "2024-03-15T09:00:00.000000Z",
            "documents": {
                "invoice": "https://app.elitedomains.de/example.de/invoice/MTIz/9b1f2c3a-...",
                "provision": "https://app.elitedomains.de/example.de/provision/MTIz/9b1f2c3a-..."
            }
        }
    ]
}
{
    "message": "Unauthenticated."
}