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: '' 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.' 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 nullable: false 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' properties: current_page: type: integer example: 1 per_page: type: integer example: 500 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' 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: - '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.' parameters: [] responses: 200: description: Success content: application/json: schema: type: object example: message: 'Domain added to catcher' name: example.de properties: message: type: string example: 'Domain added to catcher' name: type: string example: example.de 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: 'Invalid domain' type: object example: message: 'Domain name is invalid' properties: message: type: string example: 'Domain name is invalid' - 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' 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' 409: description: 'Already added' content: application/json: schema: type: object example: message: 'Domain already added to catcher' properties: message: type: string example: 'Domain already added to catcher' 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 nullable: false price: type: integer description: "The maximum price you're willing to pay (minimum 2)." example: 10 nullable: false required: - name delete: summary: 'Remove domain from catcher' operationId: removeDomainFromCatcher description: 'Remove a domain from your catcher order list.' 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' name: type: string example: example.de 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' 404: description: 'Domain not found' content: application/json: schema: type: object example: message: 'Domain not found' properties: message: type: string example: 'Domain not found' 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' 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 nullable: false required: - name /domains: get: summary: 'List all domains' operationId: listAllDomains description: 'Retrieve a paginated list of all domains in your account.' 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 nullable: false 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' created_at: '2023-01-15T10:30:00.000000Z' properties: current_page: type: integer example: 1 per_page: type: integer example: 500 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' created_at: '2023-01-15T10:30:00.000000Z' 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' created_at: type: string example: '2023-01-15T10:30:00.000000Z' 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.' parameters: [] responses: 200: description: '' content: application/json: schema: oneOf: - description: 'Domain registered' type: object example: message: 'Domain registered successfully' name: example.de properties: message: type: string example: 'Domain registered successfully' name: type: string example: example.de - description: 'Domain transferred' type: object example: message: 'Domain transferred successfully' name: example.de properties: message: type: string example: 'Domain transferred successfully' name: type: string example: example.de 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: 'Invalid domain' type: object example: message: 'Domain name is invalid' properties: message: type: string example: 'Domain name is invalid' - description: 'Invalid authcode' type: object example: message: 'Authcode invalid' properties: message: type: string example: 'Authcode invalid' - 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' 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' 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: 'Already in account' type: object example: message: 'Domain already in your account' properties: message: type: string example: 'Domain already in your account' tags: - 'Domain Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The domain name.' example: example.de nullable: false authinfo: type: string description: 'The authinfo code for domain transfers.' example: E-Hc$f3xx nullable: false handle_id: type: integer description: 'The handle ID to use. If not provided, uses your default handle.' example: 123 nullable: false period: type: integer description: 'Registration period in months. Defaults to 12.' example: 12 nullable: false redirector_settings: type: object description: 'Redirector configuration object (optional).' example: [] nullable: false properties: type: type: string description: 'Redirector type. Options: `redirect`, `landing`, `external`, `dns`.' example: landing nullable: false 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 nullable: false url: type: string description: 'Target URL (required for redirect type).' example: 'https://example.com' nullable: false ns: type: array description: 'Array of exactly two external nameservers (required for external type).' example: - ns1.example.com - ns2.example.com items: type: string dns: type: array description: 'Array of DNS entry objects (required for dns type).' example: - [] items: type: object properties: type: type: string description: 'DNS record type. Options: `A`, `AAAA`, `CNAME`, `MX`, `TXT`, `SPF`.' example: A nullable: false name: type: string description: 'Use `@` for apex domain or subdomain name.' example: '@' nullable: false value: type: string description: 'Record value (e.g., IP address or hostname).' example: 192.168.1.1 nullable: false prio: type: integer description: 'Priority (only for MX records).' example: 10 nullable: false ttl: type: integer description: 'Time To Live in seconds. Default: 3600.' example: 3600 nullable: false options: type: object description: 'DNSSEC configuration (optional, for external/dns types).' example: [] nullable: false properties: dnssec-active: type: string description: 'DNSSEC status. Options: `true`, `false`.' example: 'false' nullable: false dnssec-key: type: string description: 'DNSSEC key (required if dnssec-active is true).' example: AwEAAa... nullable: false dnssec-algorithm: type: string description: 'DNSSEC algorithm (required if dnssec-active is true).' example: '13' nullable: false dnssec-flags: type: string description: 'DNSSEC flags (required if dnssec-active is true).' example: '257' nullable: false required: - type required: - name patch: summary: 'Update a domain' operationId: updateADomain description: 'Update domain settings such as redirector configuration or handle assignment.' parameters: [] responses: 200: description: Success content: application/json: schema: type: object example: message: 'Domain updated' properties: message: type: string example: 'Domain updated' 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: 'Validation error' type: object example: message: 'Validation error details' properties: message: type: string example: 'Validation error details' 404: description: 'Domain not found' content: application/json: schema: type: object example: message: 'Domain not found' properties: message: type: string example: 'Domain not found' tags: - 'Domain Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The domain name.' example: example.de nullable: false redirector_settings: type: object description: 'Redirector configuration object.' example: [] nullable: false properties: type: type: string description: 'Redirector type. Options: `redirect`, `landing`, `external`, `dns`.' example: landing nullable: false 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 nullable: false url: type: string description: 'Target URL (required for redirect type).' example: 'https://example.com' nullable: false ns: type: array description: 'Array of exactly two external nameservers (required for external type).' example: - ns1.example.com - ns2.example.com items: type: string dns: type: array description: 'Array of DNS entry objects (required for dns type).' example: - [] items: type: object properties: type: type: string description: 'DNS record type. Options: `A`, `AAAA`, `CNAME`, `MX`, `TXT`, `SPF`.' example: A nullable: false name: type: string description: 'Use `@` for apex domain or subdomain name.' example: '@' nullable: false value: type: string description: 'Record value (e.g., IP address or hostname).' example: 192.168.1.1 nullable: false prio: type: integer description: 'Priority (only for MX records).' example: 10 nullable: false ttl: type: integer description: 'Time To Live in seconds. Default: 3600.' example: 3600 nullable: false options: type: object description: 'DNSSEC configuration (optional, for external/dns types).' example: [] nullable: false properties: dnssec-active: type: string description: 'DNSSEC status. Options: `true`, `false`.' example: 'false' nullable: false dnssec-key: type: string description: 'DNSSEC key (required if dnssec-active is true).' example: AwEAAa... nullable: false dnssec-algorithm: type: string description: 'DNSSEC algorithm (required if dnssec-active is true).' example: '13' nullable: false dnssec-flags: type: string description: 'DNSSEC flags (required if dnssec-active is true).' example: '257' nullable: false required: - type handle_id: type: integer description: 'The handle ID to assign to the domain.' example: 1234 nullable: false 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.' 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' name: type: string example: example.de - description: 'Domain in transit' type: object example: message: 'Domain put in transit' name: example.de properties: message: type: string example: 'Domain put in transit' name: type: string example: example.de 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' 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' 404: description: 'Domain not found' content: application/json: schema: type: object example: message: 'Domain not found' properties: message: type: string example: 'Domain not found' tags: - 'Domain Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The domain name.' example: example.de nullable: false transit: type: integer description: 'Set to 1 to put domain into transit state instead of deleting.' example: 0 nullable: false required: - name /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.' 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 items: type: string message: type: string example: 'Tags saved.' 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' 404: description: 'Domain not found' content: application/json: schema: type: object example: message: 'Domain not found' properties: message: type: string example: 'Domain not found' tags: - 'Domain Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The domain name.' example: example.de nullable: false 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 if a domain is available for registration or already taken.' 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 nullable: false responses: 200: description: '' content: application/json: schema: oneOf: - description: 'Domain taken' type: object example: name: example.de message: taken properties: name: type: string example: example.de message: type: string example: taken - description: 'Domain available' type: object example: name: example.de message: free properties: name: type: string example: example.de message: type: string example: free 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: 'Invalid domain' type: object example: message: 'Domain name is invalid' properties: message: type: string example: 'Domain name is invalid' 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.' parameters: - in: query name: name description: 'The domain name.' example: example.de required: true schema: type: string description: 'The domain name.' example: example.de nullable: false 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' name: type: string example: example.de authinfo: type: string example: EDxHc$f3xx expires_at: type: string example: '07.04.2024 21:34:35' 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' 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' 404: description: 'Domain not found' content: application/json: schema: type: object example: message: 'Domain not found' properties: message: type: string example: 'Domain not found' tags: - 'Domain Management' /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.' 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' name: type: string example: example.de 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: '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: 'Invalid domain' type: object example: message: 'Domain name is invalid' properties: message: type: string example: 'Domain name is invalid' 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' 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' tags: - 'Domain Management' requestBody: required: true content: application/json: schema: type: object properties: name: type: string description: 'The domain name.' example: example.de nullable: false price: type: number description: 'The listing price in EUR (must be greater than 0).' example: 1500.0 nullable: false 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.' 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 nullable: false - 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 nullable: false - 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 nullable: false - 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 nullable: false - 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 nullable: false - in: query name: template description: 'Filter by template name.' example: slim required: false schema: type: string description: 'Filter by template name.' example: slim nullable: false - in: query name: min_price description: 'Minimum price filter.' example: 99 required: false schema: type: integer description: 'Minimum price filter.' example: 99 nullable: false - in: query name: max_price description: 'Maximum price filter.' example: 5000 required: false schema: type: integer description: 'Maximum price filter.' example: 5000 nullable: false - in: query name: min_visitors description: 'Minimum visitors in last 30 days.' example: 10 required: false schema: type: integer description: 'Minimum visitors in last 30 days.' example: 10 nullable: false - in: query name: order_by description: 'Field to order by. Options: `created_at`, `name`, `price`, `visitors`, `status`. Default: `created_at`.' example: visitors required: false schema: type: string description: 'Field to order by. Options: `created_at`, `name`, `price`, `visitors`, `status`. Default: `created_at`.' example: visitors nullable: false - in: query name: order_direction description: 'Order direction. Options: `asc`, `desc`. Default: `desc`.' example: desc required: false schema: type: string description: 'Order direction. Options: `asc`, `desc`. Default: `desc`.' example: desc nullable: false 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 properties: current_page: type: integer example: 1 per_page: type: integer example: 50 total: type: integer example: 125 last_page: type: integer example: 3 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 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 401: description: Unauthenticated content: application/json: schema: type: object example: message: Unauthenticated. properties: message: type: string example: Unauthenticated. tags: - 'Domain Offers' /handles: get: summary: 'List all handles' operationId: listAllHandles description: 'Retrieve a paginated list of all contact handles in your account.' 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 nullable: false 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' street_name: 'Unter den Linden' street_number: '12' postalcode: '12345' city: Berlin country_id: DE email: john@example.com phone: '+49.16094751251' created_at: '2023-01-15T10:30:00.000000Z' properties: current_page: type: integer example: 1 per_page: type: integer example: 500 data: type: array example: - id: 123 alias: JohnPrivate type: PERSON handle_name: 'John Doe' street_name: 'Unter den Linden' street_number: '12' postalcode: '12345' city: Berlin country_id: DE email: john@example.com phone: '+49.16094751251' created_at: '2023-01-15T10:30:00.000000Z' 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' street_name: type: string example: 'Unter den Linden' street_number: type: string example: '12' postalcode: type: string example: '12345' city: type: string example: Berlin country_id: 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.' parameters: [] responses: 200: description: Success content: application/json: schema: type: object example: id: 123 alias: JohnPrivate type: PERSON handle_name: 'John Doe' street_name: 'Unter den Linden' street_number: '12' postalcode: '12345' city: Berlin country_id: DE email: john@example.com phone: '+49.16094751251' created_at: '2023-01-15T10:30:00.000000Z' properties: id: type: integer example: 123 alias: type: string example: JohnPrivate type: type: string example: PERSON handle_name: type: string example: 'John Doe' street_name: type: string example: 'Unter den Linden' street_number: type: string example: '12' postalcode: type: string example: '12345' city: type: string example: Berlin country_id: 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' 400: description: 'Validation error' content: application/json: schema: type: object example: message: 'Deine Eingaben sind ungültig oder unvollständig.' error: field: - 'error message' properties: message: type: string example: 'Deine Eingaben sind ungültig oder unvollständig.' 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: 'Unbekannter Fehler' properties: message: type: string example: 'Unbekannter Fehler' tags: - 'Handle Management' requestBody: required: true content: application/json: schema: type: object properties: alias: type: string description: 'Internal alias for the handle.' example: JohnPrivate nullable: false type: type: string description: 'Handle type (PERSON or ORG).' example: PERSON nullable: false handle_name: type: string description: 'Full name or company name.' example: 'John Doe' nullable: false street_name: type: string description: 'Street name without house number.' example: 'Unter den Linden' nullable: false street_number: type: string description: 'House number.' example: '12' nullable: false postalcode: type: string description: 'Postal code.' example: '12345' nullable: false city: type: string description: 'City name.' example: Berlin nullable: false country_iso: type: string description: 'Country code (ISO 3166-2).' example: DE nullable: false email: type: string description: 'Email address.' example: john@example.com nullable: false phone: type: string description: 'Phone number in E.164 format.' example: '+49.16094751251' nullable: false general_request: type: string description: 'General request email (optional).' example: general@example.com nullable: false abuse_contact: type: string description: 'Abuse contact email (optional).' example: abuse@example.com nullable: false address_suggest: type: string description: 'Set to "keep" to skip address validation.' example: keep nullable: false required: - alias - 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.' parameters: [] responses: 200: description: Success content: application/json: schema: type: object example: id: 123 alias: JohnPrivate type: PERSON handle_name: 'John Doe' street_name: 'Unter den Linden' street_number: '12' postalcode: '12345' city: Berlin country_id: DE email: john@example.com phone: '+49.16094751251' created_at: '2023-01-15T10:30:00.000000Z' properties: id: type: integer example: 123 alias: type: string example: JohnPrivate type: type: string example: PERSON handle_name: type: string example: 'John Doe' street_name: type: string example: 'Unter den Linden' street_number: type: string example: '12' postalcode: type: string example: '12345' city: type: string example: Berlin country_id: 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' 400: description: 'Validation error' content: application/json: schema: type: object example: message: 'Deine Eingaben sind ungültig oder unvollständig.' error: field: - 'error message' properties: message: type: string example: 'Deine Eingaben sind ungültig oder unvollständig.' 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.' example: JohnPrivate nullable: false street_name: type: string description: 'Street name without house number.' example: 'Unter den Linden' nullable: false street_number: type: string description: 'House number.' example: '12' nullable: false postalcode: type: string description: 'Postal code.' example: '12345' nullable: false city: type: string description: 'City name.' example: Berlin nullable: false country_iso: type: string description: 'Country code (ISO 3166-2).' example: DE nullable: false email: type: string description: 'Email address.' example: john@example.com nullable: false phone: type: string description: 'Phone number in E.164 format.' example: '+49.16094751251' nullable: false general_request: type: string description: 'General request email (optional).' example: general@example.com nullable: false abuse_contact: type: string description: 'Abuse contact email (optional).' example: abuse@example.com nullable: false address_suggest: type: string description: 'Set to "keep" to skip address validation.' example: keep nullable: false parameters: - in: path name: id description: 'The handle ID.' example: 123 required: true schema: type: integer