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: 'Catcher Management' description: '' - name: 'Domain Management' description: '' - name: 'Domain Offers' 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. Contact support to enable API access for your account.' security: - default: [] paths: /catcher: get: summary: 'List all catcher orders' operationId: listAllCatcherOrders description: "Retrieve a paginated list of all domain catcher orders in your account.\n\nRequires a token with the `catcher:read` scope (read access to Catcher)." 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: 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: - 'Catcher Management' post: summary: 'Add domain to catcher' operationId: addDomainToCatcher description: "Add a new domain to the RGP (Redemption Grace Period) 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.\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 Catcher)." 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: 'The domain catcher is only available for .de domains' properties: message: type: string example: 'The domain catcher 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 catcher access is currently locked. Please check your invoices or contact support.' properties: message: type: string example: 'Your catcher 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: - 'Catcher Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The domain name to catch.' 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.' 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 Catcher)." 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: - 'Catcher 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 /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 /catcher`, along with how many orders currently match each option.\n\nRequires a token with the `catcher:read` scope (read access to Catcher)." 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 /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 /catcher, with the number of matching orders for each.' items: type: object properties: tld: type: string example: de count: type: integer example: 12 tags: - 'Catcher Management' /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 Catcher)." 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`.' enum: - wait - taken - free - failed - success - rgp - authinfo - authinfo_check - restored 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: 'Expected drop date (YYYY-MM-DD), if known.' 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: - 'Catcher 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: 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 domain' operationId: registerOrTransferADomain description: "Register a new domain or transfer an existing domain to your account. Domains will be created using your default redirector and handle configuration.\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 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. Options: `A`, `AAAA`, `CNAME`, `MX`, `TXT`.' example: A enum: - A - AAAA - CNAME - MX - 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).' 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 redirect 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. 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' 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. Options: `A`, `AAAA`, `CNAME`, `MX`, `TXT`.' example: A enum: - A - AAAA - CNAME - MX - 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).' 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 redirect 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. 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' 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 for all top-level domains (TLDs) available for registration. All prices are net (excluding VAT) in EUR and rounded to up to 3 decimal places.\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\nA price may 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: 'Filter the result by a single TLD. The leading dot is optional.' example: de required: false schema: type: string description: 'Filter the result by a single TLD. The leading dot is optional.' example: de responses: 200: description: Success content: application/json: schema: type: object example: data: - tld: de price: reg: 5 transfer: 5 renew: 5 restore: 80 interval: reg: yearly transfer: yearly renew: yearly restore: yearly original_price: reg: 5 transfer: 5 renew: 5 restore: 80 custom: reg: false transfer: false renew: false restore: false properties: data: type: array example: - tld: de price: reg: 5 transfer: 5 renew: 5 restore: 80 interval: reg: yearly transfer: yearly renew: yearly restore: yearly original_price: reg: 5 transfer: 5 renew: 5 restore: 80 custom: reg: false transfer: false renew: false restore: false description: 'One entry per supported 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 price: type: object properties: reg: type: integer example: 5 transfer: type: integer example: 5 renew: type: integer example: 5 restore: type: integer example: 80 interval: type: object properties: reg: type: string example: yearly transfer: type: string example: yearly renew: type: string example: yearly 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 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: 'Invalid domain' content: application/json: schema: 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' 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: 'Array of tag names to assign to the domain.' 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 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. 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; the amount an instant payment actually charges.' nullable: true 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 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. 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; the amount an instant payment actually charges.' nullable: true 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\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 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. 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; the amount an instant payment actually charges.' nullable: true 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 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. 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; the amount an instant payment actually charges.' nullable: true 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: '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/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: 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/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 /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 requestBody: required: false content: application/json: schema: type: object properties: from: type: string description: 'value muss ein gültiges Datum sein.' example: '2026-08-13T12:08:40' nullable: true to: type: string description: 'value muss ein gültiges Datum sein.' example: '2026-08-13T12:08:40' nullable: true '/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 /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