openapi: 3.0.3
info:
title: 'ELITEDOMAINS API Documentation'
description: 'The ELITEDOMAINS API allows you to manage domains, handles, and catcher orders programmatically through a simple REST API.'
version: 1.0.0
servers:
-
url: 'https://api.elitedomains.de'
tags:
-
name: 'Backorder Management'
description: ''
-
name: 'Domain Management'
description: ''
-
name: 'Domain Offers'
description: ''
-
name: Endpoints
description: ''
-
name: 'Handle Management'
description: ''
-
name: Invoices
description: ''
-
name: Journal
description: ''
-
name: Leads
description: ''
-
name: Notes
description: ''
-
name: Transactions
description: ''
components:
securitySchemes:
default:
type: http
scheme: bearer
description: 'You can retrieve your personal access token by visiting your account settings page in the ELITEDOMAINS dashboard.'
security:
-
default: []
paths:
/backorder/droplist:
get:
summary: 'List the droplist'
operationId: listTheDroplist
description: "Discover .de domains that are about to be deleted: domains in the redemption grace period (RGP) and quarantine domains whose owner verification failed, in one list. Every entry carries its type, an estimated drop date with its precision, the rating and the DNS usage of other TLDs. Dates are estimates and may change.\n\nRequires a token with the `catcher:read` scope (read access to Backorder)."
parameters:
-
in: query
name: page
description: 'The page number for pagination.'
example: 1
required: false
schema:
type: integer
description: 'The page number for pagination.'
example: 1
-
in: query
name: per_page
description: 'Number of results per page. Default: 100, Max: 500.'
example: 100
required: false
schema:
type: integer
description: 'Number of results per page. Default: 100, Max: 500.'
example: 100
-
in: query
name: type
description: 'Only one type: `rgp` (deleted, in the redemption grace period) or `quarantine` (deactivated by DENIC after a failed owner verification). Default: both. Options: `rgp`, `quarantine`.'
example: null
required: false
schema:
type: string
description: 'Only one type: `rgp` (deleted, in the redemption grace period) or `quarantine` (deactivated by DENIC after a failed owner verification). Default: both. Options: `rgp`, `quarantine`.'
example: null
enum:
- rgp
- quarantine
-
in: query
name: search
description: 'Domain name contains this string; IDNs are supported.'
example: null
required: false
schema:
type: string
description: 'Domain name contains this string; IDNs are supported.'
example: null
-
in: query
name: tld
description: 'Only these TLDs (comma-separated, e.g. `de`).'
example: de
required: false
schema:
type: string
description: 'Only these TLDs (comma-separated, e.g. `de`).'
example: de
-
in: query
name: tomorrow
description: 'Only domains expected to drop tomorrow (Europe/Berlin). For an RGP date range, any overlap with tomorrow counts.'
example: null
required: false
schema:
type: boolean
description: 'Only domains expected to drop tomorrow (Europe/Berlin). For an RGP date range, any overlap with tomorrow counts.'
example: null
-
in: query
name: next_7_days
description: 'Only domains expected to drop from today through today + 7 days (Europe/Berlin). Quarantine domains whose date has passed are included, as DENIC may still release them; passed RGP dates are not.'
example: null
required: false
schema:
type: boolean
description: 'Only domains expected to drop from today through today + 7 days (Europe/Berlin). Quarantine domains whose date has passed are included, as DENIC may still release them; passed RGP dates are not.'
example: null
-
in: query
name: authinfo
description: '1: only RGP domains with a detected AuthInfo2, which can postpone the deletion (`authinfo` true); 0: all others.'
example: null
required: false
schema:
type: boolean
description: '1: only RGP domains with a detected AuthInfo2, which can postpone the deletion (`authinfo` true); 0: all others.'
example: null
-
in: query
name: added
description: '1: added (already in your catcher); 0: not added.'
example: null
required: false
schema:
type: boolean
description: '1: added (already in your catcher); 0: not added.'
example: null
-
in: query
name: other_tlds_taken
description: 'Other TLDs: comma-separated list of at, ch, eu, com, net, org that must be taken (A record found).'
example: 'com,net'
required: false
schema:
type: string
description: 'Other TLDs: comma-separated list of at, ch, eu, com, net, org that must be taken (A record found).'
example: 'com,net'
-
in: query
name: other_tlds_free
description: 'Other TLDs: comma-separated list of at, ch, eu, com, net, org that must be free (no A record). Unchecked TLDs match neither filter.'
example: at
required: false
schema:
type: string
description: 'Other TLDs: comma-separated list of at, ch, eu, com, net, org that must be free (no A record). Unchecked TLDs match neither filter.'
example: at
-
in: query
name: order_by
description: 'Default: dropdate. Options: `dropdate`, `name`, `rating`.'
example: null
required: false
schema:
type: string
description: 'Default: dropdate. Options: `dropdate`, `name`, `rating`.'
example: null
enum:
- dropdate
- name
- rating
-
in: query
name: order_direction
description: 'Default: asc. Options: `asc`, `desc`.'
example: null
required: false
schema:
type: string
description: 'Default: asc. Options: `asc`, `desc`.'
example: null
enum:
- asc
- desc
responses:
503:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Service Unavailable'
properties:
message:
type: string
example: 'Service Unavailable'
tags:
- 'Backorder Management'
/backorder/catcher:
get:
summary: 'List all catcher orders'
operationId: listAllCatcherOrders
description: "Retrieve a paginated list of all domain catcher orders in your account. Pass `list` to get only the Catcher list (`catcher`) or only the archive, as the web interface shows them.\n\nRequires a token with the `catcher:read` scope (read access to Backorder)."
parameters:
-
in: query
name: page
description: 'The page number for pagination.'
example: 1
required: false
schema:
type: integer
description: 'The page number for pagination.'
example: 1
-
in: query
name: per_page
description: 'Number of results per page. Default: 500, Max: 500.'
example: 500
required: false
schema:
type: integer
description: 'Number of results per page. Default: 500, Max: 500.'
example: 500
-
in: query
name: list
description: 'Return only one of the two lists the web interface shows. `catcher` (formerly `droplist`, still accepted): orders that are still being caught (`wait`, `rgp`, `quarantine`, `authinfo`, `authinfo_check`), that have no drop date, or whose drop date is at most 7 days back. `archive`: finished orders whose drop date is more than 7 days back — including orders you removed from your catcher, which no other listing returns; for these, `users` also counts removed orders. Omit the parameter to get every order still in your catcher, from both lists. Options: `catcher`, `archive`.'
example: archive
required: false
schema:
type: string
description: 'Return only one of the two lists the web interface shows. `catcher` (formerly `droplist`, still accepted): orders that are still being caught (`wait`, `rgp`, `quarantine`, `authinfo`, `authinfo_check`), that have no drop date, or whose drop date is at most 7 days back. `archive`: finished orders whose drop date is more than 7 days back — including orders you removed from your catcher, which no other listing returns; for these, `users` also counts removed orders. Omit the parameter to get every order still in your catcher, from both lists. Options: `catcher`, `archive`.'
example: archive
enum:
- catcher
- archive
-
in: query
name: tags
description: 'Filter by tags (comma-separated tag names, e.g. `priority,short`). An order must have all listed tags.'
example: priority
required: false
schema:
type: string
description: 'Filter by tags (comma-separated tag names, e.g. `priority,short`). An order must have all listed tags.'
example: priority
-
in: query
name: tld
description: 'Filter by TLD (comma-separated, e.g. `de,com`).'
example: de
required: false
schema:
type: string
description: 'Filter by TLD (comma-separated, e.g. `de,com`).'
example: de
-
in: query
name: order_by
description: '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`.'
example: dropdate_at
required: false
schema:
type: string
description: '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`.'
example: dropdate_at
enum:
- created_at
- queued_at
- price
- status
- dropdate_at
- tags
-
in: query
name: order_direction
description: 'Order direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
required: false
schema:
type: string
description: 'Order direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
enum:
- asc
- desc
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
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
note: 'Backorder for a client, budget approved.'
properties:
current_page:
type: integer
example: 1
description: 'The current page number.'
per_page:
type: integer
example: 500
description: 'Number of results per page.'
data:
type: array
example:
-
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
note: 'Backorder for a client, budget approved.'
description: 'The results on this page.'
items:
type: object
properties:
name:
type: string
example: example.de
status:
type: string
example: rgp
users:
type: integer
example: 3
price:
type: integer
example: 5
dropdate_at:
type: string
example: '2024-03-15'
created_at:
type: string
example: '2024-03-10 14:30:00'
tags:
type: array
example:
- tag1
- tag2
items:
type: string
note:
type: string
example: 'Backorder for a client, budget approved.'
tags:
- 'Backorder Management'
post:
summary: 'Add domain to catcher'
operationId: addDomainToCatcher
description: "Add an RGP or quarantine (serverHold) domain to the catcher. Successfully caught domains will be registered using your default handle configuration.\n\nIf the domain is already in your catcher orders, the price can be updated instead by passing a different `price` value.\nAn order whose drop is over (caught or lost) does not count: adding the domain again places a new order.\n\nThis endpoint may execute registry operations and counts against your API rate limit.\n\nRequires a token with the `catcher:write` scope (write access to Backorder)."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: Success
type: object
example:
message: 'Domain added to catcher'
name: example.de
properties:
message:
type: string
example: 'Domain added to catcher'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
-
description: 'Price updated'
type: object
example:
message: 'Price updated to 10€'
name: example.de
properties:
message:
type: string
example: 'Price updated to 10€'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The result message.'
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'The result message.'
-
description: 'Unsupported TLD'
type: object
example:
message: 'Backorder is only available for .de domains'
properties:
message:
type: string
example: 'Backorder is only available for .de domains'
description: 'The result message.'
-
description: 'Missing handle'
type: object
example:
message: 'Default handle in your accounts settings required'
properties:
message:
type: string
example: 'Default handle in your accounts settings required'
description: 'The result message.'
403:
description: 'Account locked'
content:
application/json:
schema:
type: object
example:
message: 'Your backorder access is currently locked. Please check your invoices or contact support.'
properties:
message:
type: string
example: 'Your backorder access is currently locked. Please check your invoices or contact support.'
description: 'The result message.'
405:
description: 'Droptime restriction'
content:
application/json:
schema:
type: object
example:
message: 'Catcher Create not possible between 2:00 and 4:00am'
properties:
message:
type: string
example: 'Catcher Create not possible between 2:00 and 4:00am'
description: 'The result message.'
409:
description: 'Already added'
content:
application/json:
schema:
type: object
example:
message: 'Domain already added to catcher with price 5€'
properties:
message:
type: string
example: 'Domain already added to catcher with price 5€'
description: 'The result message.'
tags:
- 'Backorder Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The RGP or serverHold (quarantine) domain name to catch. Quarantine bids wait until the drop night is confirmed.'
example: example.de
price:
type: integer
description: 'The maximum price you are willing to pay in EUR (minimum 2). If the domain is already in your catcher orders, passing a different price here updates it instead of failing. An order whose drop is over does not count; the domain is then added as a new order.'
example: 10
required:
- name
delete:
summary: 'Remove domain from catcher'
operationId: removeDomainFromCatcher
description: "Remove a domain from your catcher order list.\n\nRequires a token with the `catcher:write` scope (write access to Backorder)."
parameters: []
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
message: 'Domain deleted'
name: example.de
properties:
message:
type: string
example: 'Domain deleted'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
400:
description: 'Missing domain name'
content:
application/json:
schema:
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The result message.'
404:
description: 'Domain not found'
content:
application/json:
schema:
type: object
example:
message: 'Domain not found'
properties:
message:
type: string
example: 'Domain not found'
description: 'The result message.'
405:
description: 'Droptime restriction'
content:
application/json:
schema:
type: object
example:
message: 'Catcher Delete not possible between 2:00 and 4:00am'
properties:
message:
type: string
example: 'Catcher Delete not possible between 2:00 and 4:00am'
description: 'The result message.'
tags:
- 'Backorder Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The domain name to remove.'
example: example.de
required:
- name
/backorder/catcher/filters:
get:
summary: 'List catcher filter options'
operationId: listCatcherFilterOptions
description: "Retrieve the tags and TLDs your catcher orders can be filtered by via `GET /backorder/catcher`, along with how many orders currently match each option.\n\nRequires a token with the `catcher:read` scope (read access to Backorder)."
parameters: []
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
tags:
-
name: Priority
slug: priority
count: 3
tlds:
-
tld: de
count: 12
properties:
tags:
type: array
example:
-
name: Priority
slug: priority
count: 3
description: 'Tags you can pass to the `tags` filter on GET /backorder/catcher, with the number of matching orders for each.'
items:
type: object
properties:
name:
type: string
example: Priority
slug:
type: string
example: priority
count:
type: integer
example: 3
tlds:
type: array
example:
-
tld: de
count: 12
description: 'TLDs you can pass to the `tld` filter on GET /backorder/catcher, with the number of matching orders for each.'
items:
type: object
properties:
tld:
type: string
example: de
count:
type: integer
example: 12
tags:
- 'Backorder Management'
/backorder/catcher/info:
get:
summary: 'Get catcher domain info'
operationId: getCatcherDomainInfo
description: "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.\n\nRequires a token with the `catcher:read` scope (read access to Backorder)."
parameters:
-
in: query
name: name
description: 'The domain name.'
example: example.de
required: true
schema:
type: string
description: 'The domain name.'
example: example.de
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
name: example.de
status: rgp
users: 3
dropdate_at: '2024-03-15 00:00:00'
properties:
name:
type: string
example: example.de
description: 'The domain name.'
status:
type: string
example: rgp
description: 'Catcher status of the domain. New entries show `wait` until they are processed (which takes up to two minutes). Options: `wait`, `taken`, `free`, `failed`, `success`, `rgp`, `authinfo`, `authinfo_check`, `restored`, `quarantine`.'
enum:
- wait
- taken
- free
- failed
- success
- rgp
- authinfo
- authinfo_check
- restored
- quarantine
users:
type: integer
example: 3
description: 'Number of users competing for this domain.'
dropdate_at:
type: string
example: '2024-03-15 00:00:00'
description: 'Drop date (YYYY-MM-DD), if known. NULL for quarantine until the drop night is confirmed.'
nullable: true
400:
description: 'Missing domain name'
content:
application/json:
schema:
type: object
example:
message: 'Domain name is missing'
name: null
properties:
message:
type: string
example: 'Domain name is missing'
name:
type: string
example: null
description: 'The domain name.'
404:
description: 'Domain not in catcher'
content:
application/json:
schema:
type: object
example:
message: 'Domain not found'
name: example.de
properties:
message:
type: string
example: 'Domain not found'
name:
type: string
example: example.de
description: 'The domain name.'
tags:
- 'Backorder Management'
/domains:
get:
summary: 'List all domains'
operationId: listAllDomains
description: "Retrieve a paginated list of all domains in your account.\n\nRequires a token with the `domains:read` scope (read access to Domains)."
parameters:
-
in: query
name: page
description: 'The page number for pagination.'
example: 1
required: false
schema:
type: integer
description: 'The page number for pagination.'
example: 1
-
in: query
name: per_page
description: 'Number of results per page. Default: 500, Max: 500.'
example: 500
required: false
schema:
type: integer
description: 'Number of results per page. Default: 500, Max: 500.'
example: 500
-
in: query
name: search
description: 'Only domains whose name contains this string (case-insensitive), e.g. a full domain name like `example.de` or a part of it like `example`. IDNs are supported in Unicode and punycode form.'
example: example
required: false
schema:
type: string
description: 'Only domains whose name contains this string (case-insensitive), e.g. a full domain name like `example.de` or a part of it like `example`. IDNs are supported in Unicode and punycode form.'
example: example
-
in: query
name: tags
description: 'Filter by tags (comma-separated tag names, e.g. `premium,aged`). A domain must have all listed tags.'
example: 'premium,aged'
required: false
schema:
type: string
description: 'Filter by tags (comma-separated tag names, e.g. `premium,aged`). A domain must have all listed tags.'
example: 'premium,aged'
-
in: query
name: tld
description: 'Filter by TLD (comma-separated, e.g. `de,com`).'
example: de
required: false
schema:
type: string
description: 'Filter by TLD (comma-separated, e.g. `de,com`).'
example: de
-
in: query
name: order_by
description: 'Field to order by. Default: `created_at`. Options: `created_at`, `name`, `paid_until`, `expires_at`, `auto_expire`, `handle`, `tags`.'
example: created_at
required: false
schema:
type: string
description: 'Field to order by. Default: `created_at`. Options: `created_at`, `name`, `paid_until`, `expires_at`, `auto_expire`, `handle`, `tags`.'
example: created_at
enum:
- created_at
- name
- paid_until
- expires_at
- auto_expire
- handle
- tags
-
in: query
name: order_direction
description: 'Order direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
required: false
schema:
type: string
description: 'Order direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
enum:
- asc
- desc
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
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'
note: 'Renew early, buyer interest from 2023.'
properties:
current_page:
type: integer
example: 1
description: 'The current page number.'
per_page:
type: integer
example: 500
description: 'Number of results per page.'
data:
type: array
example:
-
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'
note: 'Renew early, buyer interest from 2023.'
description: 'The results on this page.'
items:
type: object
properties:
name:
type: string
example: example.de
redirector_settings:
type: object
properties:
type:
type: string
example: landing
method:
type: string
example: redirect_sale_page
authinfo:
type: string
example: E-Hc$f3xx
auto_expire:
type: string
example: '2024-12-31'
paid_until:
type: string
example: '2024-12-31'
expires_at:
type: string
example: '2025-01-01T00:00:00.000000Z'
created_at:
type: string
example: '2023-01-15T10:30:00.000000Z'
note:
type: string
example: 'Renew early, buyer interest from 2023.'
tags:
- 'Domain Management'
post:
summary: 'Register or transfer a single domain'
operationId: registerOrTransferASingleDomain
description: "Register a new domain or transfer an existing domain to your account. Without `redirector_settings` and\n`handle_id` the domain is created with your default redirector and handle configuration.\n\nEvery call is a separate order with its own charge and its own invoice. To order several domains, use\n`POST /domains/orders`: one charge and one invoice for up to 250 domains.\n\nAll TLDs from the price list (`GET /domains/prices`) are supported. Use `GET /domains/order/check`\nto preview the required action, available periods and costs for a domain beforehand.\n\nPaid actions are charged instantly to your stored payment method (credit card or PayPal) unless your\naccount uses monthly invoicing for the TLD. If the payment cannot be authorized the order is rejected.\nFor instantly billed orders the response contains a `payment` field: `captured` (charged), `authorized`\n(the order succeeded but the charge is still pending — no action required), `canceled` (the order\nfailed, nothing was charged) or `not_required` (free of charge, e.g. fully discounted).\n\nTransfers of some TLDs (e.g. most gTLDs) do not complete immediately; in that case the response is\n`Domain transfer initiated` and the transfer continues in the background.\n\nThis endpoint may execute registry operations and counts against your API rate limit.\n\nRequires a token with the `domains:write` scope (write access to Domains)."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Domain registered'
type: object
example:
message: 'Domain registered successfully'
name: example.de
period: 12
payment: captured
properties:
message:
type: string
example: 'Domain registered successfully'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
name:
type: string
example: example.de
description: 'The domain name.'
period:
type: integer
example: 12
description: 'The ordered period in months, or null for transfers without a period.'
nullable: true
payment:
type: string
example: captured
description: 'Only present for instantly billed orders: `captured` (charged), `authorized` (order succeeded, charge still pending — no action required), `canceled` (order failed, nothing charged) or `not_required` (free of charge). Options: `captured`, `authorized`, `canceled`, `not_required`.'
enum:
- captured
- authorized
- canceled
- not_required
-
description: 'Domain transferred'
type: object
example:
message: 'Domain transferred successfully'
name: example.de
period: 12
payment: captured
properties:
message:
type: string
example: 'Domain transferred successfully'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
name:
type: string
example: example.de
description: 'The domain name.'
period:
type: integer
example: 12
description: 'The ordered period in months, or null for transfers without a period.'
nullable: true
payment:
type: string
example: captured
description: 'Only present for instantly billed orders: `captured` (charged), `authorized` (order succeeded, charge still pending — no action required), `canceled` (order failed, nothing charged) or `not_required` (free of charge). Options: `captured`, `authorized`, `canceled`, `not_required`.'
enum:
- captured
- authorized
- canceled
- not_required
-
description: 'Transfer initiated'
type: object
example:
message: 'Domain transfer initiated'
name: example.com
period: 12
payment: captured
properties:
message:
type: string
example: 'Domain transfer initiated'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
name:
type: string
example: example.com
description: 'The domain name.'
period:
type: integer
example: 12
description: 'The ordered period in months, or null for transfers without a period.'
nullable: true
payment:
type: string
example: captured
description: 'Only present for instantly billed orders: `captured` (charged), `authorized` (order succeeded, charge still pending — no action required), `canceled` (order failed, nothing charged) or `not_required` (free of charge). Options: `captured`, `authorized`, `canceled`, `not_required`.'
enum:
- captured
- authorized
- canceled
- not_required
-
description: 'Registered, capture pending'
type: object
example:
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.'
properties:
message:
type: string
example: 'Domain registered successfully'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
name:
type: string
example: example.com
description: 'The domain name.'
period:
type: integer
example: 12
description: 'The ordered period in months, or null for transfers without a period.'
nullable: true
payment:
type: string
example: authorized
description: 'Only present for instantly billed orders: `captured` (charged), `authorized` (order succeeded, charge still pending — no action required), `canceled` (order failed, nothing charged) or `not_required` (free of charge). Options: `captured`, `authorized`, `canceled`, `not_required`.'
enum:
- captured
- authorized
- canceled
- not_required
payment_warning:
type: string
example: 'The payment could not be captured yet and remains authorized. No action is required; the charge will be settled by us.'
description: 'Only present when the payment remains authorized: explains that the charge will be settled later.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
-
description: 'Unsupported TLD'
type: object
example:
message: 'This TLD is not supported'
properties:
message:
type: string
example: 'This TLD is not supported'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
-
description: 'Invalid period'
type: object
example:
message: 'Invalid period. Allowed values (months): 12, 24, 36'
allowed_periods:
- 12
- 24
- 36
properties:
message:
type: string
example: 'Invalid period. Allowed values (months): 12, 24, 36'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
allowed_periods:
type: array
example:
- 12
- 24
- 36
items:
type: integer
-
description: 'Invalid authcode'
type: object
example:
message: 'Authcode invalid'
properties:
message:
type: string
example: 'Authcode invalid'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
-
description: 'Missing handle'
type: object
example:
message: 'Default handle in your accounts sale settings required'
properties:
message:
type: string
example: 'Default handle in your accounts sale settings required'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
402:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'No instant payment method'
type: object
example:
message: 'An instant payment method (credit card or PayPal) is required for this order. Please add one in your billing settings.'
properties:
message:
type: string
example: 'An instant payment method (credit card or PayPal) is required for this order. Please add one in your billing settings.'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
-
description: 'Payment not authorized'
type: object
example:
message: 'Payment could not be authorized. Please check your payment method.'
properties:
message:
type: string
example: 'Payment could not be authorized. Please check your payment method.'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
403:
description: 'Registry error'
content:
application/json:
schema:
type: object
example:
message: 'The request was rejected by the registry'
properties:
message:
type: string
example: 'The request was rejected by the registry'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
409:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Already registered'
type: object
example:
message: 'Domain already registered'
properties:
message:
type: string
example: 'Domain already registered'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
-
description: 'Already in account'
type: object
example:
message: 'Domain already in your account'
properties:
message:
type: string
example: 'Domain already in your account'
description: 'The result, e.g. `Domain registered successfully`, `Domain transferred successfully` or `Domain transfer initiated`.'
tags:
- 'Domain Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The domain name.'
example: example.de
authinfo:
type: string
description: 'The authinfo code, required for domain transfers.'
example: E-Hc$f3xx
handle_id:
type: integer
description: 'The handle ID to use. If not provided, uses your default handle.'
example: 123
period:
type: integer
description: 'Period in months. Optional; must be one of the periods allowed for the TLD (see `GET /domains/order/check`). Defaults to the shortest allowed period.'
example: 12
tags:
type: array
description: 'Optional tags to assign to the domain. A comma-separated string is accepted as well. Each tag may be at most 20 characters.'
example:
- premium
- aged
items:
type: string
redirector_settings:
type: object
description: 'Redirector configuration object (optional; defaults to your default redirector configuration).'
example: null
properties:
type:
type: string
description: 'Redirector type. Options: `redirect`, `landing`, `external`, `dns`.'
example: landing
enum:
- redirect
- landing
- external
- dns
method:
type: string
description: 'Redirect/landing method. For redirect: `301`, `302`, `meta`, `js`, `frame`. For landing: `redirect_sale_page`, `whitescreen`, `default`, `4sale`.'
example: redirect_sale_page
url:
type: string
description: 'Target URL (required for the `redirect` type).'
example: 'https://example.com'
ns:
type: array
description: '2 to 13 external nameservers (required for the `external` type).'
example:
- ns1.example.com
- ns2.example.com
items:
type: string
dns:
type: array
description: "DNS records (required for the `dns` type). For `.de` domains, DENIC's high-speed nameservers (NSentry) are used automatically when at most 5 records are set, only A, AAAA and MX types are used and no wildcard (*) entries exist."
example: null
items:
type: object
properties:
type:
type: string
description: 'DNS record type. `NS` delegates a subdomain to other nameservers: not for `@` or a wildcard, no other record on the same name, and below it only A/AAAA records, which a nameserver inside the delegated subdomain needs as glue. Own nameservers for the whole domain are the `external` type. Options: `A`, `AAAA`, `CNAME`, `MX`, `NS`, `TXT`.'
example: A
enum:
- A
- AAAA
- CNAME
- MX
- NS
- TXT
name:
type: string
description: 'Use `@` for the apex domain or a subdomain name.'
example: '@'
value:
type: string
description: 'Record value (e.g. IP address or hostname; the nameserver hostname for NS).'
example: 192.168.1.1
prio:
type: integer
description: 'Priority (only for MX records).'
example: 10
ttl:
type: integer
description: 'Time To Live in seconds. Default: 3600.'
example: 3600
options:
type: object
description: 'DNSSEC configuration (optional, for external/dns types) and the redirects of the `dns` type.'
example: null
properties:
dnssec-active:
type: string
description: 'DNSSEC status. Options: `true`, `false`.'
example: 'false'
enum:
- 'true'
- 'false'
dnssec-key:
type: string
description: 'DNSSEC key (required if dnssec-active is true).'
example: AwEAAa...
dnssec-algorithm:
type: string
description: 'DNSSEC algorithm (required if dnssec-active is true).'
example: '13'
dnssec-flags:
type: string
description: 'DNSSEC flags (required if dnssec-active is true).'
example: '257'
redirect-active:
type: string
description: "Redirect status (only for the `dns` type). If true, A records for `@` and `www` pointing to our redirector are added automatically. Their AAAA records on the redirector's IPv6 are published alongside without being stored (for a `.de` domain on NSentry only while at most five records result). Options: `true`, `false`."
example: 'false'
enum:
- 'true'
- 'false'
redirect-method:
type: string
description: 'Redirect method (required if redirect-active is true). Options: `301`, `302`, `meta`, `js`, `frame`.'
example: '301'
enum:
- '301'
- '302'
- meta
- js
- frame
redirect-url:
type: string
description: 'Target URL of the redirect (required if redirect-active is true).'
example: 'https://example.com'
redirect-subdomains:
type: array
description: "Redirects of single subdomains (only for the `dns` type), independent of redirect-active. For each of them an A record on the subdomain pointing to our redirector is added automatically, and its AAAA on the redirector's IPv6 is published alongside. The subdomain must not carry other A, AAAA, CNAME or NS records and must not lie below an NS delegation."
example: null
items:
type: object
properties:
name:
type: string
description: 'Subdomain part only, relative to the domain (e.g. `shop` or `a.b`, not `shop.example.de`). Letters, digits and hyphens; an umlaut as punycode (`xn--…`). Not `@` (that is redirect-active), no wildcard, and not `www` while redirect-active is true.'
example: shop
method:
type: string
description: 'Redirect method. Options: `301`, `302`, `meta`, `js`, `frame`.'
example: '301'
enum:
- '301'
- '302'
- meta
- js
- frame
url:
type: string
description: 'Target URL of the redirect.'
example: 'https://example.com/shop'
required:
- type
required:
- name
patch:
summary: 'Update a domain'
operationId: updateADomain
description: "Update domain settings such as redirector configuration or handle assignment.\n\nThis endpoint may execute registry operations and counts against your API rate limit.\n\nRequires a token with the `domains:write` scope (write access to Domains)."
parameters: []
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
message: 'Domain updated'
properties:
message:
type: string
example: 'Domain updated'
description: 'The result message.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The result message.'
-
description: 'Validation error'
type: object
example:
message: 'Validation error details'
properties:
message:
type: string
example: 'Validation error details'
description: 'The result message.'
403:
description: 'Registry error'
content:
application/json:
schema:
type: object
example:
message: 'The request was rejected by the registry'
properties:
message:
type: string
example: 'The request was rejected by the registry'
description: 'The result message.'
404:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Domain not found'
type: object
example:
message: 'Domain not found'
properties:
message:
type: string
example: 'Domain not found'
description: 'The result message.'
-
description: 'Handle not found'
type: object
example:
message: 'Handle not found'
properties:
message:
type: string
example: 'Handle not found'
description: 'The result message.'
tags:
- 'Domain Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The domain name.'
example: example.de
redirector_settings:
type: object
description: 'Redirector configuration object.'
example: null
properties:
type:
type: string
description: 'Redirector type. Options: `redirect`, `landing`, `external`, `dns`.'
example: landing
enum:
- redirect
- landing
- external
- dns
method:
type: string
description: 'Redirect/landing method. For redirect: `301`, `302`, `meta`, `js`, `frame`. For landing: `redirect_sale_page`, `whitescreen`, `default`, `4sale`.'
example: redirect_sale_page
url:
type: string
description: 'Target URL (required for the `redirect` type).'
example: 'https://example.com'
ns:
type: array
description: '2 to 13 external nameservers (required for the `external` type).'
example:
- ns1.example.com
- ns2.example.com
items:
type: string
dns:
type: array
description: "DNS records (required for the `dns` type). For `.de` domains, DENIC's high-speed nameservers (NSentry) are used automatically when at most 5 records are set, only A, AAAA and MX types are used and no wildcard (*) entries exist."
example: null
items:
type: object
properties:
type:
type: string
description: 'DNS record type. `NS` delegates a subdomain to other nameservers: not for `@` or a wildcard, no other record on the same name, and below it only A/AAAA records, which a nameserver inside the delegated subdomain needs as glue. Own nameservers for the whole domain are the `external` type. Options: `A`, `AAAA`, `CNAME`, `MX`, `NS`, `TXT`.'
example: A
enum:
- A
- AAAA
- CNAME
- MX
- NS
- TXT
name:
type: string
description: 'Use `@` for the apex domain or a subdomain name.'
example: '@'
value:
type: string
description: 'Record value (e.g. IP address or hostname; the nameserver hostname for NS).'
example: 192.168.1.1
prio:
type: integer
description: 'Priority (only for MX records).'
example: 10
ttl:
type: integer
description: 'Time To Live in seconds. Default: 3600.'
example: 3600
options:
type: object
description: 'DNSSEC configuration (optional, for external/dns types) and the redirects of the `dns` type.'
example: null
properties:
dnssec-active:
type: string
description: 'DNSSEC status. Options: `true`, `false`.'
example: 'false'
enum:
- 'true'
- 'false'
dnssec-key:
type: string
description: 'DNSSEC key (required if dnssec-active is true).'
example: AwEAAa...
dnssec-algorithm:
type: string
description: 'DNSSEC algorithm (required if dnssec-active is true).'
example: '13'
dnssec-flags:
type: string
description: 'DNSSEC flags (required if dnssec-active is true).'
example: '257'
redirect-active:
type: string
description: "Redirect status (only for the `dns` type). If true, A records for `@` and `www` pointing to our redirector are added automatically. Their AAAA records on the redirector's IPv6 are published alongside without being stored (for a `.de` domain on NSentry only while at most five records result). Options: `true`, `false`."
example: 'false'
enum:
- 'true'
- 'false'
redirect-method:
type: string
description: 'Redirect method (required if redirect-active is true). Options: `301`, `302`, `meta`, `js`, `frame`.'
example: '301'
enum:
- '301'
- '302'
- meta
- js
- frame
redirect-url:
type: string
description: 'Target URL of the redirect (required if redirect-active is true).'
example: 'https://example.com'
redirect-subdomains:
type: array
description: "Redirects of single subdomains (only for the `dns` type), independent of redirect-active. For each of them an A record on the subdomain pointing to our redirector is added automatically, and its AAAA on the redirector's IPv6 is published alongside. The subdomain must not carry other A, AAAA, CNAME or NS records and must not lie below an NS delegation."
example: null
items:
type: object
properties:
name:
type: string
description: 'Subdomain part only, relative to the domain (e.g. `shop` or `a.b`, not `shop.example.de`). Letters, digits and hyphens; an umlaut as punycode (`xn--…`). Not `@` (that is redirect-active), no wildcard, and not `www` while redirect-active is true.'
example: shop
method:
type: string
description: 'Redirect method. Options: `301`, `302`, `meta`, `js`, `frame`.'
example: '301'
enum:
- '301'
- '302'
- meta
- js
- frame
url:
type: string
description: 'Target URL of the redirect.'
example: 'https://example.com/shop'
required:
- type
handle_id:
type: integer
description: 'The handle ID to assign to the domain.'
example: 1234
required:
- name
delete:
summary: 'Delete or transit a domain'
operationId: deleteOrTransitADomain
description: "Delete a domain from your account or put it into DENIC transit state.\nTransit is a DENIC concept and therefore only available for `.de` domains.\n\nThis endpoint may execute registry operations and counts against your API rate limit.\n\nRequires a token with the `domains:write` scope (write access to Domains)."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Domain deleted'
type: object
example:
message: 'Domain deleted'
name: example.de
properties:
message:
type: string
example: 'Domain deleted'
description: 'The result: `Domain deleted` or `Domain put in transit`.'
name:
type: string
example: example.de
description: 'The domain name.'
-
description: 'Domain in transit'
type: object
example:
message: 'Domain put in transit'
name: example.de
properties:
message:
type: string
example: 'Domain put in transit'
description: 'The result: `Domain deleted` or `Domain put in transit`.'
name:
type: string
example: example.de
description: 'The domain name.'
400:
description: 'Missing domain name'
content:
application/json:
schema:
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The result: `Domain deleted` or `Domain put in transit`.'
403:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Registry error'
type: object
example:
message: 'The request was rejected by the registry'
properties:
message:
type: string
example: 'The request was rejected by the registry'
description: 'The result: `Domain deleted` or `Domain put in transit`.'
-
description: 'Transit not supported'
type: object
example:
message: 'Transit not supported.'
properties:
message:
type: string
example: 'Transit not supported.'
description: 'The result: `Domain deleted` or `Domain put in transit`.'
404:
description: 'Domain not found'
content:
application/json:
schema:
type: object
example:
message: 'Domain not found'
properties:
message:
type: string
example: 'Domain not found'
description: 'The result: `Domain deleted` or `Domain put in transit`.'
tags:
- 'Domain Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The domain name.'
example: example.de
transit:
type: integer
description: 'Set to 1 to put a `.de` domain into DENIC transit state instead of deleting. Default: 0. Options: `0`, `1`.'
example: 0
enum:
- 0
- 1
required:
- name
/domains/filters:
get:
summary: 'List domain filter options'
operationId: listDomainFilterOptions
description: "Retrieve the tags and TLDs your domains can be filtered by via `GET /domains`, along with how many domains currently match each option.\n\nRequires a token with the `domains:read` scope (read access to Domains)."
parameters: []
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
tags:
-
name: Premium
slug: premium
count: 12
-
name: Aged
slug: aged
count: 4
tlds:
-
tld: de
count: 340
-
tld: com
count: 58
properties:
tags:
type: array
example:
-
name: Premium
slug: premium
count: 12
-
name: Aged
slug: aged
count: 4
description: 'Tags you can pass to the `tags` filter on GET /domains, with the number of matching domains for each.'
items:
type: object
properties:
name:
type: string
example: Premium
slug:
type: string
example: premium
count:
type: integer
example: 12
tlds:
type: array
example:
-
tld: de
count: 340
-
tld: com
count: 58
description: 'TLDs you can pass to the `tld` filter on GET /domains, with the number of matching domains for each.'
items:
type: object
properties:
tld:
type: string
example: de
count:
type: integer
example: 340
tags:
- 'Domain Management'
/domains/prices:
get:
summary: 'List TLD prices'
operationId: listTLDPrices
description: "Retrieve the prices valid for your account for every top-level domain (TLD) we register, plus every TLD you hold domains in — the same list as \"Meine Preise\" in the web interface. All prices are net (excluding VAT) in EUR and rounded to up to 3 decimal places.\n\nThe `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.\n\n`promotion` describes, per price type, an active promotion behind `price`: `list_price` is what you would pay without it (your individual price, if you have one), `valid_to` when it ends. `upcoming_price` announces, per price type, the next scheduled price change for your account and the date it takes effect, quoted in the same `interval` as `price`.\n\n`reg` and `transfer` are what placing that order costs; `renew` is what keeping the domain costs afterwards, and `restore` is what recovering a deleted domain costs, or `null` where the TLD offers no restore. Read each value together with its `interval`: a `one_time` value is charged once and is never a monthly or yearly price. Accounts with a monthly .de runtime pay the .de registration fee once and then a monthly `renew` price — `\"reg\": 1` (`one_time`) with `\"renew\": 0.24` (`monthly`) means 1 € once plus 0.24 € per month. To preview a concrete order including its periods and gross amounts, use `GET /domains/order/check`.\n\nA TLD you hold domains in but can no longer register with us is listed with `registrable: false`; its `reg` and `transfer` prices are `null`. A price may also be `null` when the corresponding action is not offered for a TLD.\n\nRequires a token with the `domains:read` scope (read access to Domains)."
parameters:
-
in: query
name: tld
description: 'Restrict the result to these TLDs, comma-separated. The leading dot is optional, and a domain name selects its TLD (`example.de` → `de`).'
example: 'de,com'
required: false
schema:
type: string
description: 'Restrict the result to these TLDs, comma-separated. The leading dot is optional, and a domain name selects its TLD (`example.de` → `de`).'
example: 'de,com'
-
in: query
name: filter
description: 'Only TLDs matching all of these filters, comma-separated: `portfolio` (you hold domains in it), `promotion` (a promotion applies to one of your prices), `price_update` (a price change is scheduled for you), `custom` (an individual price is configured for you), `sale-` (a running sale such as `sale-black-friday-2026` applies to one of your prices; only while it runs). The same filters as "Meine Preise" in the web interface. An unknown filter is rejected with 422.'
example: 'portfolio,promotion'
required: false
schema:
type: string
description: 'Only TLDs matching all of these filters, comma-separated: `portfolio` (you hold domains in it), `promotion` (a promotion applies to one of your prices), `price_update` (a price change is scheduled for you), `custom` (an individual price is configured for you), `sale-` (a running sale such as `sale-black-friday-2026` applies to one of your prices; only while it runs). The same filters as "Meine Preise" in the web interface. An unknown filter is rejected with 422.'
example: 'portfolio,promotion'
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: Success
type: object
example:
data:
-
tld: com
registrable: true
domains: 12
runtime: 12
price:
reg: 7.5
transfer: 11
renew: 12
restore: 80
interval:
reg: one_time
transfer: yearly
renew: yearly
restore: yearly
original_price:
reg: 11
transfer: 11
renew: 12
restore: 80
custom:
reg: false
transfer: false
renew: false
restore: false
promotion:
reg:
list_price: 11
valid_to: '2026-10-31T23:59:59+01:00'
transfer: null
renew: null
restore: null
upcoming_price:
reg: null
transfer: null
renew:
price: 12.5
valid_from: '2026-11-01T00:00:00+01:00'
restore: null
details_url: 'https://elitedomains.de/top-level-domain/com'
properties:
data:
type: array
example:
-
tld: com
registrable: true
domains: 12
runtime: 12
price:
reg: 7.5
transfer: 11
renew: 12
restore: 80
interval:
reg: one_time
transfer: yearly
renew: yearly
restore: yearly
original_price:
reg: 11
transfer: 11
renew: 12
restore: 80
custom:
reg: false
transfer: false
renew: false
restore: false
promotion:
reg:
list_price: 11
valid_to: '2026-10-31T23:59:59+01:00'
transfer: null
renew: null
restore: null
upcoming_price:
reg: null
transfer: null
renew:
price: 12.5
valid_from: '2026-11-01T00:00:00+01:00'
restore: null
details_url: 'https://elitedomains.de/top-level-domain/com'
description: 'One entry per TLD we register plus every TLD you hold domains in, sorted by TLD. All prices are net (excluding VAT) in EUR, rounded to up to 3 decimal places.'
items:
type: object
properties:
tld:
type: string
example: com
registrable:
type: boolean
example: true
domains:
type: integer
example: 12
runtime:
type: integer
example: 12
price:
type: object
properties:
reg:
type: number
example: 7.5
transfer:
type: integer
example: 11
renew:
type: integer
example: 12
restore:
type: integer
example: 80
interval:
type: object
properties:
reg:
type: string
example: one_time
transfer:
type: string
example: yearly
renew:
type: string
example: yearly
restore:
type: string
example: yearly
original_price:
type: object
properties:
reg:
type: integer
example: 11
transfer:
type: integer
example: 11
renew:
type: integer
example: 12
restore:
type: integer
example: 80
custom:
type: object
properties:
reg:
type: boolean
example: false
transfer:
type: boolean
example: false
renew:
type: boolean
example: false
restore:
type: boolean
example: false
promotion:
type: object
properties:
reg:
type: object
properties:
list_price:
type: integer
example: 11
valid_to:
type: string
example: '2026-10-31T23:59:59+01:00'
transfer:
type: string
example: null
nullable: true
renew:
type: string
example: null
nullable: true
restore:
type: string
example: null
nullable: true
upcoming_price:
type: object
properties:
reg:
type: string
example: null
nullable: true
transfer:
type: string
example: null
nullable: true
renew:
type: object
properties:
price:
type: number
example: 12.5
valid_from:
type: string
example: '2026-11-01T00:00:00+01:00'
restore:
type: string
example: null
nullable: true
details_url:
type: string
example: 'https://elitedomains.de/top-level-domain/com'
-
description: 'Monthly .de runtime'
type: object
example:
data:
-
tld: de
registrable: true
domains: 812
runtime: 1
price:
reg: 1
transfer: 0
renew: 0.24
restore: 80
interval:
reg: one_time
transfer: one_time
renew: monthly
restore: yearly
original_price:
reg: 5
transfer: 5
renew: 5
restore: 80
custom:
reg: false
transfer: false
renew: false
restore: false
promotion:
reg: null
transfer: null
renew: null
restore: null
upcoming_price:
reg: null
transfer: null
renew: null
restore: null
details_url: 'https://elitedomains.de/top-level-domain/de'
properties:
data:
type: array
example:
-
tld: de
registrable: true
domains: 812
runtime: 1
price:
reg: 1
transfer: 0
renew: 0.24
restore: 80
interval:
reg: one_time
transfer: one_time
renew: monthly
restore: yearly
original_price:
reg: 5
transfer: 5
renew: 5
restore: 80
custom:
reg: false
transfer: false
renew: false
restore: false
promotion:
reg: null
transfer: null
renew: null
restore: null
upcoming_price:
reg: null
transfer: null
renew: null
restore: null
details_url: 'https://elitedomains.de/top-level-domain/de'
description: 'One entry per TLD we register plus every TLD you hold domains in, sorted by TLD. All prices are net (excluding VAT) in EUR, rounded to up to 3 decimal places.'
items:
type: object
properties:
tld:
type: string
example: de
registrable:
type: boolean
example: true
domains:
type: integer
example: 812
runtime:
type: integer
example: 1
price:
type: object
properties:
reg:
type: integer
example: 1
transfer:
type: integer
example: 0
renew:
type: number
example: 0.24
restore:
type: integer
example: 80
interval:
type: object
properties:
reg:
type: string
example: one_time
transfer:
type: string
example: one_time
renew:
type: string
example: monthly
restore:
type: string
example: yearly
original_price:
type: object
properties:
reg:
type: integer
example: 5
transfer:
type: integer
example: 5
renew:
type: integer
example: 5
restore:
type: integer
example: 80
custom:
type: object
properties:
reg:
type: boolean
example: false
transfer:
type: boolean
example: false
renew:
type: boolean
example: false
restore:
type: boolean
example: false
promotion:
type: object
properties:
reg:
type: string
example: null
nullable: true
transfer:
type: string
example: null
nullable: true
renew:
type: string
example: null
nullable: true
restore:
type: string
example: null
nullable: true
upcoming_price:
type: object
properties:
reg:
type: string
example: null
nullable: true
transfer:
type: string
example: null
nullable: true
renew:
type: string
example: null
nullable: true
restore:
type: string
example: null
nullable: true
details_url:
type: string
example: 'https://elitedomains.de/top-level-domain/de'
tags:
- 'Domain Management'
/domains/tags:
post:
summary: 'Update domain tags'
operationId: updateDomainTags
description: "Add or update tags for a specific domain in your portfolio. Tags help organize and categorize your domains.\n\nRequires a token with the `domains:write` scope (write access to Domains)."
parameters: []
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
tags:
- premium
- aged
- brandable
message: 'Tags saved.'
properties:
tags:
type: array
example:
- premium
- aged
- brandable
description: 'The tags now assigned to the domain.'
items:
type: string
message:
type: string
example: 'Tags saved.'
description: 'The result message.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'The result message.'
-
description: 'Tags missing'
type: object
example:
message: 'Tags are required'
properties:
message:
type: string
example: 'Tags are required'
description: 'The result message.'
-
description: 'Tag too long'
type: object
example:
message: 'One or more tags are too long (maximum 20 characters)'
properties:
message:
type: string
example: 'One or more tags are too long (maximum 20 characters)'
description: 'The result message.'
404:
description: 'Domain not found'
content:
application/json:
schema:
type: object
example:
message: 'Domain not found'
properties:
message:
type: string
example: 'Domain not found'
description: 'The result message.'
tags:
- 'Domain Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The domain name.'
example: example.de
tags:
type: array
description: 'The tags the domain should have afterwards, as an array or a comma-separated string. Replaces the current tags; an empty array removes all of them. At most 20 characters per tag; HTML is stripped.'
example:
- premium
- aged
- brandable
items:
type: string
required:
- name
- tags
/domains/check:
get:
summary: 'Check domain availability'
operationId: checkDomainAvailability
description: "Check the registry status of a domain. The `message` field contains the\ncurrent status. The most common values are `free` (available for registration)\nand `connect` (already registered). Other registry statuses such as\n`redemptionPeriod`, `transfer_lock` or `transit` may also be returned.\n\nAll TLDs from the price list (`GET /domains/prices`) are supported.\n\nThe response additionally contains the same order preview fields as\n`GET /domains/order/check` (`action`, `periods`, `price`, `billing`, ...);\nsee that endpoint for their documentation. `message` always contains the\nplain registry status.\n\nThis endpoint may execute registry operations and counts against your API rate limit.\n\nRequires a token with the `domains:read` scope (read access to Domains)."
parameters:
-
in: query
name: name
description: 'The domain name to check.'
example: example.de
required: true
schema:
type: string
description: 'The domain name to check.'
example: example.de
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Domain available'
type: object
example:
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
renew:
price: 5
price_gross: 5.95
interval: yearly
tax_rate: 19
billing: instant
instant_payment_method_available: true
properties:
name:
type: string
example: example.de
description: 'The domain name.'
message:
type: string
example: free
description: 'The raw registry status, e.g. `free` (available for registration) or `connect` (already registered).'
tld:
type: string
example: de
description: 'The TLD of the domain.'
status:
type: string
example: free
description: 'The raw registry status, e.g. `free`, `connect`, `redemptionPeriod`, `transfer_lock`, `transit`.'
action:
type: string
example: register
description: 'The resulting order action, or null when the domain cannot be ordered right now. Options: `register`, `transfer`.'
nullable: true
enum:
- register
- transfer
periods:
type: array
example:
-
months: 12
price: 5
price_gross: 5.95
description: 'The available periods. May be empty for transfers of TLDs that do not allow choosing a period.'
items:
type: object
properties:
months:
type: integer
example: 12
price:
type: integer
example: 5
price_gross:
type: number
example: 5.95
default_period:
type: integer
example: 12
description: 'The period (months) used when none is specified in the order.'
nullable: true
price:
type: integer
example: 5
description: 'Net price in EUR of the default period, charged once for this order — never a monthly or yearly price. For transfers the price is independent of the period.'
nullable: true
price_gross:
type: number
example: 5.95
description: 'Gross price in EUR of the default period, charged once; the amount an instant payment actually charges.'
nullable: true
renew:
type: object
properties:
price:
type: integer
example: 5
description: 'Net renewal price in EUR per `interval`.'
nullable: true
price_gross:
type: number
example: 5.95
description: 'Gross renewal price in EUR per `interval` (net price plus VAT at your tax_rate).'
nullable: true
interval:
type: string
example: yearly
description: 'How often the renewal price is charged: `yearly`, or `monthly` for accounts with a monthly .de runtime. Options: `yearly`, `monthly`, `one_time`.'
nullable: true
enum:
- yearly
- monthly
- one_time
description: 'What keeping the domain costs after the ordered runtime ends, as opposed to the one-time `price` of the order itself. E.g. `price` 1 with `renew` 0.24 `monthly` means 1 € once, then 0.24 € per month.'
tax_rate:
type: integer
example: 19
description: "Your account's VAT rate in percent."
billing:
type: string
example: instant
description: 'How the order would be billed: charged instantly to your stored payment method, or added to your monthly collective invoice. Options: `instant`, `monthly_invoice`.'
enum:
- instant
- monthly_invoice
instant_payment_method_available:
type: boolean
example: true
description: 'Only present for instant billing: whether an instant payment method (credit card or PayPal) is stored in your billing settings.'
-
description: 'Domain registered'
type: object
example:
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
renew:
price: 5
price_gross: 5.95
interval: yearly
tax_rate: 19
billing: instant
instant_payment_method_available: true
properties:
name:
type: string
example: example.de
description: 'The domain name.'
message:
type: string
example: connect
description: 'The raw registry status, e.g. `free` (available for registration) or `connect` (already registered).'
tld:
type: string
example: de
description: 'The TLD of the domain.'
status:
type: string
example: connect
description: 'The raw registry status, e.g. `free`, `connect`, `redemptionPeriod`, `transfer_lock`, `transit`.'
action:
type: string
example: transfer
description: 'The resulting order action, or null when the domain cannot be ordered right now. Options: `register`, `transfer`.'
nullable: true
enum:
- register
- transfer
authinfo_required:
type: boolean
example: true
description: 'Only present for transfers: an authinfo code is required to place the order.'
periods:
type: array
example:
-
months: 12
price: 5
price_gross: 5.95
description: 'The available periods. May be empty for transfers of TLDs that do not allow choosing a period.'
items:
type: object
properties:
months:
type: integer
example: 12
price:
type: integer
example: 5
price_gross:
type: number
example: 5.95
default_period:
type: integer
example: 12
description: 'The period (months) used when none is specified in the order.'
nullable: true
price:
type: integer
example: 5
description: 'Net price in EUR of the default period, charged once for this order — never a monthly or yearly price. For transfers the price is independent of the period.'
nullable: true
price_gross:
type: number
example: 5.95
description: 'Gross price in EUR of the default period, charged once; the amount an instant payment actually charges.'
nullable: true
renew:
type: object
properties:
price:
type: integer
example: 5
description: 'Net renewal price in EUR per `interval`.'
nullable: true
price_gross:
type: number
example: 5.95
description: 'Gross renewal price in EUR per `interval` (net price plus VAT at your tax_rate).'
nullable: true
interval:
type: string
example: yearly
description: 'How often the renewal price is charged: `yearly`, or `monthly` for accounts with a monthly .de runtime. Options: `yearly`, `monthly`, `one_time`.'
nullable: true
enum:
- yearly
- monthly
- one_time
description: 'What keeping the domain costs after the ordered runtime ends, as opposed to the one-time `price` of the order itself. E.g. `price` 1 with `renew` 0.24 `monthly` means 1 € once, then 0.24 € per month.'
tax_rate:
type: integer
example: 19
description: "Your account's VAT rate in percent."
billing:
type: string
example: instant
description: 'How the order would be billed: charged instantly to your stored payment method, or added to your monthly collective invoice. Options: `instant`, `monthly_invoice`.'
enum:
- instant
- monthly_invoice
instant_payment_method_available:
type: boolean
example: true
description: 'Only present for instant billing: whether an instant payment method (credit card or PayPal) is stored in your billing settings.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The raw registry status, e.g. `free` (available for registration) or `connect` (already registered).'
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'The raw registry status, e.g. `free` (available for registration) or `connect` (already registered).'
-
description: 'Unsupported TLD'
type: object
example:
message: 'This TLD is not supported'
properties:
message:
type: string
example: 'This TLD is not supported'
description: 'The raw registry status, e.g. `free` (available for registration) or `connect` (already registered).'
tags:
- 'Domain Management'
/domains/order/check:
get:
summary: 'Check domain order options'
operationId: checkDomainOrderOptions
description: "Preview what an order for a domain would look like before placing it via `POST /domains`:\nthe current registry status, the resulting action (`register` or `transfer`), the available\nperiods with their cost and how the order would be billed.\n\n`price` values are net in EUR; `price_gross` includes VAT at your account's `tax_rate`\nand is the amount an instant payment actually charges.\n\n`billing` is `instant` when the order is charged immediately to your stored payment\nmethod (credit card or PayPal) and `monthly_invoice` when it is added to your collective\ninvoice. For instant billing, `instant_payment_method_available` indicates whether a\npayment method is stored in your account's billing settings.\n\nFor transfers the price is independent of the period; the period only determines the\nadded runtime (some TLDs do not allow choosing a period on transfer, then `periods` is empty).\n\n`price` and `periods[].price` are **one-time** amounts: what this order costs once, for\nthe runtime stated in `months`. They are never a recurring price. What the domain costs\nafterwards is `renew`, quoted per `renew.interval` (`yearly`, or `monthly` for accounts\nwith a monthly .de runtime).\n\nWith a monthly .de runtime the only period is `1` month: the registration fee is\ncharged once and covers the domain up to the end of the current month, and from then\non the domain renews monthly at `renew.price`. A `price` of 1 with a `renew.price` of\n0.24 therefore means 1 € once plus 0.24 € per month, not 1 € per month.\n\nThis endpoint may execute registry operations and counts against your API rate limit.\n\nRequires a token with the `domains:read` scope (read access to Domains)."
parameters:
-
in: query
name: name
description: 'The domain name to check.'
example: example.com
required: true
schema:
type: string
description: 'The domain name to check.'
example: example.com
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Available for registration'
type: object
example:
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
renew:
price: 9.5
price_gross: 11.31
interval: yearly
tax_rate: 19
billing: instant
instant_payment_method_available: true
properties:
name:
type: string
example: example.com
description: 'The domain name.'
message:
type: string
example: 'Domain can be registered'
description: 'Human-readable summary, e.g. `Domain can be registered` or `Domain can currently not be ordered`.'
tld:
type: string
example: com
description: 'The TLD of the domain.'
status:
type: string
example: free
description: 'The raw registry status, e.g. `free`, `connect`, `redemptionPeriod`, `transfer_lock`, `transit`.'
action:
type: string
example: register
description: 'The resulting order action, or null when the domain cannot be ordered right now. Options: `register`, `transfer`.'
nullable: true
enum:
- register
- transfer
periods:
type: array
example:
-
months: 12
price: 9.5
price_gross: 11.31
-
months: 24
price: 19
price_gross: 22.61
description: 'The available periods. May be empty for transfers of TLDs that do not allow choosing a period.'
items:
type: object
properties:
months:
type: integer
example: 12
price:
type: number
example: 9.5
price_gross:
type: number
example: 11.31
default_period:
type: integer
example: 12
description: 'The period (months) used when none is specified in the order.'
nullable: true
price:
type: number
example: 9.5
description: 'Net price in EUR of the default period, charged once for this order — never a monthly or yearly price. For transfers the price is independent of the period.'
nullable: true
price_gross:
type: number
example: 11.31
description: 'Gross price in EUR of the default period, charged once; the amount an instant payment actually charges.'
nullable: true
renew:
type: object
properties:
price:
type: number
example: 9.5
description: 'Net renewal price in EUR per `interval`.'
nullable: true
price_gross:
type: number
example: 11.31
description: 'Gross renewal price in EUR per `interval` (net price plus VAT at your tax_rate).'
nullable: true
interval:
type: string
example: yearly
description: 'How often the renewal price is charged: `yearly`, or `monthly` for accounts with a monthly .de runtime. Options: `yearly`, `monthly`, `one_time`.'
nullable: true
enum:
- yearly
- monthly
- one_time
description: 'What keeping the domain costs after the ordered runtime ends, as opposed to the one-time `price` of the order itself. E.g. `price` 1 with `renew` 0.24 `monthly` means 1 € once, then 0.24 € per month.'
tax_rate:
type: integer
example: 19
description: "Your account's VAT rate in percent."
billing:
type: string
example: instant
description: 'How the order would be billed: charged instantly to your stored payment method, or added to your monthly collective invoice. Options: `instant`, `monthly_invoice`.'
enum:
- instant
- monthly_invoice
instant_payment_method_available:
type: boolean
example: true
description: 'Only present for instant billing: whether an instant payment method (credit card or PayPal) is stored in your billing settings.'
-
description: Transferable
type: object
example:
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
renew:
price: 9.5
price_gross: 11.31
interval: yearly
tax_rate: 19
billing: instant
instant_payment_method_available: true
properties:
name:
type: string
example: example.com
description: 'The domain name.'
message:
type: string
example: 'Domain can be transferred'
description: 'Human-readable summary, e.g. `Domain can be registered` or `Domain can currently not be ordered`.'
tld:
type: string
example: com
description: 'The TLD of the domain.'
status:
type: string
example: connect
description: 'The raw registry status, e.g. `free`, `connect`, `redemptionPeriod`, `transfer_lock`, `transit`.'
action:
type: string
example: transfer
description: 'The resulting order action, or null when the domain cannot be ordered right now. Options: `register`, `transfer`.'
nullable: true
enum:
- register
- transfer
authinfo_required:
type: boolean
example: true
description: 'Only present for transfers: an authinfo code is required to place the order.'
periods:
type: array
example:
-
months: 12
price: 9.5
price_gross: 11.31
description: 'The available periods. May be empty for transfers of TLDs that do not allow choosing a period.'
items:
type: object
properties:
months:
type: integer
example: 12
price:
type: number
example: 9.5
price_gross:
type: number
example: 11.31
default_period:
type: integer
example: 12
description: 'The period (months) used when none is specified in the order.'
nullable: true
price:
type: number
example: 9.5
description: 'Net price in EUR of the default period, charged once for this order — never a monthly or yearly price. For transfers the price is independent of the period.'
nullable: true
price_gross:
type: number
example: 11.31
description: 'Gross price in EUR of the default period, charged once; the amount an instant payment actually charges.'
nullable: true
renew:
type: object
properties:
price:
type: number
example: 9.5
description: 'Net renewal price in EUR per `interval`.'
nullable: true
price_gross:
type: number
example: 11.31
description: 'Gross renewal price in EUR per `interval` (net price plus VAT at your tax_rate).'
nullable: true
interval:
type: string
example: yearly
description: 'How often the renewal price is charged: `yearly`, or `monthly` for accounts with a monthly .de runtime. Options: `yearly`, `monthly`, `one_time`.'
nullable: true
enum:
- yearly
- monthly
- one_time
description: 'What keeping the domain costs after the ordered runtime ends, as opposed to the one-time `price` of the order itself. E.g. `price` 1 with `renew` 0.24 `monthly` means 1 € once, then 0.24 € per month.'
tax_rate:
type: integer
example: 19
description: "Your account's VAT rate in percent."
billing:
type: string
example: instant
description: 'How the order would be billed: charged instantly to your stored payment method, or added to your monthly collective invoice. Options: `instant`, `monthly_invoice`.'
enum:
- instant
- monthly_invoice
instant_payment_method_available:
type: boolean
example: true
description: 'Only present for instant billing: whether an instant payment method (credit card or PayPal) is stored in your billing settings.'
-
description: 'Monthly .de runtime'
type: object
example:
name: example.de
message: 'Domain can be registered'
tld: de
status: free
action: register
periods:
-
months: 1
price: 1
price_gross: 1.19
default_period: 1
price: 1
price_gross: 1.19
renew:
price: 0.24
price_gross: 0.29
interval: monthly
tax_rate: 19
billing: monthly_invoice
properties:
name:
type: string
example: example.de
description: 'The domain name.'
message:
type: string
example: 'Domain can be registered'
description: 'Human-readable summary, e.g. `Domain can be registered` or `Domain can currently not be ordered`.'
tld:
type: string
example: de
description: 'The TLD of the domain.'
status:
type: string
example: free
description: 'The raw registry status, e.g. `free`, `connect`, `redemptionPeriod`, `transfer_lock`, `transit`.'
action:
type: string
example: register
description: 'The resulting order action, or null when the domain cannot be ordered right now. Options: `register`, `transfer`.'
nullable: true
enum:
- register
- transfer
periods:
type: array
example:
-
months: 1
price: 1
price_gross: 1.19
description: 'The available periods. May be empty for transfers of TLDs that do not allow choosing a period.'
items:
type: object
properties:
months:
type: integer
example: 1
price:
type: integer
example: 1
price_gross:
type: number
example: 1.19
default_period:
type: integer
example: 1
description: 'The period (months) used when none is specified in the order.'
nullable: true
price:
type: integer
example: 1
description: 'Net price in EUR of the default period, charged once for this order — never a monthly or yearly price. For transfers the price is independent of the period.'
nullable: true
price_gross:
type: number
example: 1.19
description: 'Gross price in EUR of the default period, charged once; the amount an instant payment actually charges.'
nullable: true
renew:
type: object
properties:
price:
type: number
example: 0.24
description: 'Net renewal price in EUR per `interval`.'
nullable: true
price_gross:
type: number
example: 0.29
description: 'Gross renewal price in EUR per `interval` (net price plus VAT at your tax_rate).'
nullable: true
interval:
type: string
example: monthly
description: 'How often the renewal price is charged: `yearly`, or `monthly` for accounts with a monthly .de runtime. Options: `yearly`, `monthly`, `one_time`.'
nullable: true
enum:
- yearly
- monthly
- one_time
description: 'What keeping the domain costs after the ordered runtime ends, as opposed to the one-time `price` of the order itself. E.g. `price` 1 with `renew` 0.24 `monthly` means 1 € once, then 0.24 € per month.'
tax_rate:
type: integer
example: 19
description: "Your account's VAT rate in percent."
billing:
type: string
example: monthly_invoice
description: 'How the order would be billed: charged instantly to your stored payment method, or added to your monthly collective invoice. Options: `instant`, `monthly_invoice`.'
enum:
- instant
- monthly_invoice
-
description: 'Not orderable'
type: object
example:
name: example.com
message: 'Domain can currently not be ordered'
tld: com
status: transfer_lock
action: null
properties:
name:
type: string
example: example.com
description: 'The domain name.'
message:
type: string
example: 'Domain can currently not be ordered'
description: 'Human-readable summary, e.g. `Domain can be registered` or `Domain can currently not be ordered`.'
tld:
type: string
example: com
description: 'The TLD of the domain.'
status:
type: string
example: transfer_lock
description: 'The raw registry status, e.g. `free`, `connect`, `redemptionPeriod`, `transfer_lock`, `transit`.'
action:
type: string
example: null
description: 'The resulting order action, or null when the domain cannot be ordered right now. Options: `register`, `transfer`.'
nullable: true
enum:
- register
- transfer
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'Human-readable summary, e.g. `Domain can be registered` or `Domain can currently not be ordered`.'
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'Human-readable summary, e.g. `Domain can be registered` or `Domain can currently not be ordered`.'
-
description: 'Unsupported TLD'
type: object
example:
message: 'This TLD is not supported'
properties:
message:
type: string
example: 'This TLD is not supported'
description: 'Human-readable summary, e.g. `Domain can be registered` or `Domain can currently not be ordered`.'
tags:
- 'Domain Management'
/domains/orders:
post:
summary: 'Order several domains at once'
operationId: orderSeveralDomainsAtOnce
description: "Register and/or transfer up to 250 domains in a single order that is paid with **one** charge and\nbilled on **one** invoice — instead of one charge and one invoice per domain with `POST /domains`.\nEach domain may carry its own settings (`redirector_settings`, `handle_id`, `period`, `tags`); the\nsame fields on the top level are the defaults for every domain that does not set them.\n\nThe whole order is validated first. If a single domain is invalid the order is rejected with `422`\nand the problems of every domain in `errors`; nothing is ordered or charged. Use `sandbox=1` to\nvalidate an order and preview its amount without placing it.\n\nPaid domains are charged instantly to your stored payment method (credit card or PayPal) unless your\naccount uses monthly invoicing for the TLD: the total is authorized up front and, once all domains\nare processed, only the successful ones are charged — a domain that fails is never billed. If the\npayment cannot be authorized the whole order is rejected with `402`.\n\nThe order runs in the background: the response (`202`) carries the order `id`; follow its progress with\n`GET /domains/orders/{id}`. Pass an `idempotency_key` to make retries safe: an order with a key\nthat was used before is not placed again — the response is the existing order (`200`), whatever its state.\nThat includes an order rejected with `402`: after fixing the payment method, retry with a new key.\n\nEvery domain of an order counts against your daily API rate limit, as if it were ordered on its own.\n\nThis endpoint may execute registry operations and counts against your API rate limit.\n\nRequires a token with the `domains:write` scope (write access to Domains)."
parameters: []
responses:
200:
description: 'Sandbox preview'
content:
application/json:
schema:
type: object
example:
id: null
status: preview
message: 'The order is valid. Nothing was ordered or charged (sandbox).'
idempotency_key: null
created_at: null
payment: null
amount_authorized: 22.62
amount_charged: null
invoice_id: null
summary:
total: 2
pending: 0
done: 0
failed: 0
incomplete: 0
domains:
-
name: example.com
action: register
period: 12
billing: instant
price: 9.5
status: null
message: null
-
name: example.de
action: register
period: 12
billing: monthly_invoice
price: null
status: null
message: null
properties:
id:
type: string
example: null
description: 'The order ID for `GET /domains/orders/{id}`; null for a sandbox preview.'
nullable: true
status:
type: string
example: preview
description: '`processing` while at least one domain is pending, `completed` once every domain is done, failed or incomplete, `canceled` when the order never ran (nothing charged), `preview` for a sandbox request. Options: `preview`, `processing`, `completed`, `canceled`.'
enum:
- preview
- processing
- completed
- canceled
message:
type: string
example: 'The order is valid. Nothing was ordered or charged (sandbox).'
description: 'Human-readable summary of the order state.'
idempotency_key:
type: string
example: null
description: 'The idempotency key the order was placed with, if any.'
nullable: true
created_at:
type: string
example: null
description: 'When the order was placed (ISO 8601); null for a sandbox preview.'
nullable: true
payment:
type: string
example: null
description: '`authorized`: the amount is reserved and the successful domains are charged once the order completes (no action required). `captured`: charged. `canceled`: nothing was charged (the order never ran, or no domain succeeded). `not_required`: nothing to pay instantly — free of charge, or every domain is billed on your monthly invoice. Null for a sandbox preview. Options: `authorized`, `captured`, `canceled`, `not_required`.'
nullable: true
enum:
- authorized
- captured
- canceled
- not_required
amount_authorized:
type: number
example: 22.62
description: 'Gross amount in EUR reserved on your payment method for the instantly billed domains; for a sandbox preview, the amount that would be reserved.'
nullable: true
amount_charged:
type: string
example: null
description: 'Gross amount in EUR actually charged — only the successful domains. Null until charged.'
nullable: true
invoice_id:
type: string
example: null
description: 'The invoice covering the order (see `GET /invoices/{id}`), once something was charged.'
nullable: true
summary:
type: object
properties:
total:
type: integer
example: 2
description: 'Number of domains in the order.'
pending:
type: integer
example: 0
description: 'Domains still being processed.'
done:
type: integer
example: 0
description: 'Domains registered or transferred (a transfer may still be completing at the registry).'
failed:
type: integer
example: 0
description: 'Domains that failed; they are not charged.'
incomplete:
type: integer
example: 0
description: 'Domains the registry accepted but could not complete (e.g. a .de registration that failed after it was created).'
description: 'Domain counts by status.'
domains:
type: array
example:
-
name: example.com
action: register
period: 12
billing: instant
price: 9.5
status: null
message: null
-
name: example.de
action: register
period: 12
billing: monthly_invoice
price: null
status: null
message: null
description: 'The domains of the order, in the order they were listed.'
items:
type: object
properties:
name:
type: string
example: example.com
action:
type: string
example: register
period:
type: integer
example: 12
billing:
type: string
example: instant
price:
type: number
example: 9.5
status:
type: string
example: null
nullable: true
message:
type: string
example: null
nullable: true
202:
description: 'Order placed'
content:
application/json:
schema:
type: object
example:
id: 4711
status: processing
message: 'The order is being processed.'
idempotency_key: batch-2026-10-09-a
created_at: '2026-10-09T10:00:00.000000Z'
payment: authorized
amount_authorized: 22.62
amount_charged: null
invoice_id: null
summary:
total: 2
pending: 2
done: 0
failed: 0
incomplete: 0
domains:
-
name: example.com
action: register
period: 12
billing: instant
price: 9.5
status: pending
message: null
-
name: example.net
action: transfer
period: 12
billing: instant
price: 9.5
status: pending
message: null
properties:
id:
type: integer
example: 4711
description: 'The order ID for `GET /domains/orders/{id}`; null for a sandbox preview.'
nullable: true
status:
type: string
example: processing
description: '`processing` while at least one domain is pending, `completed` once every domain is done, failed or incomplete, `canceled` when the order never ran (nothing charged), `preview` for a sandbox request. Options: `preview`, `processing`, `completed`, `canceled`.'
enum:
- preview
- processing
- completed
- canceled
message:
type: string
example: 'The order is being processed.'
description: 'Human-readable summary of the order state.'
idempotency_key:
type: string
example: batch-2026-10-09-a
description: 'The idempotency key the order was placed with, if any.'
nullable: true
created_at:
type: string
example: '2026-10-09T10:00:00.000000Z'
description: 'When the order was placed (ISO 8601); null for a sandbox preview.'
nullable: true
payment:
type: string
example: authorized
description: '`authorized`: the amount is reserved and the successful domains are charged once the order completes (no action required). `captured`: charged. `canceled`: nothing was charged (the order never ran, or no domain succeeded). `not_required`: nothing to pay instantly — free of charge, or every domain is billed on your monthly invoice. Null for a sandbox preview. Options: `authorized`, `captured`, `canceled`, `not_required`.'
nullable: true
enum:
- authorized
- captured
- canceled
- not_required
amount_authorized:
type: number
example: 22.62
description: 'Gross amount in EUR reserved on your payment method for the instantly billed domains; for a sandbox preview, the amount that would be reserved.'
nullable: true
amount_charged:
type: string
example: null
description: 'Gross amount in EUR actually charged — only the successful domains. Null until charged.'
nullable: true
invoice_id:
type: string
example: null
description: 'The invoice covering the order (see `GET /invoices/{id}`), once something was charged.'
nullable: true
summary:
type: object
properties:
total:
type: integer
example: 2
description: 'Number of domains in the order.'
pending:
type: integer
example: 2
description: 'Domains still being processed.'
done:
type: integer
example: 0
description: 'Domains registered or transferred (a transfer may still be completing at the registry).'
failed:
type: integer
example: 0
description: 'Domains that failed; they are not charged.'
incomplete:
type: integer
example: 0
description: 'Domains the registry accepted but could not complete (e.g. a .de registration that failed after it was created).'
description: 'Domain counts by status.'
domains:
type: array
example:
-
name: example.com
action: register
period: 12
billing: instant
price: 9.5
status: pending
message: null
-
name: example.net
action: transfer
period: 12
billing: instant
price: 9.5
status: pending
message: null
description: 'The domains of the order, in the order they were listed.'
items:
type: object
properties:
name:
type: string
example: example.com
action:
type: string
example: register
period:
type: integer
example: 12
billing:
type: string
example: instant
price:
type: number
example: 9.5
status:
type: string
example: pending
message:
type: string
example: null
nullable: true
402:
description: 'Payment not authorized'
content:
application/json:
schema:
type: object
example:
message: 'Payment could not be authorized. Please check your payment method.'
properties:
message:
type: string
example: 'Payment could not be authorized. Please check your payment method.'
description: 'Human-readable summary of the order state.'
422:
description: 'Invalid domains'
content:
application/json:
schema:
type: object
example:
message: 'The order was not placed: 1 of 2 domains is invalid. Nothing was ordered or charged.'
errors:
-
index: 1
name: example.de
message: 'Domain already registered'
properties:
message:
type: string
example: 'The order was not placed: 1 of 2 domains is invalid. Nothing was ordered or charged.'
description: 'Human-readable summary of the order state.'
errors:
type: array
example:
-
index: 1
name: example.de
message: 'Domain already registered'
items:
type: object
properties:
index:
type: integer
example: 1
name:
type: string
example: example.de
message:
type: string
example: 'Domain already registered'
429:
description: 'Daily budget exhausted'
content:
application/json:
schema:
type: object
example:
message: 'This order needs 199 more requests of your daily API rate limit (one per domain), but only 120 remain. Split the order or try again later.'
remaining: 120
properties:
message:
type: string
example: 'This order needs 199 more requests of your daily API rate limit (one per domain), but only 120 remain. Split the order or try again later.'
description: 'Human-readable summary of the order state.'
remaining:
type: integer
example: 120
tags:
- 'Domain Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
domains:
type: array
description: 'The domains to register or transfer, at most 250. `handle_id`, `period`, `tags` and `redirector_settings` given here override the defaults on the top level.'
example: null
items:
type: object
properties:
name:
type: string
description: 'The domain name.'
example: example.com
authinfo:
type: string
description: 'The authinfo code; makes this domain a transfer.'
example: E-Hc$f3xx
handle_id:
type: integer
description: 'The handle ID to use. If not provided, uses your default handle.'
example: 123
period:
type: integer
description: 'Period in months; must be one of the periods allowed for the TLD (see `GET /domains/order/check`). Defaults to the shortest allowed period. A default period is not applied to transfers of TLDs without a transfer period.'
example: 12
tags:
type: array
description: 'Tags to assign to the domain. A comma-separated string is accepted as well. Each tag may be at most 20 characters.'
example:
- premium
- aged
items:
type: string
redirector_settings:
type: object
description: 'Redirector configuration object (defaults to your default redirector configuration).'
example: null
properties:
type:
type: string
description: 'Redirector type. Options: `redirect`, `landing`, `external`, `dns`.'
example: landing
enum:
- redirect
- landing
- external
- dns
method:
type: string
description: 'Redirect/landing method. For redirect: `301`, `302`, `meta`, `js`, `frame`. For landing: `redirect_sale_page`, `whitescreen`, `default`, `4sale`.'
example: redirect_sale_page
url:
type: string
description: 'Target URL (required for the `redirect` type).'
example: 'https://example.com'
ns:
type: array
description: '2 to 13 external nameservers (required for the `external` type).'
example:
- ns1.example.com
- ns2.example.com
items:
type: string
dns:
type: array
description: "DNS records (required for the `dns` type). For `.de` domains, DENIC's high-speed nameservers (NSentry) are used automatically when at most 5 records are set, only A, AAAA and MX types are used and no wildcard (*) entries exist."
example: null
items:
type: object
properties:
type:
type: string
description: 'DNS record type. `NS` delegates a subdomain to other nameservers: not for `@` or a wildcard, no other record on the same name, and below it only A/AAAA records, which a nameserver inside the delegated subdomain needs as glue. Own nameservers for the whole domain are the `external` type. Options: `A`, `AAAA`, `CNAME`, `MX`, `NS`, `TXT`.'
example: A
enum:
- A
- AAAA
- CNAME
- MX
- NS
- TXT
name:
type: string
description: 'Use `@` for the apex domain or a subdomain name.'
example: '@'
value:
type: string
description: 'Record value (e.g. IP address or hostname; the nameserver hostname for NS).'
example: 192.168.1.1
prio:
type: integer
description: 'Priority (only for MX records).'
example: 10
ttl:
type: integer
description: 'Time To Live in seconds. Default: 3600.'
example: 3600
options:
type: object
description: 'DNSSEC configuration (optional, for external/dns types) and the redirects of the `dns` type.'
example: null
properties:
dnssec-active:
type: string
description: 'DNSSEC status. Options: `true`, `false`.'
example: 'false'
enum:
- 'true'
- 'false'
dnssec-key:
type: string
description: 'DNSSEC key (required if dnssec-active is true).'
example: AwEAAa...
dnssec-algorithm:
type: string
description: 'DNSSEC algorithm (required if dnssec-active is true).'
example: '13'
dnssec-flags:
type: string
description: 'DNSSEC flags (required if dnssec-active is true).'
example: '257'
redirect-active:
type: string
description: "Redirect status (only for the `dns` type). If true, A records for `@` and `www` pointing to our redirector are added automatically. Their AAAA records on the redirector's IPv6 are published alongside without being stored (for a `.de` domain on NSentry only while at most five records result). Options: `true`, `false`."
example: 'false'
enum:
- 'true'
- 'false'
redirect-method:
type: string
description: 'Redirect method (required if redirect-active is true). Options: `301`, `302`, `meta`, `js`, `frame`.'
example: '301'
enum:
- '301'
- '302'
- meta
- js
- frame
redirect-url:
type: string
description: 'Target URL of the redirect (required if redirect-active is true).'
example: 'https://example.com'
redirect-subdomains:
type: array
description: "Redirects of single subdomains (only for the `dns` type), independent of redirect-active. For each of them an A record on the subdomain pointing to our redirector is added automatically, and its AAAA on the redirector's IPv6 is published alongside. The subdomain must not carry other A, AAAA, CNAME or NS records and must not lie below an NS delegation."
example: null
items:
type: object
properties:
name:
type: string
description: 'Subdomain part only, relative to the domain (e.g. `shop` or `a.b`, not `shop.example.de`). Letters, digits and hyphens; an umlaut as punycode (`xn--…`). Not `@` (that is redirect-active), no wildcard, and not `www` while redirect-active is true.'
example: shop
method:
type: string
description: 'Redirect method. Options: `301`, `302`, `meta`, `js`, `frame`.'
example: '301'
enum: ['301', '302', meta, js, frame]
url:
type: string
description: 'Target URL of the redirect.'
example: 'https://example.com/shop'
required:
- type
required:
- name
idempotency_key:
type: string
description: 'Optional key (max. 100 characters) that makes retries safe: an order whose key you used before is not placed again; the response is the existing order instead, whatever its state. A key stays bound to its order even when that order was rejected (`402`) — after fixing the payment method, retry with a new key; the old one keeps returning the `canceled` order.'
example: batch-2026-10-09-a
handle_id:
type: integer
description: 'Default for every domain that does not set it: the handle ID to use. If not provided, uses your default handle.'
example: 123
period:
type: integer
description: 'Default for every domain that does not set it: period in months; must be one of the periods allowed for the TLD (see `GET /domains/order/check`). Defaults to the shortest allowed period. A default period is not applied to transfers of TLDs without a transfer period.'
example: 12
tags:
type: array
description: 'Default for every domain that does not set it: tags to assign to the domain. A comma-separated string is accepted as well. Each tag may be at most 20 characters.'
example:
- premium
- aged
items:
type: string
redirector_settings:
type: object
description: 'Default for every domain that does not set it: redirector configuration object (defaults to your default redirector configuration).'
example: null
properties:
type:
type: string
description: 'Redirector type. Options: `redirect`, `landing`, `external`, `dns`.'
example: landing
enum:
- redirect
- landing
- external
- dns
method:
type: string
description: 'Redirect/landing method. For redirect: `301`, `302`, `meta`, `js`, `frame`. For landing: `redirect_sale_page`, `whitescreen`, `default`, `4sale`.'
example: redirect_sale_page
url:
type: string
description: 'Target URL (required for the `redirect` type).'
example: 'https://example.com'
ns:
type: array
description: '2 to 13 external nameservers (required for the `external` type).'
example:
- ns1.example.com
- ns2.example.com
items:
type: string
dns:
type: array
description: "DNS records (required for the `dns` type). For `.de` domains, DENIC's high-speed nameservers (NSentry) are used automatically when at most 5 records are set, only A, AAAA and MX types are used and no wildcard (*) entries exist."
example: null
items:
type: object
properties:
type:
type: string
description: 'DNS record type. `NS` delegates a subdomain to other nameservers: not for `@` or a wildcard, no other record on the same name, and below it only A/AAAA records, which a nameserver inside the delegated subdomain needs as glue. Own nameservers for the whole domain are the `external` type. Options: `A`, `AAAA`, `CNAME`, `MX`, `NS`, `TXT`.'
example: A
enum:
- A
- AAAA
- CNAME
- MX
- NS
- TXT
name:
type: string
description: 'Use `@` for the apex domain or a subdomain name.'
example: '@'
value:
type: string
description: 'Record value (e.g. IP address or hostname; the nameserver hostname for NS).'
example: 192.168.1.1
prio:
type: integer
description: 'Priority (only for MX records).'
example: 10
ttl:
type: integer
description: 'Time To Live in seconds. Default: 3600.'
example: 3600
options:
type: object
description: 'DNSSEC configuration (optional, for external/dns types) and the redirects of the `dns` type.'
example: null
properties:
dnssec-active:
type: string
description: 'DNSSEC status. Options: `true`, `false`.'
example: 'false'
enum:
- 'true'
- 'false'
dnssec-key:
type: string
description: 'DNSSEC key (required if dnssec-active is true).'
example: AwEAAa...
dnssec-algorithm:
type: string
description: 'DNSSEC algorithm (required if dnssec-active is true).'
example: '13'
dnssec-flags:
type: string
description: 'DNSSEC flags (required if dnssec-active is true).'
example: '257'
redirect-active:
type: string
description: "Redirect status (only for the `dns` type). If true, A records for `@` and `www` pointing to our redirector are added automatically. Their AAAA records on the redirector's IPv6 are published alongside without being stored (for a `.de` domain on NSentry only while at most five records result). Options: `true`, `false`."
example: 'false'
enum:
- 'true'
- 'false'
redirect-method:
type: string
description: 'Redirect method (required if redirect-active is true). Options: `301`, `302`, `meta`, `js`, `frame`.'
example: '301'
enum:
- '301'
- '302'
- meta
- js
- frame
redirect-url:
type: string
description: 'Target URL of the redirect (required if redirect-active is true).'
example: 'https://example.com'
redirect-subdomains:
type: array
description: "Redirects of single subdomains (only for the `dns` type), independent of redirect-active. For each of them an A record on the subdomain pointing to our redirector is added automatically, and its AAAA on the redirector's IPv6 is published alongside. The subdomain must not carry other A, AAAA, CNAME or NS records and must not lie below an NS delegation."
example: null
items:
type: object
properties:
name:
type: string
description: 'Subdomain part only, relative to the domain (e.g. `shop` or `a.b`, not `shop.example.de`). Letters, digits and hyphens; an umlaut as punycode (`xn--…`). Not `@` (that is redirect-active), no wildcard, and not `www` while redirect-active is true.'
example: shop
method:
type: string
description: 'Redirect method. Options: `301`, `302`, `meta`, `js`, `frame`.'
example: '301'
enum:
- '301'
- '302'
- meta
- js
- frame
url:
type: string
description: 'Target URL of the redirect.'
example: 'https://example.com/shop'
required:
- type
required:
- domains
'/domains/orders/{id}':
get:
summary: 'Get an order'
operationId: getAnOrder
description: "Retrieve the state of an order placed with `POST /domains/orders`: the state of each domain, the\npayment and — once the order is complete and something was charged — the invoice.\n\nAn order is `processing` while at least one domain is still pending and `completed` once every\ndomain is done, failed or incomplete. `canceled` means the order never ran (e.g. the payment\ncould not be authorized); nothing was charged.\n\nRequires a token with the `domains:read` scope (read access to Domains)."
parameters: []
responses:
200:
description: Completed
content:
application/json:
schema:
type: object
example:
id: 4711
status: completed
message: 'The order is complete.'
idempotency_key: batch-2026-10-09-a
created_at: '2026-10-09T10:00:00.000000Z'
payment: captured
amount_authorized: 22.62
amount_charged: 11.31
invoice_id: 15023
summary:
total: 2
pending: 0
done: 1
failed: 1
incomplete: 0
domains:
-
name: example.com
action: register
period: 12
billing: instant
price: 9.5
status: done
message: 'Domain registered successfully'
-
name: example.net
action: transfer
period: 12
billing: instant
price: 9.5
status: failed
message: 'Authcode invalid'
properties:
id:
type: integer
example: 4711
description: 'The order ID for `GET /domains/orders/{id}`; null for a sandbox preview.'
nullable: true
status:
type: string
example: completed
description: '`processing` while at least one domain is pending, `completed` once every domain is done, failed or incomplete, `canceled` when the order never ran (nothing charged), `preview` for a sandbox request. Options: `preview`, `processing`, `completed`, `canceled`.'
enum:
- preview
- processing
- completed
- canceled
message:
type: string
example: 'The order is complete.'
description: 'Human-readable summary of the order state.'
idempotency_key:
type: string
example: batch-2026-10-09-a
description: 'The idempotency key the order was placed with, if any.'
nullable: true
created_at:
type: string
example: '2026-10-09T10:00:00.000000Z'
description: 'When the order was placed (ISO 8601); null for a sandbox preview.'
nullable: true
payment:
type: string
example: captured
description: '`authorized`: the amount is reserved and the successful domains are charged once the order completes (no action required). `captured`: charged. `canceled`: nothing was charged (the order never ran, or no domain succeeded). `not_required`: nothing to pay instantly — free of charge, or every domain is billed on your monthly invoice. Null for a sandbox preview. Options: `authorized`, `captured`, `canceled`, `not_required`.'
nullable: true
enum:
- authorized
- captured
- canceled
- not_required
amount_authorized:
type: number
example: 22.62
description: 'Gross amount in EUR reserved on your payment method for the instantly billed domains; for a sandbox preview, the amount that would be reserved.'
nullable: true
amount_charged:
type: number
example: 11.31
description: 'Gross amount in EUR actually charged — only the successful domains. Null until charged.'
nullable: true
invoice_id:
type: integer
example: 15023
description: 'The invoice covering the order (see `GET /invoices/{id}`), once something was charged.'
nullable: true
summary:
type: object
properties:
total:
type: integer
example: 2
description: 'Number of domains in the order.'
pending:
type: integer
example: 0
description: 'Domains still being processed.'
done:
type: integer
example: 1
description: 'Domains registered or transferred (a transfer may still be completing at the registry).'
failed:
type: integer
example: 1
description: 'Domains that failed; they are not charged.'
incomplete:
type: integer
example: 0
description: 'Domains the registry accepted but could not complete (e.g. a .de registration that failed after it was created).'
description: 'Domain counts by status.'
domains:
type: array
example:
-
name: example.com
action: register
period: 12
billing: instant
price: 9.5
status: done
message: 'Domain registered successfully'
-
name: example.net
action: transfer
period: 12
billing: instant
price: 9.5
status: failed
message: 'Authcode invalid'
description: 'The domains of the order, in the order they were listed.'
items:
type: object
properties:
name:
type: string
example: example.com
action:
type: string
example: register
period:
type: integer
example: 12
billing:
type: string
example: instant
price:
type: number
example: 9.5
status:
type: string
example: done
message:
type: string
example: 'Domain registered successfully'
404:
description: 'Not found'
content:
application/json:
schema:
type: object
example:
message: 'Order not found'
properties:
message:
type: string
example: 'Order not found'
description: 'Human-readable summary of the order state.'
tags:
- 'Domain Management'
parameters:
-
in: path
name: id
description: 'The order ID, as returned by `POST /domains/orders`.'
example: 4711
required: true
schema:
type: integer
/domains/authinfo:
get:
summary: 'Get domain AuthInfo code'
operationId: getDomainAuthInfoCode
description: "Retrieve the AuthInfo/transfer code for a domain. If none exists, a new one will be generated.\n\nThis endpoint may execute registry operations and counts against your API rate limit.\n\nRequires a token with the `domains:write` scope (write access to Domains)."
parameters:
-
in: query
name: name
description: 'The domain name.'
example: example.de
required: true
schema:
type: string
description: 'The domain name.'
example: example.de
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
message: 'Authcode exists'
name: example.de
authinfo: EDxHc$f3xx
expires_at: '07.04.2024 21:34:35'
properties:
message:
type: string
example: 'Authcode exists'
description: '`Authcode exists` when a code was already set; otherwise a new one has been generated.'
name:
type: string
example: example.de
description: 'The domain name.'
authinfo:
type: string
example: EDxHc$f3xx
description: 'The AuthInfo (transfer) code.'
expires_at:
type: string
example: '07.04.2024 21:34:35'
description: 'When the code expires (DD.MM.YYYY HH:MM:SS, 30 days after creation).'
400:
description: 'Missing domain name'
content:
application/json:
schema:
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: '`Authcode exists` when a code was already set; otherwise a new one has been generated.'
403:
description: 'Registry error'
content:
application/json:
schema:
type: object
example:
message: 'The request was rejected by DENIC'
properties:
message:
type: string
example: 'The request was rejected by DENIC'
description: '`Authcode exists` when a code was already set; otherwise a new one has been generated.'
404:
description: 'Domain not found'
content:
application/json:
schema:
type: object
example:
message: 'Domain not found'
properties:
message:
type: string
example: 'Domain not found'
description: '`Authcode exists` when a code was already set; otherwise a new one has been generated.'
tags:
- 'Domain Management'
/domains/authinfo2/check:
get:
summary: 'Check AuthInfo2 availability'
operationId: checkAuthInfo2Availability
description: "Check if an AuthInfo2 letter can be ordered for a `.de` domain via DENIC. Only available for accounts\nthat use monthly invoicing (Sammelrechnung). AuthInfo2 is a DENIC concept and therefore only\navailable for `.de` domains.\n\nThis endpoint may execute registry operations and counts against your API rate limit.\n\nRequires a token with the `domains:read` scope (read access to Domains)."
parameters:
-
in: query
name: name
description: 'The domain name to check.'
example: example.de
required: true
schema:
type: string
description: 'The domain name to check.'
example: example.de
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Can be ordered'
type: object
example:
name: example.de
available: true
message: 'AuthInfo2 can be ordered'
properties:
name:
type: string
example: example.de
description: 'The domain name.'
available:
type: boolean
example: true
description: 'Whether an AuthInfo2 letter can be ordered for the domain.'
message:
type: string
example: 'AuthInfo2 can be ordered'
description: 'Explains the availability result.'
-
description: 'Not available'
type: object
example:
name: example.de
available: false
message: 'AuthInfo2 cannot be ordered for this domain'
properties:
name:
type: string
example: example.de
description: 'The domain name.'
available:
type: boolean
example: false
description: 'Whether an AuthInfo2 letter can be ordered for the domain.'
message:
type: string
example: 'AuthInfo2 cannot be ordered for this domain'
description: 'Explains the availability result.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'Explains the availability result.'
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'Explains the availability result.'
-
description: 'Unsupported TLD'
type: object
example:
message: 'AuthInfo2 is only available for .de domains'
properties:
message:
type: string
example: 'AuthInfo2 is only available for .de domains'
description: 'Explains the availability result.'
403:
description: 'Not a monthly invoice account'
content:
application/json:
schema:
type: object
example:
message: 'AuthInfo2 ordering via API requires monthly invoice billing (Sammelrechnung)'
properties:
message:
type: string
example: 'AuthInfo2 ordering via API requires monthly invoice billing (Sammelrechnung)'
description: 'Explains the availability result.'
tags:
- 'Domain Management'
/domains/authinfo2:
post:
summary: 'Order AuthInfo2'
operationId: orderAuthInfo2
description: "Order an AuthInfo2 letter from DENIC for a `.de` domain. Only available for accounts that use monthly\ninvoicing (Sammelrechnung); the order is added to the next collective invoice. A confirmation email\nis sent on success. AuthInfo2 is a DENIC concept and therefore only available for `.de` domains.\n\nThis endpoint may execute registry operations and counts against your API rate limit.\n\nRequires a token with the `domains:write` scope (write access to Domains)."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: Ordered
type: object
example:
name: example.de
message: 'AuthInfo2 letter for example.de has been ordered and will be sent within 1-2 business days.'
properties:
name:
type: string
example: example.de
description: 'The domain name.'
message:
type: string
example: 'AuthInfo2 letter for example.de has been ordered and will be sent within 1-2 business days.'
description: 'The result message.'
-
description: Sandbox
type: object
example:
name: example.de
message: 'AuthInfo2 would be ordered (sandbox mode)'
properties:
name:
type: string
example: example.de
description: 'The domain name.'
message:
type: string
example: 'AuthInfo2 would be ordered (sandbox mode)'
description: 'The result message.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The result message.'
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'The result message.'
-
description: 'Unsupported TLD'
type: object
example:
message: 'AuthInfo2 is only available for .de domains'
properties:
message:
type: string
example: 'AuthInfo2 is only available for .de domains'
description: 'The result message.'
-
description: 'Not orderable'
type: object
example:
message: 'AuthInfo2 cannot be ordered for this domain'
properties:
message:
type: string
example: 'AuthInfo2 cannot be ordered for this domain'
description: 'The result message.'
403:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Not a monthly invoice account'
type: object
example:
message: 'AuthInfo2 ordering via API requires monthly invoice billing (Sammelrechnung)'
properties:
message:
type: string
example: 'AuthInfo2 ordering via API requires monthly invoice billing (Sammelrechnung)'
description: 'The result message.'
-
description: 'Payment problem'
type: object
example:
message: 'There is a problem with your payment method. Please contact support.'
properties:
message:
type: string
example: 'There is a problem with your payment method. Please contact support.'
description: 'The result message.'
tags:
- 'Domain Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The domain name.'
example: example.de
sandbox:
type: string
description: 'Set to `1` or `true` to run in sandbox mode (no order, no billing). Options: `0`, `1`, `true`, `false`.'
example: '0'
enum:
- '0'
- '1'
- 'true'
- 'false'
required:
- name
/domains/sedo:
post:
summary: 'Add domain to Sedo marketplace'
operationId: addDomainToSedoMarketplace
description: "List a domain on the Sedo marketplace with a specified price. The domain will be configured for Paynow transactions.\n\nRequires a token with the `domains:write` scope (write access to Domains)."
parameters: []
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
message: 'SEDO-Domain added or updated successfully'
name: example.de
properties:
message:
type: string
example: 'SEDO-Domain added or updated successfully'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The result message.'
-
description: 'Invalid price'
type: object
example:
message: 'Price is required and must be greater than 0'
properties:
message:
type: string
example: 'Price is required and must be greater than 0'
description: 'The result message.'
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'The result message.'
404:
description: 'Domain not found'
content:
application/json:
schema:
type: object
example:
message: 'Domain not found in your inventory'
properties:
message:
type: string
example: 'Domain not found in your inventory'
description: 'The result message.'
500:
description: 'Server error'
content:
application/json:
schema:
type: object
example:
message: 'An error occurred while processing the SEDO task'
properties:
message:
type: string
example: 'An error occurred while processing the SEDO task'
description: 'The result message.'
tags:
- 'Domain Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The domain name.'
example: example.de
price:
type: number
description: 'The listing price in EUR (must be greater than 0).'
example: 1500.0
required:
- name
- price
/offers:
get:
summary: 'List all domain offers'
operationId: listAllDomainOffers
description: "Retrieve a paginated list of all sale pages (domain offers) in your account with relevant data including status, pricing, visitors, leads, and template information.\n\nRequires a token with the `offers:read` scope (read access to Offers)."
parameters:
-
in: query
name: page
description: 'The page number for pagination.'
example: 1
required: false
schema:
type: integer
description: 'The page number for pagination.'
example: 1
-
in: query
name: per_page
description: 'Number of results per page. Default: 50, Max: 500.'
example: 50
required: false
schema:
type: integer
description: 'Number of results per page. Default: 50, Max: 500.'
example: 50
-
in: query
name: search
description: 'Only offers whose domain name contains this string (case-insensitive), e.g. a full domain name like `example.de` or a part of it like `example`. IDNs are supported in Unicode and punycode form.'
example: example
required: false
schema:
type: string
description: 'Only offers whose domain name contains this string (case-insensitive), e.g. a full domain name like `example.de` or a part of it like `example`. IDNs are supported in Unicode and punycode form.'
example: example
-
in: query
name: type
description: 'Filter by offer type. Options: `paynow`, `4sale`.'
example: paynow
required: false
schema:
type: string
description: 'Filter by offer type. Options: `paynow`, `4sale`.'
example: paynow
enum:
- paynow
- 4sale
-
in: query
name: status
description: 'Filter by status. Options: `verified`, `hold`, `not_configured`, `unverified`, `inactive`, `deconnect`.'
example: verified
required: false
schema:
type: string
description: 'Filter by status. Options: `verified`, `hold`, `not_configured`, `unverified`, `inactive`, `deconnect`.'
example: verified
enum:
- verified
- hold
- not_configured
- unverified
- inactive
- deconnect
-
in: query
name: is_internal
description: 'Filter by internal domains (true) or external domains (false).'
example: true
required: false
schema:
type: boolean
description: 'Filter by internal domains (true) or external domains (false).'
example: true
-
in: query
name: template
description: 'Filter by template name.'
example: slim
required: false
schema:
type: string
description: 'Filter by template name.'
example: slim
-
in: query
name: min_price
description: 'Minimum price filter.'
example: 99
required: false
schema:
type: integer
description: 'Minimum price filter.'
example: 99
-
in: query
name: max_price
description: 'Maximum price filter.'
example: 5000
required: false
schema:
type: integer
description: 'Maximum price filter.'
example: 5000
-
in: query
name: min_visitors
description: 'Minimum visitors in the last 30 days.'
example: 10
required: false
schema:
type: integer
description: 'Minimum visitors in the last 30 days.'
example: 10
-
in: query
name: tags
description: 'Filter by tags (comma-separated tag names, e.g. `premium,short`). An offer must have all listed tags.'
example: 'premium,short'
required: false
schema:
type: string
description: 'Filter by tags (comma-separated tag names, e.g. `premium,short`). An offer must have all listed tags.'
example: 'premium,short'
-
in: query
name: tld
description: 'Filter by TLD (comma-separated, e.g. `de,com`).'
example: de
required: false
schema:
type: string
description: 'Filter by TLD (comma-separated, e.g. `de,com`).'
example: de
-
in: query
name: order_by
description: 'Field to order by. Default: `created_at`. Options: `created_at`, `name`, `price`, `visitors`, `leads`, `trend`, `color`, `template`, `status`, `tags`.'
example: visitors
required: false
schema:
type: string
description: 'Field to order by. Default: `created_at`. Options: `created_at`, `name`, `price`, `visitors`, `leads`, `trend`, `color`, `template`, `status`, `tags`.'
example: visitors
enum:
- created_at
- name
- price
- visitors
- leads
- trend
- color
- template
- status
- tags
-
in: query
name: order_direction
description: 'Order direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
required: false
schema:
type: string
description: 'Order direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
enum:
- asc
- desc
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
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
note: 'Renew early, buyer interest from 2023.'
properties:
current_page:
type: integer
example: 1
description: 'The current page number.'
per_page:
type: integer
example: 50
description: 'Number of results per page.'
total:
type: integer
example: 125
description: 'Total number of results across all pages.'
last_page:
type: integer
example: 3
description: 'The number of the last page.'
data:
type: array
example:
-
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
note: 'Renew early, buyer interest from 2023.'
description: 'The results on this page.'
items:
type: object
properties:
name:
type: string
example: example.de
type:
type: string
example: paynow
status:
type: string
example: verified
price:
type: integer
example: 2999
template:
type: string
example: slim
created_at:
type: string
example: '2023-01-15T10:30:00.000000Z'
is_internal:
type: boolean
example: true
redirect_status:
type: boolean
example: true
hide_on_marketplace:
type: boolean
example: false
visitors:
type: object
properties:
last_30_days:
type: integer
example: 142
last_7_days:
type: integer
example: 35
referrer_30_days:
type: integer
example: 12
template_data:
type: object
properties:
theme-color:
type: string
example: blue
price-suggest:
type: string
example: 'true'
tags:
type: array
example:
- premium
- short
items:
type: string
note:
type: string
example: 'Renew early, buyer interest from 2023.'
401:
description: Unauthenticated
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- 'Domain Offers'
post:
summary: 'Create a sale page'
operationId: createASalePage
description: "Create a sale page (domain offer) for a domain, identified by its domain name. Domains you manage with\nELITEDOMAINS become an internal sale page (`status: verified` right away); any other domain becomes an\nexternal sale page and stays `unverified` until its nameservers are pointed at ELITEDOMAINS, unless your\naccount is set up to skip that verification.\n\nFor an external domain, the sale page is saved before the DNS records that carry out its verification are\nset up; if a `500` is returned for an external domain, the sale page may already exist in a partially set\nup state. Retrying the request will then fail with `409` rather than completing the setup — check\n`GET /offers` for the domain's status, or use `PATCH /offers` to adjust its configuration, instead of\nretrying `POST /offers`.\n\nRequires a token with the `offers:write` scope (write access to Offers)."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: Success
type: object
example:
message: 'Sale page created'
name: example.de
status: verified
is_internal: true
properties:
message:
type: string
example: 'Sale page created'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
status:
type: string
example: verified
description: 'The resulting status of the sale page, e.g. `verified` (active internal domain, or external domain with verification skipped), `unverified` (external domain, pending nameserver verification) or `inactive` (created with `status: deactivate`).'
is_internal:
type: boolean
example: true
description: 'Whether the domain is managed by ELITEDOMAINS (internal) or not (external).'
-
description: Sandbox
type: object
example:
message: 'Sale page would be created (sandbox mode)'
name: example.de
properties:
message:
type: string
example: 'Sale page would be created (sandbox mode)'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The result message.'
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'The result message.'
-
description: 'Missing template'
type: object
example:
message: 'Template is required'
properties:
message:
type: string
example: 'Template is required'
description: 'The result message.'
-
description: 'Invalid template'
type: object
example:
message: 'Template must be one of: default, smart, expert, slim, sicherheit, vertrieb'
properties:
message:
type: string
example: 'Template must be one of: default, smart, expert, slim, sicherheit, vertrieb'
description: 'The result message.'
-
description: 'Invalid price'
type: object
example:
message: 'Price must be a whole number'
properties:
message:
type: string
example: 'Price must be a whole number'
description: 'The result message.'
-
description: 'Price out of range'
type: object
example:
message: 'Price must be between 99 and 10000000'
properties:
message:
type: string
example: 'Price must be between 99 and 10000000'
description: 'The result message.'
-
description: 'Invalid theme color'
type: object
example:
message: 'Theme color must be one of: blue, green, yellow, orange, red, purple, gold, black'
properties:
message:
type: string
example: 'Theme color must be one of: blue, green, yellow, orange, red, purple, gold, black'
description: 'The result message.'
-
description: 'Invalid status'
type: object
example:
message: 'Status must be one of: activate, deactivate'
properties:
message:
type: string
example: 'Status must be one of: activate, deactivate'
description: 'The result message.'
-
description: 'Invalid display name'
type: object
example:
message: 'Display name must match the domain name (only letter casing may differ)'
properties:
message:
type: string
example: 'Display name must match the domain name (only letter casing may differ)'
description: 'The result message.'
-
description: 'Headline without text'
type: object
example:
message: 'Text is required when headline is provided'
properties:
message:
type: string
example: 'Text is required when headline is provided'
description: 'The result message.'
-
description: 'Instant-buy template without price'
type: object
example:
message: 'Instant-buy templates require either a price or price_suggest to be enabled'
properties:
message:
type: string
example: 'Instant-buy templates require either a price or price_suggest to be enabled'
description: 'The result message.'
-
description: 'Missing payout account'
type: object
example:
message: 'A payout bank account is required in your account settings before creating sale pages'
properties:
message:
type: string
example: 'A payout bank account is required in your account settings before creating sale pages'
description: 'The result message.'
-
description: 'Unsupported TLD'
type: object
example:
message: 'This TLD is not supported'
properties:
message:
type: string
example: 'This TLD is not supported'
description: 'The result message.'
-
description: 'Invalid configuration'
type: object
example:
message: 'Invalid configuration'
fields:
- theme_color
properties:
message:
type: string
example: 'Invalid configuration'
description: 'The result message.'
fields:
type: array
example:
- theme_color
items:
type: string
409:
description: 'Sale page already exists'
content:
application/json:
schema:
type: object
example:
message: 'Sale page already exists'
properties:
message:
type: string
example: 'Sale page already exists'
description: 'The result message.'
tags:
- 'Domain Offers'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The domain name to create a sale page for. Domains you manage with ELITEDOMAINS become an internal sale page; any other domain becomes an external sale page, which stays `unverified` until its nameservers are pointed at ELITEDOMAINS (unless your account is set up to skip that verification).'
example: example.de
use_default_config:
type: boolean
description: "Load your account's default sale page configuration (configured in the app) as a starting point, before applying any other fields provided in this request. Has no effect if your account has no default configuration set."
example: false
template:
type: string
description: 'The sale page template. Determines the sale type: `slim`, `sicherheit` and `vertrieb` are instant-buy templates, `default`, `smart` and `expert` are contact-form templates. Required unless provided via `use_default_config`. Options: `slim`, `sicherheit`, `vertrieb`, `default`, `smart`, `expert`, `individual-ender`.'
example: slim
enum:
- slim
- sicherheit
- vertrieb
- default
- smart
- expert
- individual-ender
price:
type: integer
description: 'The asking price in EUR, as a whole number (must be between 99 and 10000000).'
example: 2999
nullable: true
price_suggest:
type: boolean
description: 'Whether visitors may submit their own price suggestion. Only relevant for instant-buy templates.'
example: true
qualified_leads:
type: boolean
description: 'Whether to ask visitors qualifying questions before they can get in touch.'
example: false
theme_color:
type: string
description: 'The color scheme of the sale page. Required for all templates except `individual-ender`. Options: `blue`, `green`, `yellow`, `orange`, `red`, `purple`, `gold`, `black`.'
example: blue
enum:
- blue
- green
- yellow
- orange
- red
- purple
- gold
- black
hide_on_marketplace:
type: boolean
description: 'Whether to hide this sale page from the public marketplace.'
example: false
route_domain:
type: boolean
description: 'Whether to route the domain to this sale page. Only applies to domains managed by ELITEDOMAINS.'
example: true
status:
type: string
description: 'Leave the newly created sale page active (the default) or immediately deactivate it. Options: `activate`, `deactivate`.'
example: activate
enum:
- activate
- deactivate
display_name:
type: string
description: 'A custom display name. Must be identical to the domain name (only letter casing may differ).'
example: Example.de
nullable: true
headline:
type: string
description: 'A custom headline shown on the sale page.'
example: 'This domain is for sale'
nullable: true
text:
type: string
description: 'Custom body text shown on the sale page. Required when `headline` is provided.'
example: 'Contact us to make an offer.'
nullable: true
required:
- name
patch:
summary: 'Update a sale page'
operationId: updateASalePage
description: "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.\n\nRequires a token with the `offers:write` scope (write access to Offers)."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: Success
type: object
example:
message: 'Sale page updated'
name: example.de
properties:
message:
type: string
example: 'Sale page updated'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
-
description: Sandbox
type: object
example:
message: 'Sale page would be updated (sandbox mode)'
name: example.de
properties:
message:
type: string
example: 'Sale page would be updated (sandbox mode)'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The result message.'
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'The result message.'
-
description: 'No fields provided'
type: object
example:
message: 'No changes provided'
properties:
message:
type: string
example: 'No changes provided'
description: 'The result message.'
-
description: 'Invalid price'
type: object
example:
message: 'Price must be a whole number'
properties:
message:
type: string
example: 'Price must be a whole number'
description: 'The result message.'
-
description: 'Price out of range'
type: object
example:
message: 'Price must be between 99 and 10000000'
properties:
message:
type: string
example: 'Price must be between 99 and 10000000'
description: 'The result message.'
-
description: 'Invalid template'
type: object
example:
message: 'Template must be one of: default, smart, expert, slim, sicherheit, vertrieb'
properties:
message:
type: string
example: 'Template must be one of: default, smart, expert, slim, sicherheit, vertrieb'
description: 'The result message.'
-
description: 'Invalid theme color'
type: object
example:
message: 'Theme color must be one of: blue, green, yellow, orange, red, purple, gold, black'
properties:
message:
type: string
example: 'Theme color must be one of: blue, green, yellow, orange, red, purple, gold, black'
description: 'The result message.'
-
description: 'Invalid status'
type: object
example:
message: 'Status must be one of: activate, deactivate'
properties:
message:
type: string
example: 'Status must be one of: activate, deactivate'
description: 'The result message.'
-
description: 'Invalid display name'
type: object
example:
message: 'Display name must match the domain name (only letter casing may differ)'
properties:
message:
type: string
example: 'Display name must match the domain name (only letter casing may differ)'
description: 'The result message.'
-
description: 'Headline without text'
type: object
example:
message: 'Text is required when headline is provided'
properties:
message:
type: string
example: 'Text is required when headline is provided'
description: 'The result message.'
-
description: 'Instant-buy template without price'
type: object
example:
message: 'Instant-buy templates require either a price or price_suggest to be enabled'
properties:
message:
type: string
example: 'Instant-buy templates require either a price or price_suggest to be enabled'
description: 'The result message.'
-
description: 'Invalid configuration'
type: object
example:
message: 'Invalid configuration'
fields:
- theme_color
properties:
message:
type: string
example: 'Invalid configuration'
description: 'The result message.'
fields:
type: array
example:
- theme_color
items:
type: string
404:
description: 'Sale page not found'
content:
application/json:
schema:
type: object
example:
message: 'Sale page not found'
properties:
message:
type: string
example: 'Sale page not found'
description: 'The result message.'
tags:
- 'Domain Offers'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The domain name of the sale page.'
example: example.de
template:
type: string
description: 'The sale page template. Determines the sale type: `slim`, `sicherheit` and `vertrieb` are instant-buy templates, `default`, `smart` and `expert` are contact-form templates. Options: `slim`, `sicherheit`, `vertrieb`, `default`, `smart`, `expert`, `individual-ender`.'
example: slim
enum:
- slim
- sicherheit
- vertrieb
- default
- smart
- expert
- individual-ender
price:
type: integer
description: 'The asking price in EUR, as a whole number (must be between 99 and 10000000). Pass `null` to remove a fixed price.'
example: 2999
nullable: true
price_suggest:
type: boolean
description: 'Whether visitors may submit their own price suggestion. Only relevant for instant-buy templates.'
example: true
qualified_leads:
type: boolean
description: 'Whether to ask visitors qualifying questions before they can get in touch.'
example: false
theme_color:
type: string
description: 'The color scheme of the sale page. Options: `blue`, `green`, `yellow`, `orange`, `red`, `purple`, `gold`, `black`.'
example: blue
enum:
- blue
- green
- yellow
- orange
- red
- purple
- gold
- black
hide_on_marketplace:
type: boolean
description: 'Whether to hide this sale page from the public marketplace.'
example: false
route_domain:
type: boolean
description: 'Whether to route the domain to this sale page. Only applies to domains managed by ELITEDOMAINS.'
example: true
status:
type: string
description: 'Activate or deactivate the sale page. Options: `activate`, `deactivate`.'
example: activate
enum:
- activate
- deactivate
display_name:
type: string
description: 'A custom display name. Must be identical to the domain name (only letter casing may differ).'
example: Example.de
nullable: true
headline:
type: string
description: 'A custom headline shown on the sale page.'
example: 'This domain is for sale'
nullable: true
text:
type: string
description: 'Custom body text shown on the sale page. Required when `headline` is provided.'
example: 'Contact us to make an offer.'
nullable: true
required:
- name
delete:
summary: 'Delete a sale page'
operationId: deleteASalePage
description: "Delete a sale page (domain offer), identified by its domain name. This only removes the sale page; the domain itself is not affected.\n\nRequires a token with the `offers:write` scope (write access to Offers)."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: Success
type: object
example:
message: 'Sale page deleted'
name: example.de
properties:
message:
type: string
example: 'Sale page deleted'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
-
description: Sandbox
type: object
example:
message: 'Sale page would be deleted (sandbox mode)'
name: example.de
properties:
message:
type: string
example: 'Sale page would be deleted (sandbox mode)'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The result message.'
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'The result message.'
404:
description: 'Sale page not found'
content:
application/json:
schema:
type: object
example:
message: 'Sale page not found'
properties:
message:
type: string
example: 'Sale page not found'
description: 'The result message.'
tags:
- 'Domain Offers'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The domain name of the sale page.'
example: example.de
required:
- name
/offers/filters:
get:
summary: 'List offer filter options'
operationId: listOfferFilterOptions
description: "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.\n\nRequires a token with the `offers:read` scope (read access to Offers)."
parameters: []
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
tags:
-
name: Premium
slug: premium
count: 8
-
name: Short
slug: short
count: 3
tlds:
-
tld: de
count: 90
-
tld: com
count: 35
properties:
tags:
type: array
example:
-
name: Premium
slug: premium
count: 8
-
name: Short
slug: short
count: 3
description: 'Tags you can pass to the `tags` filter on GET /offers, with the number of matching sale pages for each.'
items:
type: object
properties:
name:
type: string
example: Premium
slug:
type: string
example: premium
count:
type: integer
example: 8
tlds:
type: array
example:
-
tld: de
count: 90
-
tld: com
count: 35
description: 'TLDs you can pass to the `tld` filter on GET /offers, with the number of matching sale pages for each.'
items:
type: object
properties:
tld:
type: string
example: de
count:
type: integer
example: 90
tags:
- 'Domain Offers'
/offers/statistics:
get:
summary: 'List sale page statistics'
operationId: listSalePageStatistics
description: "Visitors and checkout figures of every sale page in your account over a fixed period, plus the total of all sale pages. Figures are completed nightly, so every period ends yesterday.\n\nRequires a token with the `offers:read` scope (read access to Offers)."
parameters:
-
in: query
name: page
description: 'The page number for pagination.'
example: 1
required: false
schema:
type: integer
description: 'The page number for pagination.'
example: 1
-
in: query
name: per_page
description: 'Number of results per page. Default: 100, Max: 500.'
example: 100
required: false
schema:
type: integer
description: 'Number of results per page. Default: 100, Max: 500.'
example: 100
-
in: query
name: period
description: 'Period in days, ending yesterday, or `all` for everything recorded. Default: `30`. Options: `7`, `30`, `90`, `365`, `all`.'
example: '90'
required: false
schema:
type: string
description: 'Period in days, ending yesterday, or `all` for everything recorded. Default: `30`. Options: `7`, `30`, `90`, `365`, `all`.'
example: '90'
enum:
- '7'
- '30'
- '90'
- '365'
- all
-
in: query
name: search
description: 'Only offers whose domain name contains this string (case-insensitive).'
example: example
required: false
schema:
type: string
description: 'Only offers whose domain name contains this string (case-insensitive).'
example: example
-
in: query
name: order_by
description: 'Field to order by. Default: `visitors`. Options: `visitors`, `visitors_direct`, `checkout_data`, `checkout_payment`, `checkout_confirm`, `name`.'
example: checkout_data
required: false
schema:
type: string
description: 'Field to order by. Default: `visitors`. Options: `visitors`, `visitors_direct`, `checkout_data`, `checkout_payment`, `checkout_confirm`, `name`.'
example: checkout_data
enum:
- visitors
- visitors_direct
- checkout_data
- checkout_payment
- checkout_confirm
- name
-
in: query
name: order_direction
description: 'Order direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
required: false
schema:
type: string
description: 'Order direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
enum:
- asc
- desc
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
current_page: 1
per_page: 100
total: 2
last_page: 1
data:
-
name: example.de
visitors: 142
visitors_direct: 97
checkout_data: 6
checkout_payment: 3
checkout_confirm: 2
period:
value: '30'
from: '2026-09-16'
to: '2026-10-15'
summary:
visitors: 150
visitors_direct: 101
checkout_data: 6
checkout_payment: 3
checkout_confirm: 2
sales: 1
abandoned: 5
properties:
current_page:
type: integer
example: 1
description: 'The current page number.'
per_page:
type: integer
example: 100
description: 'Number of results per page.'
total:
type: integer
example: 2
description: 'Total number of results across all pages.'
last_page:
type: integer
example: 1
description: 'The number of the last page.'
data:
type: array
example:
-
name: example.de
visitors: 142
visitors_direct: 97
checkout_data: 6
checkout_payment: 3
checkout_confirm: 2
description: 'The results on this page.'
items:
type: object
properties:
name:
type: string
example: example.de
visitors:
type: integer
example: 142
visitors_direct:
type: integer
example: 97
checkout_data:
type: integer
example: 6
checkout_payment:
type: integer
example: 3
checkout_confirm:
type: integer
example: 2
period:
type: object
properties:
value:
type: string
example: '30'
description: 'The requested period.'
from:
type: string
example: '2026-09-16'
description: 'First day (YYYY-MM-DD); null for `all`.'
nullable: true
to:
type: string
example: '2026-10-15'
description: 'Last day (YYYY-MM-DD), always yesterday: figures are completed nightly.'
description: 'The period the figures cover.'
summary:
type: object
properties:
visitors:
type: integer
example: 150
description: 'Unique visitors per day, summed over the period (sale page and redirect together). A visitor coming back on another day counts again.'
visitors_direct:
type: integer
example: 101
description: 'Of these, visitors without a referring page, e.g. typing the domain (type-in).'
checkout_data:
type: integer
example: 6
description: 'Visitors who opened the instant-buy checkout (first step: buyer data).'
checkout_payment:
type: integer
example: 3
description: 'Visitors who reached the payment step.'
checkout_confirm:
type: integer
example: 2
description: 'Visitors who reached the final confirmation step.'
sales:
type: integer
example: 1
description: 'Purchases in the period, without canceled, failed or refunded payments. A sold sale page is deleted and no longer listed; its traffic up to the day of the sale still counts in this summary.'
abandoned:
type: integer
example: 5
description: 'Checkouts without a purchase: `checkout_data` minus `sales`, never below 0.'
description: 'The figures of all your sale pages together over the period, with the sales.'
tags:
- 'Domain Offers'
/offers/statistics/daily:
get:
summary: 'Get the statistics of a sale page'
operationId: getTheStatisticsOfASalePage
description: "Visitors and checkout figures of one sale page per day, with the referring sources. Unlike the listing this includes today, whose figures are still growing.\n\nRequires a token with the `offers:read` scope (read access to Offers)."
parameters:
-
in: query
name: domain
description: 'The domain name of one of your sale pages. IDNs are supported in Unicode and punycode form.'
example: example.de
required: true
schema:
type: string
description: 'The domain name of one of your sale pages. IDNs are supported in Unicode and punycode form.'
example: example.de
-
in: query
name: from
description: 'First day (YYYY-MM-DD). Default: 29 days before `to`.'
example: '2026-09-17'
required: false
schema:
type: string
description: 'First day (YYYY-MM-DD). Default: 29 days before `to`.'
example: '2026-09-17'
-
in: query
name: to
description: "Last day (YYYY-MM-DD), at most today. Default: today. Today's figures are still growing. The range may span at most 366 days."
example: '2026-10-16'
required: false
schema:
type: string
description: "Last day (YYYY-MM-DD), at most today. Default: today. Today's figures are still growing. The range may span at most 366 days."
example: '2026-10-16'
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
domain: example.de
from: '2026-10-15'
to: '2026-10-16'
summary:
visitors: 9
visitors_direct: 6
checkout_data: 1
checkout_payment: 0
checkout_confirm: 0
days:
-
date: '2026-10-15'
visitors: 4
visitors_direct: 3
checkout_data: 1
checkout_payment: 0
checkout_confirm: 0
-
date: '2026-10-16'
visitors: 5
visitors_direct: 3
checkout_data: 0
checkout_payment: 0
checkout_confirm: 0
referrers:
-
source: null
visitors: 6
-
source: Google
visitors: 3
properties:
domain:
type: string
example: example.de
description: 'The domain name.'
from:
type: string
example: '2026-10-15'
description: 'First day (YYYY-MM-DD).'
to:
type: string
example: '2026-10-16'
description: 'Last day (YYYY-MM-DD).'
summary:
type: object
properties:
visitors:
type: integer
example: 9
description: 'Unique visitors per day, summed over the period (sale page and redirect together). A visitor coming back on another day counts again.'
visitors_direct:
type: integer
example: 6
description: 'Of these, visitors without a referring page, e.g. typing the domain (type-in).'
checkout_data:
type: integer
example: 1
description: 'Visitors who opened the instant-buy checkout (first step: buyer data).'
checkout_payment:
type: integer
example: 0
description: 'Visitors who reached the payment step.'
checkout_confirm:
type: integer
example: 0
description: 'Visitors who reached the final confirmation step.'
description: 'The figures summed over the range.'
days:
type: array
example:
-
date: '2026-10-15'
visitors: 4
visitors_direct: 3
checkout_data: 1
checkout_payment: 0
checkout_confirm: 0
-
date: '2026-10-16'
visitors: 5
visitors_direct: 3
checkout_data: 0
checkout_payment: 0
checkout_confirm: 0
description: 'One entry per day of the range, including days without visitors.'
items:
type: object
properties:
date:
type: string
example: '2026-10-15'
visitors:
type: integer
example: 4
visitors_direct:
type: integer
example: 3
checkout_data:
type: integer
example: 1
checkout_payment:
type: integer
example: 0
checkout_confirm:
type: integer
example: 0
referrers:
type: array
example:
-
source: null
visitors: 6
-
source: Google
visitors: 3
description: 'Where visitors came from, most visitors first (top 20 sources plus direct).'
items:
type: object
properties:
source:
type: string
example: null
nullable: true
visitors:
type: integer
example: 6
404:
description: 'Not your sale page'
content:
application/json:
schema:
type: object
example:
message: 'Sale page not found.'
properties:
message:
type: string
example: 'Sale page not found.'
tags:
- 'Domain Offers'
/offers/price:
patch:
summary: 'Update the price of a sale page'
operationId: updateThePriceOfASalePage
description: "Update the asking price of a sale page (domain offer), identified by its domain name.\n\nRequires a token with the `offers:write` scope (write access to Offers)."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: Success
type: object
example:
message: 'Sale price updated'
name: example.de
price: 2999
properties:
message:
type: string
example: 'Sale price updated'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
price:
type: integer
example: 2999
description: 'The new price in EUR.'
-
description: Sandbox
type: object
example:
message: 'Sale price would be updated (sandbox mode)'
name: example.de
price: 2999
properties:
message:
type: string
example: 'Sale price would be updated (sandbox mode)'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
price:
type: integer
example: 2999
description: 'The new price in EUR.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The result message.'
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'The result message.'
-
description: 'Missing price'
type: object
example:
message: 'Price is missing'
properties:
message:
type: string
example: 'Price is missing'
description: 'The result message.'
-
description: 'Invalid price'
type: object
example:
message: 'Price must be a whole number'
properties:
message:
type: string
example: 'Price must be a whole number'
description: 'The result message.'
-
description: 'Price out of range'
type: object
example:
message: 'Price must be between 99 and 10000000'
properties:
message:
type: string
example: 'Price must be between 99 and 10000000'
description: 'The result message.'
404:
description: 'Sale page not found'
content:
application/json:
schema:
type: object
example:
message: 'Sale page not found'
properties:
message:
type: string
example: 'Sale page not found'
description: 'The result message.'
tags:
- 'Domain Offers'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The domain name of the sale page.'
example: example.de
price:
type: integer
description: 'The new asking price in EUR, as a whole number (must be between 99 and 10000000).'
example: 2999
required:
- name
- price
'/catcher/droplist/{tld}':
get:
summary: 'ED-1013: one droplist per TLD — /catcher/droplist/ch, or ?tld=ch; .de without one.'
operationId: eD1013OneDroplistPerTLDcatcherdroplistchOrtldchdeWithoutOne
description: ''
parameters: []
responses:
503:
description: ''
content:
application/json:
schema:
type: object
example:
message: 'Service Unavailable'
properties:
message:
type: string
example: 'Service Unavailable'
tags:
- Endpoints
parameters:
-
in: path
name: tld
description: 'Optional parameter.'
required: true
schema:
type: string
examples:
omitted:
summary: 'When the value is omitted'
value: ''
present:
summary: 'When the value is present'
value: zmi
/handles:
get:
summary: 'List all handles'
operationId: listAllHandles
description: "Retrieve a paginated list of all contact handles in your account.\n\nRequires a token with the `handles:read` scope (read access to Handles)."
parameters:
-
in: query
name: page
description: 'The page number for pagination.'
example: 1
required: false
schema:
type: integer
description: 'The page number for pagination.'
example: 1
-
in: query
name: per_page
description: 'Number of results per page. Default: 500, Max: 500.'
example: 500
required: false
schema:
type: integer
description: 'Number of results per page. Default: 500, Max: 500.'
example: 500
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
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: john@example.com
phone: '+49.16094751251'
created_at: '2023-01-15T10:30:00.000000Z'
properties:
current_page:
type: integer
example: 1
description: 'The current page number.'
per_page:
type: integer
example: 500
description: 'Number of results per page.'
data:
type: array
example:
-
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: john@example.com
phone: '+49.16094751251'
created_at: '2023-01-15T10:30:00.000000Z'
description: 'The results on this page.'
items:
type: object
properties:
id:
type: integer
example: 123
alias:
type: string
example: JohnPrivate
type:
type: string
example: PERSON
handle_name:
type: string
example: 'John Doe'
contact_person:
type: string
example: null
nullable: true
street_name:
type: string
example: 'Unter den Linden'
street_number:
type: string
example: '12'
address_addition:
type: string
example: null
nullable: true
postalcode:
type: string
example: '12345'
city:
type: string
example: Berlin
state:
type: string
example: null
nullable: true
country_id:
type: integer
example: 276
country_iso:
type: string
example: DE
email:
type: string
example: john@example.com
phone:
type: string
example: '+49.16094751251'
created_at:
type: string
example: '2023-01-15T10:30:00.000000Z'
tags:
- 'Handle Management'
post:
summary: 'Create a new handle'
operationId: createANewHandle
description: "Add a new contact handle to your account. Handles are used for domain contact information at the registry.\n\nThis endpoint may execute registry operations and counts against your API rate limit.\n\nRequires a token with the `handles:write` scope (write access to Handles)."
parameters: []
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
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: john@example.com
phone: '+49.16094751251'
created_at: '2023-01-15T10:30:00.000000Z'
properties:
id:
type: integer
example: 123
description: 'The handle ID.'
alias:
type: string
example: JohnPrivate
description: 'Internal alias of the handle.'
nullable: true
type:
type: string
example: PERSON
description: 'Handle type. Options: `PERSON`, `ORG`.'
enum:
- PERSON
- ORG
handle_name:
type: string
example: 'John Doe'
description: 'Full name or company name.'
contact_person:
type: string
example: null
description: 'Contact person (for ORG handles).'
nullable: true
street_name:
type: string
example: 'Unter den Linden'
description: 'Street name without house number.'
street_number:
type: string
example: '12'
description: 'House number.'
address_addition:
type: string
example: null
description: 'Address addition.'
nullable: true
postalcode:
type: string
example: '12345'
description: 'Postal code.'
city:
type: string
example: Berlin
description: 'City name.'
state:
type: string
example: null
description: 'State or province.'
nullable: true
country_id:
type: integer
example: 276
description: 'Numeric country ID (legacy).'
country_iso:
type: string
example: DE
description: 'Country code (ISO 3166-2).'
nullable: true
email:
type: string
example: john@example.com
description: 'Email address.'
phone:
type: string
example: '+49.16094751251'
description: 'Phone number in E.164 format.'
created_at:
type: string
example: '2023-01-15T10:30:00.000000Z'
description: 'Timestamp the handle was created (ISO 8601).'
400:
description: 'Validation error'
content:
application/json:
schema:
type: object
example:
message: 'Your input is invalid or incomplete.'
error:
field:
- 'error message'
properties:
message:
type: string
example: 'Your input is invalid or incomplete.'
error:
type: object
properties:
field:
type: array
example:
- 'error message'
items:
type: string
500:
description: 'Unknown error'
content:
application/json:
schema:
type: object
example:
message: 'Unknown error'
properties:
message:
type: string
example: 'Unknown error'
tags:
- 'Handle Management'
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
alias:
type: string
description: 'Internal alias for the handle (optional, defaults to the registry handle).'
example: JohnPrivate
type:
type: string
description: 'Handle type. Options: `PERSON`, `ORG`.'
example: PERSON
enum:
- PERSON
- ORG
handle_name:
type: string
description: 'Full name or company name.'
example: 'John Doe'
contact_person:
type: string
description: 'Contact person. Required if type is ORG.'
example: 'John Doe'
street_name:
type: string
description: 'Street name without house number.'
example: 'Unter den Linden'
street_number:
type: string
description: 'House number.'
example: '12'
address_addition:
type: string
description: 'Address addition (optional).'
example: '3rd floor'
postalcode:
type: string
description: 'Postal code.'
example: '12345'
city:
type: string
description: 'City name.'
example: Berlin
state:
type: string
description: 'State or province (optional, required for some TLDs).'
example: Berlin
country_iso:
type: string
description: 'Country code (ISO 3166-2).'
example: DE
country_id:
type: integer
description: 'Legacy alternative to country_iso: the numeric country ID.'
example: 276
email:
type: string
description: 'Email address.'
example: john@example.com
phone:
type: string
description: 'Phone number in E.164 format.'
example: '+49.16094751251'
general_request:
type: string
description: 'Deprecated, currently ignored.'
example: general@example.com
deprecated: true
abuse_contact:
type: string
description: 'Deprecated, currently ignored.'
example: abuse@example.com
deprecated: true
address_suggest:
type: string
description: 'Set to `keep` to skip address validation. Options: `keep`.'
example: null
enum:
- keep
required:
- type
- handle_name
- street_name
- street_number
- postalcode
- city
- country_iso
- email
- phone
'/handles/{id}':
patch:
summary: 'Update a handle'
operationId: updateAHandle
description: "Update an existing contact handle. Only include fields you want to update.\n\nThis endpoint may execute registry operations and counts against your API rate limit.\n\nRequires a token with the `handles:write` scope (write access to Handles)."
parameters: []
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
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: john@example.com
phone: '+49.16094751251'
created_at: '2023-01-15T10:30:00.000000Z'
properties:
id:
type: integer
example: 123
description: 'The handle ID.'
alias:
type: string
example: JohnPrivate
description: 'Internal alias of the handle.'
nullable: true
type:
type: string
example: PERSON
description: 'Handle type. Options: `PERSON`, `ORG`.'
enum:
- PERSON
- ORG
handle_name:
type: string
example: 'John Doe'
description: 'Full name or company name.'
contact_person:
type: string
example: null
description: 'Contact person (for ORG handles).'
nullable: true
street_name:
type: string
example: 'Unter den Linden'
description: 'Street name without house number.'
street_number:
type: string
example: '12'
description: 'House number.'
address_addition:
type: string
example: null
description: 'Address addition.'
nullable: true
postalcode:
type: string
example: '12345'
description: 'Postal code.'
city:
type: string
example: Berlin
description: 'City name.'
state:
type: string
example: null
description: 'State or province.'
nullable: true
country_id:
type: integer
example: 276
description: 'Numeric country ID (legacy).'
country_iso:
type: string
example: DE
description: 'Country code (ISO 3166-2).'
nullable: true
email:
type: string
example: john@example.com
description: 'Email address.'
phone:
type: string
example: '+49.16094751251'
description: 'Phone number in E.164 format.'
created_at:
type: string
example: '2023-01-15T10:30:00.000000Z'
description: 'Timestamp the handle was created (ISO 8601).'
400:
description: 'Validation error'
content:
application/json:
schema:
type: object
example:
message: 'Your input is invalid or incomplete.'
error:
field:
- 'error message'
properties:
message:
type: string
example: 'Your input is invalid or incomplete.'
error:
type: object
properties:
field:
type: array
example:
- 'error message'
items:
type: string
404:
description: 'Handle not found'
content:
application/json:
schema:
type: object
example:
message: 'Handle not found'
properties:
message:
type: string
example: 'Handle not found'
tags:
- 'Handle Management'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
alias:
type: string
description: 'Internal alias for the handle (optional, defaults to the registry handle).'
example: JohnPrivate
contact_person:
type: string
description: 'Contact person. Required if type is ORG.'
example: 'John Doe'
street_name:
type: string
description: 'Street name without house number.'
example: 'Unter den Linden'
street_number:
type: string
description: 'House number.'
example: '12'
address_addition:
type: string
description: 'Address addition (optional).'
example: '3rd floor'
postalcode:
type: string
description: 'Postal code.'
example: '12345'
city:
type: string
description: 'City name.'
example: Berlin
state:
type: string
description: 'State or province (optional, required for some TLDs).'
example: Berlin
country_iso:
type: string
description: 'Country code (ISO 3166-2).'
example: DE
country_id:
type: integer
description: 'Legacy alternative to country_iso: the numeric country ID.'
example: 276
email:
type: string
description: 'Email address.'
example: john@example.com
phone:
type: string
description: 'Phone number in E.164 format.'
example: '+49.16094751251'
general_request:
type: string
description: 'Deprecated, currently ignored.'
example: general@example.com
deprecated: true
abuse_contact:
type: string
description: 'Deprecated, currently ignored.'
example: abuse@example.com
deprecated: true
address_suggest:
type: string
description: 'Set to `keep` to skip address validation. Options: `keep`.'
example: null
enum:
- keep
parameters:
-
in: path
name: id
description: 'The handle ID.'
example: 123
required: true
schema:
type: integer
/invoices:
get:
summary: 'List invoices'
operationId: listInvoices
description: "Retrieve a paginated list of your invoices, most recent first. Amounts are in EUR.\n\nRequires a token with the `invoices:read` scope (read access to Invoices)."
parameters:
-
in: query
name: page
description: 'The page number for pagination.'
example: 1
required: false
schema:
type: integer
description: 'The page number for pagination.'
example: 1
-
in: query
name: per_page
description: 'Number of results per page. Default: 50, Max: 500.'
example: 50
required: false
schema:
type: integer
description: 'Number of results per page. Default: 50, Max: 500.'
example: 50
-
in: query
name: status
description: 'Filter by status. Accepts a comma-separated list of statuses (`draft`, `pending`, `complete`, `failed`, `dispute`, `incomplete`, `inkasso`, `lost`, `cancelled`).'
example: complete
required: false
schema:
type: string
description: 'Filter by status. Accepts a comma-separated list of statuses (`draft`, `pending`, `complete`, `failed`, `dispute`, `incomplete`, `inkasso`, `lost`, `cancelled`).'
example: complete
-
in: query
name: from
description: 'Only invoices created on or after this date (`YYYY-MM-DD`).'
example: '2026-01-01'
required: false
schema:
type: string
description: 'Only invoices created on or after this date (`YYYY-MM-DD`).'
example: '2026-01-01'
-
in: query
name: to
description: 'Only invoices created on or before this date (`YYYY-MM-DD`).'
example: '2026-06-30'
required: false
schema:
type: string
description: 'Only invoices created on or before this date (`YYYY-MM-DD`).'
example: '2026-06-30'
-
in: query
name: order_direction
description: 'Sort direction by invoice date. Default: `desc` (newest first). Options: `asc`, `desc`.'
example: desc
required: false
schema:
type: string
description: 'Sort direction by invoice date. Default: `desc` (newest first). Options: `asc`, `desc`.'
example: desc
enum:
- asc
- desc
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
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.0
tax_percentage: 19.0
tax_amount: 19.0
gross_amount: 119.0
warning_fee_amount: 0.0
total_amount: 119.0
paid_amount: 119.0
open_amount: 0.0
discounts: []
properties:
current_page:
type: integer
example: 1
description: 'The current page number.'
per_page:
type: integer
example: 50
description: 'Number of results per page.'
total:
type: integer
example: 1
description: 'Total number of results across all pages.'
last_page:
type: integer
example: 1
description: 'The number of the last page.'
data:
type: array
example:
-
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: []
description: 'The results on this page.'
items:
type: object
properties:
id:
type: integer
example: 123
number:
type: string
example: R202600123
date:
type: string
example: '2026-03-01T04:30:00.000000Z'
status:
type: string
example: complete
payment_method:
type: string
example: card
instant_payment:
type: boolean
example: true
amounts:
type: object
properties:
net_amount:
type: number
example: 100.0
tax_percentage:
type: number
example: 19.0
tax_amount:
type: number
example: 19.0
gross_amount:
type: number
example: 119.0
warning_fee_amount:
type: number
example: 0.0
total_amount:
type: number
example: 119.0
paid_amount:
type: number
example: 119.0
open_amount:
type: number
example: 0.0
discounts:
type: array
example: []
401:
description: Unauthenticated
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Invoices
'/invoices/{id}':
get:
summary: 'Get an invoice'
operationId: getAnInvoice
description: "Retrieve a single invoice including its line items (positions), as printed on the invoice document. Amounts are in EUR.\n\nRequires a token with the `invoices:read` scope (read access to Invoices)."
parameters: []
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
id: 123
number: R202600123
date: '2026-03-01T04:30:00.000000Z'
status: complete
payment_method: card
instant_payment: true
amounts:
net_amount: 100.0
tax_percentage: 19.0
tax_amount: 19.0
gross_amount: 119.0
warning_fee_amount: 0.0
total_amount: 119.0
paid_amount: 119.0
open_amount: 0.0
discounts: []
positions:
-
label: 'Verlängerung .de, 1 Jahr'
count: 20
single_price: 5.0
total: 100.0
properties:
id:
type: integer
example: 123
description: 'The invoice ID.'
number:
type: string
example: R202600123
description: 'The invoice number as printed on the document.'
date:
type: string
example: '2026-03-01T04:30:00.000000Z'
description: 'Timestamp the invoice was created (ISO 8601).'
status:
type: string
example: complete
description: 'The invoice status. `complete` means paid; `draft` and `pending` are still being booked; `failed`, `dispute` and `incomplete` need action; `inkasso`, `lost` and `cancelled` are closed without (full) payment. Options: `draft`, `pending`, `complete`, `failed`, `dispute`, `incomplete`, `inkasso`, `lost`, `cancelled`.'
enum:
- draft
- pending
- complete
- failed
- dispute
- incomplete
- inkasso
- lost
- cancelled
payment_method:
type: string
example: card
description: 'The payment method the invoice is settled with, e.g. `card`, `paypal`, `sepa_debit`, `monthly` or `free`.'
nullable: true
instant_payment:
type: boolean
example: true
description: 'Whether the invoice was charged instantly to the stored payment method (`true`) or is part of monthly invoicing (`false`).'
amounts:
type: object
properties:
net_amount:
type: number
example: 100.0
description: 'The net amount after discounts, excluding VAT.'
tax_percentage:
type: number
example: 19.0
description: 'The VAT percentage applied.'
tax_amount:
type: number
example: 19.0
description: 'The VAT amount.'
gross_amount:
type: number
example: 119.0
description: 'The invoice total including VAT.'
warning_fee_amount:
type: number
example: 0.0
description: 'The sum of payment reminder fees added to this invoice, if any.'
total_amount:
type: number
example: 119.0
description: 'The total amount due (`gross_amount` + `warning_fee_amount`).'
paid_amount:
type: number
example: 119.0
description: 'The amount already received towards this invoice, including partial payments; chargebacks are deducted. `null` for older paid invoices that predate payment tracking (late 2021), where no payment records exist.'
nullable: true
open_amount:
type: number
example: 0.0
description: 'The outstanding amount still due (`total_amount` minus `paid_amount`, never negative). Always 0 for `complete` and `cancelled` invoices.'
description: 'The invoice amounts in EUR.'
discounts:
type: array
example: []
description: 'Discounts applied to this invoice. Empty when none apply.'
positions:
type: array
example:
-
label: 'Verlängerung .de, 1 Jahr'
count: 20
single_price: 5
total: 100
description: 'The invoice line items (positions), as printed on the invoice document.'
items:
type: object
properties:
label:
type: string
example: 'Verlängerung .de, 1 Jahr'
count:
type: integer
example: 20
single_price:
type: number
example: 5.0
total:
type: number
example: 100.0
401:
description: Unauthenticated
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
404:
description: 'Not found'
content:
application/json:
schema:
type: object
example:
message: 'Invoice not found'
properties:
message:
type: string
example: 'Invoice not found'
tags:
- Invoices
parameters:
-
in: path
name: id
description: 'The invoice ID, as returned by `GET /invoices`.'
example: 123
required: true
schema:
type: integer
'/invoices/{id}/services':
get:
summary: "List an invoice's service records"
operationId: listAnInvoicesServiceRecords
description: "Retrieve the service records (Leistungsabrechnung) 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.\n\nRequires a token with the `invoices:read` scope (read access to Invoices)."
parameters: []
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
invoice:
id: 123
number: R202600123
data:
-
name: example.de
type: Verlängerung
period: '01.06.2026 - 30.06.2026'
price: 5.0
properties:
invoice:
type: object
properties:
id:
type: integer
example: 123
description: 'The invoice ID.'
number:
type: string
example: R202600123
description: 'The invoice number.'
description: 'The invoice these service records belong to.'
data:
type: array
example:
-
name: example.de
type: Verlängerung
period: '01.06.2026 - 30.06.2026'
price: 5
description: "One record per billed domain/service, mirroring the invoice's service record (Leistungsabrechnung) document and CSV."
items:
type: object
properties:
name:
type: string
example: example.de
type:
type: string
example: Verlängerung
period:
type: string
example: '01.06.2026 - 30.06.2026'
price:
type: number
example: 5.0
401:
description: Unauthenticated
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
404:
description: 'Not found'
content:
application/json:
schema:
type: object
example:
message: 'Invoice not found'
properties:
message:
type: string
example: 'Invoice not found'
tags:
- Invoices
parameters:
-
in: path
name: id
description: 'The invoice ID, as returned by `GET /invoices`.'
example: 123
required: true
schema:
type: integer
/journal:
get:
summary: 'List the journal'
operationId: listTheJournal
description: "Retrieve a paginated list of journal entries recording changes made to your domains (registrations, transfers, renewals, handle/redirector changes, deletions, ...), most recent first.\n\nRequires a token with the `journal:read` scope (read access to Journal)."
parameters:
-
in: query
name: page
description: 'The page number for pagination.'
example: 1
required: false
schema:
type: integer
description: 'The page number for pagination.'
example: 1
-
in: query
name: per_page
description: 'Number of results per page. Default: 50, Max: 500.'
example: 50
required: false
schema:
type: integer
description: 'Number of results per page. Default: 50, Max: 500.'
example: 50
-
in: query
name: domain
description: 'Filter by domain name (matches domains containing this value).'
example: example.de
required: false
schema:
type: string
description: 'Filter by domain name (matches domains containing this value).'
example: example.de
-
in: query
name: type
description: 'Filter by type of change. Comma-separated for multiple values.'
example: 'domain-renewed,domain-transfer'
required: false
schema:
type: string
description: 'Filter by type of change. Comma-separated for multiple values.'
example: 'domain-renewed,domain-transfer'
-
in: query
name: source
description: 'Filter by where the change originated. Comma-separated for multiple values. Options: `interface`, `api`, `mcp`, `customer_service`, `system`, `paynow`.'
example: interface
required: false
schema:
type: string
description: 'Filter by where the change originated. Comma-separated for multiple values. Options: `interface`, `api`, `mcp`, `customer_service`, `system`, `paynow`.'
example: interface
enum:
- interface
- api
- mcp
- customer_service
- system
- paynow
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
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
properties:
current_page:
type: integer
example: 1
description: 'The current page number.'
per_page:
type: integer
example: 50
description: 'Number of results per page.'
total:
type: integer
example: 1
description: 'Total number of results across all pages.'
last_page:
type: integer
example: 1
description: 'The number of the last page.'
data:
type: array
example:
-
date: '2024-03-10T14:30:00.000000Z'
domain: example.de
type: domain-renewed
message: 'Laufzeit verlängert'
source: interface
description: 'The results on this page.'
items:
type: object
properties:
date:
type: string
example: '2024-03-10T14:30:00.000000Z'
domain:
type: string
example: example.de
type:
type: string
example: domain-renewed
message:
type: string
example: 'Laufzeit verlängert'
source:
type: string
example: interface
401:
description: Unauthenticated
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Journal
/leads:
get:
summary: 'List all leads'
operationId: listAllLeads
description: "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.\n\nRequires a token with the `leads:read` scope (read access to Leads)."
parameters:
-
in: query
name: page
description: 'The page number for pagination.'
example: 1
required: false
schema:
type: integer
description: 'The page number for pagination.'
example: 1
-
in: query
name: per_page
description: 'Number of results per page. Default: 50, Max: 500.'
example: 50
required: false
schema:
type: integer
description: 'Number of results per page. Default: 50, Max: 500.'
example: 50
-
in: query
name: domain
description: 'Filter by domain name (matches domains containing this value).'
example: example.de
required: false
schema:
type: string
description: 'Filter by domain name (matches domains containing this value).'
example: example.de
-
in: query
name: order_by
description: 'Field to order by. Default: `last_interaction_at`. Options: `last_interaction_at`, `first_contact_at`, `domain`, `current_price`.'
example: last_interaction_at
required: false
schema:
type: string
description: 'Field to order by. Default: `last_interaction_at`. Options: `last_interaction_at`, `first_contact_at`, `domain`, `current_price`.'
example: last_interaction_at
enum:
- last_interaction_at
- first_contact_at
- domain
- current_price
-
in: query
name: order_direction
description: 'Order direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
required: false
schema:
type: string
description: 'Order direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
enum:
- asc
- desc
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
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'
note: 'Renew early, buyer interest from 2023.'
metadata:
timezone: Europe/Berlin
city: Berlin
country: Germany
device_type: Desktop
interactions:
-
type: buyer_price_suggestion
price: 2500
content: null
created_at: '2024-03-08T09:15:00.000000Z'
-
type: seller_price_accepted
price: 2500
content: null
created_at: '2024-03-10T14:30:00.000000Z'
properties:
current_page:
type: integer
example: 1
description: 'The current page number.'
per_page:
type: integer
example: 50
description: 'Number of results per page.'
total:
type: integer
example: 1
description: 'Total number of results across all pages.'
last_page:
type: integer
example: 1
description: 'The number of the last page.'
data:
type: array
example:
-
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'
note: 'Renew early, buyer interest from 2023.'
metadata:
timezone: Europe/Berlin
city: Berlin
country: Germany
device_type: Desktop
interactions:
-
type: buyer_price_suggestion
price: 2500
content: null
created_at: '2024-03-08T09:15:00.000000Z'
-
type: seller_price_accepted
price: 2500
content: null
created_at: '2024-03-10T14:30:00.000000Z'
description: 'The results on this page.'
items:
type: object
properties:
id:
type: integer
example: 123
domain:
type: string
example: example.de
source:
type: string
example: buyer_price_suggestion
original_price:
type: integer
example: 2999
current_price:
type: integer
example: 2500
first_contact_at:
type: string
example: '2024-03-08T09:15:00.000000Z'
last_interaction_at:
type: string
example: '2024-03-10T14:30:00.000000Z'
note:
type: string
example: 'Renew early, buyer interest from 2023.'
metadata:
type: object
properties:
timezone:
type: string
example: Europe/Berlin
city:
type: string
example: Berlin
country:
type: string
example: Germany
device_type:
type: string
example: Desktop
interactions:
type: array
example:
-
type: buyer_price_suggestion
price: 2500
content: null
created_at: '2024-03-08T09:15:00.000000Z'
-
type: seller_price_accepted
price: 2500
content: null
created_at: '2024-03-10T14:30:00.000000Z'
items:
type: object
properties:
type:
type: string
example: buyer_price_suggestion
price:
type: integer
example: 2500
content:
type: string
example: null
nullable: true
created_at:
type: string
example: '2024-03-08T09:15:00.000000Z'
401:
description: Unauthenticated
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Leads
'/leads/{id}/counter-offer':
post:
summary: 'Send a counter-offer'
operationId: sendACounterOffer
description: "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.\n\nRequires a token with the `leads:write` scope (write access to Leads)."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: Success
type: object
example:
message: 'Counter-offer sent'
id: 123
price: 2500
properties:
message:
type: string
example: 'Counter-offer sent'
description: 'The result message.'
id:
type: integer
example: 123
description: 'The lead ID.'
price:
type: integer
example: 2500
description: 'The new price in EUR.'
-
description: Sandbox
type: object
example:
message: 'Counter-offer would be sent (sandbox mode)'
id: 123
price: 2500
properties:
message:
type: string
example: 'Counter-offer would be sent (sandbox mode)'
description: 'The result message.'
id:
type: integer
example: 123
description: 'The lead ID.'
price:
type: integer
example: 2500
description: 'The new price in EUR.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing price'
type: object
example:
message: 'Price is missing'
properties:
message:
type: string
example: 'Price is missing'
description: 'The result message.'
-
description: 'Invalid price'
type: object
example:
message: 'Price must be a whole number'
properties:
message:
type: string
example: 'Price must be a whole number'
description: 'The result message.'
-
description: 'Price out of range'
type: object
example:
message: 'Price must be between 99 and 10000000'
properties:
message:
type: string
example: 'Price must be between 99 and 10000000'
description: 'The result message.'
-
description: 'No buyer email on file'
type: object
example:
message: 'This lead has no buyer email on file'
properties:
message:
type: string
example: 'This lead has no buyer email on file'
description: 'The result message.'
404:
description: 'Lead not found'
content:
application/json:
schema:
type: object
example:
message: 'Lead not found'
properties:
message:
type: string
example: 'Lead not found'
description: 'The result message.'
tags:
- Leads
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
price:
type: integer
description: "The new asking price in EUR, sent to the buyer as a counter-offer (or as the seller's initial price, if the lead had none yet)."
example: 2500
required:
- price
parameters:
-
in: path
name: id
description: 'The lead ID, as returned by `GET /leads`.'
example: 123
required: true
schema:
type: integer
'/leads/{id}/accept':
post:
summary: 'Accept a price suggestion'
operationId: acceptAPriceSuggestion
description: "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.\n\nRequires a token with the `leads:write` scope (write access to Leads)."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: Success
type: object
example:
message: 'Price suggestion accepted'
id: 123
price: 2500
properties:
message:
type: string
example: 'Price suggestion accepted'
description: 'The result message.'
id:
type: integer
example: 123
description: 'The lead ID.'
price:
type: integer
example: 2500
description: 'The accepted price in EUR.'
-
description: Sandbox
type: object
example:
message: 'Price suggestion would be accepted (sandbox mode)'
id: 123
price: 2500
properties:
message:
type: string
example: 'Price suggestion would be accepted (sandbox mode)'
description: 'The result message.'
id:
type: integer
example: 123
description: 'The lead ID.'
price:
type: integer
example: 2500
description: 'The accepted price in EUR.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'No pending suggestion'
type: object
example:
message: 'This lead has no pending price suggestion to accept'
properties:
message:
type: string
example: 'This lead has no pending price suggestion to accept'
description: 'The result message.'
-
description: 'No buyer email on file'
type: object
example:
message: 'This lead has no buyer email on file'
properties:
message:
type: string
example: 'This lead has no buyer email on file'
description: 'The result message.'
404:
description: 'Lead not found'
content:
application/json:
schema:
type: object
example:
message: 'Lead not found'
properties:
message:
type: string
example: 'Lead not found'
description: 'The result message.'
tags:
- Leads
parameters:
-
in: path
name: id
description: 'The lead ID, as returned by `GET /leads`.'
example: 123
required: true
schema:
type: integer
/notes:
get:
summary: 'List all notes'
operationId: listAllNotes
description: "Retrieve a paginated list of your domain notes. A note belongs to a domain name rather than to a single resource, so the same note is also returned inline on that domain in `GET /domains`, `GET /offers`, `GET /leads`, `GET /transactions` and `GET /backorder/catcher`. Use this endpoint to read notes on domains that have no listing of their own, such as SEDO domains.\n\nRequires a token with the `notes:read` scope (read access to Notes)."
parameters:
-
in: query
name: page
description: 'The page number for pagination.'
example: 1
required: false
schema:
type: integer
description: 'The page number for pagination.'
example: 1
-
in: query
name: per_page
description: 'Number of results per page. Default: 50, Max: 100.'
example: 50
required: false
schema:
type: integer
description: 'Number of results per page. Default: 50, Max: 100.'
example: 50
-
in: query
name: domain
description: 'Filter by domain name (matches domains containing this value).'
example: example.de
required: false
schema:
type: string
description: 'Filter by domain name (matches domains containing this value).'
example: example.de
-
in: query
name: order_by
description: 'Field to sort by. Default: `updated_at`. Options: `updated_at`, `created_at`, `domain`.'
example: updated_at
required: false
schema:
type: string
description: 'Field to sort by. Default: `updated_at`. Options: `updated_at`, `created_at`, `domain`.'
example: updated_at
enum:
- updated_at
- created_at
- domain
-
in: query
name: order_direction
description: 'Sort direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
required: false
schema:
type: string
description: 'Sort direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
enum:
- asc
- desc
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
current_page: 1
per_page: 50
total: 1
last_page: 1
data:
-
domain: example.de
content: 'Renew early, buyer interest from 2023.'
created_at: '2024-03-08T09:15:00.000000Z'
updated_at: '2024-03-10T14:30:00.000000Z'
properties:
current_page:
type: integer
example: 1
description: 'The current page number.'
per_page:
type: integer
example: 50
description: 'Number of results per page.'
total:
type: integer
example: 1
description: 'Total number of results across all pages.'
last_page:
type: integer
example: 1
description: 'The number of the last page.'
data:
type: array
example:
-
domain: example.de
content: 'Renew early, buyer interest from 2023.'
created_at: '2024-03-08T09:15:00.000000Z'
updated_at: '2024-03-10T14:30:00.000000Z'
description: 'The results on this page.'
items:
type: object
properties:
domain:
type: string
example: example.de
content:
type: string
example: 'Renew early, buyer interest from 2023.'
created_at:
type: string
example: '2024-03-08T09:15:00.000000Z'
updated_at:
type: string
example: '2024-03-10T14:30:00.000000Z'
400:
description: 'Invalid filter'
content:
application/json:
schema:
type: object
example:
message: 'Domain filter is invalid'
properties:
message:
type: string
example: 'Domain filter is invalid'
401:
description: Unauthenticated
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Notes
patch:
summary: 'Create or update a note'
operationId: createOrUpdateANote
description: "Write your note for a domain, replacing any note you had on it. Notes are private to your account and are attached to the domain name itself, so the note written here also shows up on that domain's sale page, leads, transactions, catcher order and SEDO entry. Sending an empty or `null` `content` deletes the note, exactly like `DELETE /notes`.\n\nRequires a token with the `notes:write` scope (write access to Notes)."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: Success
type: object
example:
message: 'Note saved'
name: example.de
properties:
message:
type: string
example: 'Note saved'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
-
description: 'Note deleted'
type: object
example:
message: 'Note deleted'
name: example.de
properties:
message:
type: string
example: 'Note deleted'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
-
description: Sandbox
type: object
example:
message: 'Note would be saved (sandbox mode)'
name: example.de
properties:
message:
type: string
example: 'Note would be saved (sandbox mode)'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
-
description: 'Sandbox delete'
type: object
example:
message: 'Note would be deleted (sandbox mode)'
name: example.de
properties:
message:
type: string
example: 'Note would be deleted (sandbox mode)'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The result message.'
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'The result message.'
-
description: 'Missing content'
type: object
example:
message: 'Content is missing'
properties:
message:
type: string
example: 'Content is missing'
description: 'The result message.'
-
description: 'Invalid content'
type: object
example:
message: 'Content is invalid'
properties:
message:
type: string
example: 'Content is invalid'
description: 'The result message.'
-
description: 'Content too long'
type: object
example:
message: 'Content must not be longer than 10000 characters'
properties:
message:
type: string
example: 'Content must not be longer than 10000 characters'
description: 'The result message.'
tags:
- Notes
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The domain name to attach the note to.'
example: example.de
content:
type: string
description: 'The note text, as plain text. Line breaks are preserved; any previous note on the domain is replaced. An empty string or `null` deletes the note. Notes written in the web interface before this limit existed can be longer; those are still returned in full by `GET /notes` but have to be shortened to be written back.'
example: 'Renew early, buyer interest from 2023.'
nullable: true
required:
- name
- content
delete:
summary: 'Delete a note'
operationId: deleteANote
description: "Remove your note from a domain. The domain itself and everything attached to it are not affected.\n\nRequires a token with the `notes:write` scope (write access to Notes)."
parameters: []
responses:
200:
description: ''
content:
application/json:
schema:
oneOf:
-
description: Success
type: object
example:
message: 'Note deleted'
name: example.de
properties:
message:
type: string
example: 'Note deleted'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
-
description: Sandbox
type: object
example:
message: 'Note would be deleted (sandbox mode)'
name: example.de
properties:
message:
type: string
example: 'Note would be deleted (sandbox mode)'
description: 'The result message.'
name:
type: string
example: example.de
description: 'The domain name.'
400:
description: ''
content:
application/json:
schema:
oneOf:
-
description: 'Missing domain name'
type: object
example:
message: 'Domain name is missing'
properties:
message:
type: string
example: 'Domain name is missing'
description: 'The result message.'
-
description: 'Invalid domain'
type: object
example:
message: 'Domain name is invalid'
properties:
message:
type: string
example: 'Domain name is invalid'
description: 'The result message.'
404:
description: 'Note not found'
content:
application/json:
schema:
type: object
example:
message: 'Note not found'
properties:
message:
type: string
example: 'Note not found'
description: 'The result message.'
tags:
- Notes
requestBody:
required: true
content:
application/json:
schema:
type: object
properties:
name:
type: string
description: 'The domain name to remove the note from.'
example: example.de
required:
- name
/transactions:
get:
summary: 'List transactions'
operationId: listTransactions
description: "Retrieve a paginated list of your domain sale transactions (purchases made by buyers through Paynow), most recent first. Buyer personal data is never included.\n\nRequires a token with the `transactions:read` scope (read access to Transactions)."
parameters:
-
in: query
name: page
description: 'The page number for pagination.'
example: 1
required: false
schema:
type: integer
description: 'The page number for pagination.'
example: 1
-
in: query
name: per_page
description: 'Number of results per page. Default: 50, Max: 500.'
example: 50
required: false
schema:
type: integer
description: 'Number of results per page. Default: 50, Max: 500.'
example: 50
-
in: query
name: domain
description: 'Filter by domain name (matches domains containing this value).'
example: example.de
required: false
schema:
type: string
description: 'Filter by domain name (matches domains containing this value).'
example: example.de
-
in: query
name: order_by
description: 'Field to sort by. Default: `purchase_date`. Options: `purchase_date`, `completion_date`, `domain`, `net_price`, `gross_price`, `payout_amount`.'
example: purchase_date
required: false
schema:
type: string
description: 'Field to sort by. Default: `purchase_date`. Options: `purchase_date`, `completion_date`, `domain`, `net_price`, `gross_price`, `payout_amount`.'
example: purchase_date
enum:
- purchase_date
- completion_date
- domain
- net_price
- gross_price
- payout_amount
-
in: query
name: order_direction
description: 'Sort direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
required: false
schema:
type: string
description: 'Sort direction. Default: `desc`. Options: `asc`, `desc`.'
example: desc
enum:
- asc
- desc
responses:
200:
description: Success
content:
application/json:
schema:
type: object
example:
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.0
gross_price: 1190.0
tax_percentage: 19.0
tax_amount: 190.0
fee_percentage: 8.0
fee_amount: 80.0
payout_amount: 1110.0
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-...'
note: 'Renew early, buyer interest from 2023.'
properties:
current_page:
type: integer
example: 1
description: 'The current page number.'
per_page:
type: integer
example: 50
description: 'Number of results per page.'
total:
type: integer
example: 1
description: 'Total number of results across all pages.'
last_page:
type: integer
example: 1
description: 'The number of the last page.'
data:
type: array
example:
-
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-...'
note: 'Renew early, buyer interest from 2023.'
description: 'The results on this page.'
items:
type: object
properties:
id:
type: integer
example: 123
domain:
type: string
example: example.de
status:
type: object
properties:
payment:
type: string
example: success
transfer:
type: string
example: transferred
payout:
type: string
example: done
price:
type: object
properties:
net_price:
type: number
example: 1000.0
gross_price:
type: number
example: 1190.0
tax_percentage:
type: number
example: 19.0
tax_amount:
type: number
example: 190.0
fee_percentage:
type: number
example: 8.0
fee_amount:
type: number
example: 80.0
payout_amount:
type: number
example: 1110.0
payment_method:
type: string
example: paypal
purchase_date:
type: string
example: '2024-03-10T14:30:00.000000Z'
completion_date:
type: string
example: '2024-03-15T09:00:00.000000Z'
documents:
type: object
properties:
invoice:
type: string
example: 'https://app.elitedomains.de/example.de/invoice/MTIz/9b1f2c3a-...'
provision:
type: string
example: 'https://app.elitedomains.de/example.de/provision/MTIz/9b1f2c3a-...'
note:
type: string
example: 'Renew early, buyer interest from 2023.'
401:
description: Unauthenticated
content:
application/json:
schema:
type: object
example:
message: Unauthenticated.
properties:
message:
type: string
example: Unauthenticated.
tags:
- Transactions