from __future__ import annotations
import base64
import json
import re
from typing import Any
import httpx
from a2a_pack.deepagents import create_a2a_deep_agent
from langchain_core.messages import BaseMessage
from langchain_core.tools import StructuredTool
from pydantic import BaseModel, Field
from a2a_pack import (
A2AAgent,
ConsumerSetup,
ConsumerSetupField,
ConsumerSetupMissing,
EgressPolicy,
LLMProvisioning,
Pricing,
Resources,
RunContext,
skill,
)
DEFAULT_BASE_URL = "https://api.ote-godaddy.com"
OPERATIONS = json.loads("{\n \"available\": {\n \"description\": \"Determine whether or not the specified domain is available for purchase\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"available\",\n \"parameters\": [\n {\n \"description\": \"Domain name whose availability is to be checked\",\n \"in\": \"query\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Optimize for time ('FAST') or accuracy ('FULL')\",\n \"in\": \"query\",\n \"name\": \"checkType\",\n \"required\": false,\n \"schema\": {\n \"default\": \"FAST\",\n \"enum\": [\n \"FAST\",\n \"FULL\",\n \"fast\",\n \"full\"\n ],\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Whether or not to include domains available for transfer. If set to True, checkType is ignored\",\n \"in\": \"query\",\n \"name\": \"forTransfer\",\n \"required\": false,\n \"schema\": {\n \"default\": false,\n \"type\": \"boolean\"\n }\n }\n ],\n \"path\": \"/v1/domains/available\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"available\",\n \"summary\": \"Determine whether or not the specified domain is available for purchase\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"available_bulk\": {\n \"description\": \"Determine whether or not the specified domains are available for purchase\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"available_bulk\",\n \"parameters\": [\n {\n \"description\": \"Optimize for time ('FAST') or accuracy ('FULL')\",\n \"in\": \"query\",\n \"name\": \"checkType\",\n \"required\": false,\n \"schema\": {\n \"default\": \"FAST\",\n \"enum\": [\n \"FAST\",\n \"FULL\",\n \"fast\",\n \"full\"\n ],\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/available\",\n \"request_body\": {\n \"items\": {\n \"type\": \"string\"\n },\n \"maximum\": 500,\n \"type\": \"array\"\n },\n \"security\": null,\n \"skill_name\": \"available_bulk\",\n \"summary\": \"Determine whether or not the specified domains are available for purchase\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"cancel\": {\n \"description\": \"Cancel a purchased domain\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"cancel\",\n \"parameters\": [\n {\n \"description\": \"Domain to cancel\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"cancel\",\n \"summary\": \"Cancel a purchased domain\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"cancel_privacy\": {\n \"description\": \"Submit a privacy cancellation request for the given domain\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"cancel_privacy\",\n \"parameters\": [\n {\n \"description\": \"Shopper ID of the owner of the domain\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose privacy is to be cancelled\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}/privacy\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"cancel_privacy\",\n \"summary\": \"Submit a privacy cancellation request for the given domain\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"contacts_validate\": {\n \"description\": \"All contacts specified in request will be validated against all domains specifed in \\\"domains\\\". As an alternative, you can also pass in tlds, with the exception of `uk`, which requires full domain names\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"contacts_validate\",\n \"parameters\": [\n {\n \"description\": \"PrivateLabelId to operate as, if different from JWT\",\n \"in\": \"header\",\n \"name\": \"X-Private-Label-Id\",\n \"required\": false,\n \"schema\": {\n \"default\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"MarketId in which the request is being made, and for which responses should be localized\",\n \"in\": \"query\",\n \"name\": \"marketId\",\n \"required\": false,\n \"schema\": {\n \"default\": \"en-US\",\n \"format\": \"bcp-47\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/contacts/validate\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainsContactsBulk\"\n },\n \"security\": null,\n \"skill_name\": \"contacts_validate\",\n \"summary\": \"Validate the request body using the Domain Contact Validation Schema for specified domains.\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"delete_v2_customers_customer_id_domains_domain_actions_type\": {\n \"description\": \"Cancel the most recent user action for the specified domain\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"delete_v2_customers_customer_id_domains_domain_actions_type\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose action is to be cancelled\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The type of action to cancel\",\n \"in\": \"path\",\n \"name\": \"type\",\n \"required\": true,\n \"schema\": {\n \"enum\": [\n \"AUTH_CODE_PURCHASE\",\n \"AUTH_CODE_REGENERATE\",\n \"BACKORDER_PURCHASE\",\n \"BACKORDER_DELETE\",\n \"BACKORDER_UPDATE\",\n \"CHANGE_OF_REGISTRANT_DELETE\",\n \"DNSSEC_CREATE\",\n \"DNSSEC_DELETE\",\n \"DOMAIN_DELETE\",\n \"DOMAIN_UPDATE\",\n \"DOMAIN_UPDATE_CONTACTS\",\n \"DOMAIN_UPDATE_NAME_SERVERS\",\n \"MIGRATE\",\n \"PRIVACY_FORWARDING_UPDATE\",\n \"PRIVACY_PURCHASE\",\n \"PRIVACY_DELETE\",\n \"REDEEM\",\n \"REGISTER\",\n \"RENEW\",\n \"RENEW_UNDO\",\n \"TRADE\",\n \"TRADE_CANCEL\",\n \"TRADE_PURCHASE\",\n \"TRADE_PURCHASE_AUTH_TEXT_MESSAGE\",\n \"TRADE_RESEND_AUTH_EMAIL\",\n \"TRANSFER\",\n \"TRANSFER_IN_ACCEPT\",\n \"TRANSFER_IN_CANCEL\",\n \"TRANSFER_IN_RESTART\",\n \"TRANSFER_IN_RETRY\",\n \"TRANSFER_OUT_ACCEPT\",\n \"TRANSFER_OUT_REJECT\",\n \"TRANSFER_OUT_REQUESTED\",\n \"TRANSIT\"\n ],\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/actions/{type}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"delete_v2_customers_customer_id_domains_domain_actions_type\",\n \"summary\": \"Cancel the most recent user action for the specified domain\",\n \"tags\": [\n \"Actions\"\n ]\n },\n \"delete_v2_customers_customer_id_domains_domain_change_of_registrant\": {\n \"description\": \"Cancels a pending change of registrant request for a given domain\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"delete_v2_customers_customer_id_domains_domain_change_of_registrant\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose change of registrant is to be cancelled\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/changeOfRegistrant\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"delete_v2_customers_customer_id_domains_domain_change_of_registrant\",\n \"summary\": \"Cancels a pending change of registrant request for a given domain\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"delete_v2_customers_customer_id_domains_domain_dnssec_records\": {\n \"description\": \"Remove the specifed DNSSEC record from the domain\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"delete_v2_customers_customer_id_domains_domain_dnssec_records\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to delete the DNSSEC record for\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/dnssecRecords\",\n \"request_body\": {\n \"items\": {\n \"$ref\": \"#/definitions/DomainDnssec\"\n },\n \"type\": \"array\"\n },\n \"security\": null,\n \"skill_name\": \"delete_v2_customers_customer_id_domains_domain_dnssec_records\",\n \"summary\": \"Remove the specifed DNSSEC record from the domain\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"domains_forwards_delete\": {\n \"description\": \"Notes:
- **shopperId** is **not the same** as **customerId**. **shopperId** is a number of max length 10 digits (*ex:* 1234567890) whereas **customerId** is a UUIDv4 (*ex:* 295e3bc3-b3b9-4d95-aae5-ede41a994d13)
\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"domains_forwards_delete\",\n \"parameters\": [\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The fully qualified domain name whose forwarding details are to be deleted.\",\n \"in\": \"path\",\n \"name\": \"fqdn\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/forwards/{fqdn}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"domains_forwards_delete\",\n \"summary\": \"Submit a forwarding cancellation request for the given fqdn\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"domains_forwards_get\": {\n \"description\": \"Notes:- **shopperId** is **not the same** as **customerId**. **shopperId** is a number of max length 10 digits (*ex:* 1234567890) whereas **customerId** is a UUIDv4 (*ex:* 295e3bc3-b3b9-4d95-aae5-ede41a994d13)
\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"domains_forwards_get\",\n \"parameters\": [\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The fully qualified domain name whose forwarding details are to be retrieved.\",\n \"in\": \"path\",\n \"name\": \"fqdn\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Optionally include all sub domains if the fqdn specified is a domain and not a sub domain.\",\n \"in\": \"query\",\n \"name\": \"includeSubs\",\n \"required\": false,\n \"schema\": {\n \"type\": \"boolean\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/forwards/{fqdn}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"domains_forwards_get\",\n \"summary\": \"Retrieve the forwarding information for the given fqdn\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"domains_forwards_post\": {\n \"description\": \"Notes:- **shopperId** is **not the same** as **customerId**. **shopperId** is a number of max length 10 digits (*ex:* 1234567890) whereas **customerId** is a UUIDv4 (*ex:* 295e3bc3-b3b9-4d95-aae5-ede41a994d13)
\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"domains_forwards_post\",\n \"parameters\": [\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your own customer id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The fully qualified domain name whose forwarding details are to be modified.\",\n \"in\": \"path\",\n \"name\": \"fqdn\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/forwards/{fqdn}\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainForwardingCreate\"\n },\n \"security\": null,\n \"skill_name\": \"domains_forwards_post\",\n \"summary\": \"Create a new forwarding configuration for the given FQDN\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"domains_forwards_put\": {\n \"description\": \"Notes:- **shopperId** is **not the same** as **customerId**. **shopperId** is a number of max length 10 digits (*ex:* 1234567890) whereas **customerId** is a UUIDv4 (*ex:* 295e3bc3-b3b9-4d95-aae5-ede41a994d13)
\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"domains_forwards_put\",\n \"parameters\": [\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The fully qualified domain name whose forwarding details are to be modified.\",\n \"in\": \"path\",\n \"name\": \"fqdn\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/forwards/{fqdn}\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainForwardingCreate\"\n },\n \"security\": null,\n \"skill_name\": \"domains_forwards_put\",\n \"summary\": \"Modify the forwarding information for the given fqdn\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"get\": {\n \"description\": \"Retrieve details for the specified Domain\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get\",\n \"parameters\": [\n {\n \"description\": \"Shopper ID expected to own the specified domain\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain name whose details are to be retrieved\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get\",\n \"summary\": \"Retrieve details for the specified Domain\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"get_agreement\": {\n \"description\": \"Retrieve the legal agreement(s) required to purchase the specified TLD and add-ons\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_agreement\",\n \"parameters\": [\n {\n \"description\": \"Unique identifier of the Market used to retrieve/translate Legal Agreements\",\n \"in\": \"header\",\n \"name\": \"X-Market-Id\",\n \"required\": false,\n \"schema\": {\n \"default\": \"en-US\",\n \"format\": \"bcp-47\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"list of TLDs whose legal agreements are to be retrieved\",\n \"in\": \"query\",\n \"name\": \"tlds\",\n \"required\": true,\n \"schema\": {\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n {\n \"description\": \"Whether or not privacy has been requested\",\n \"in\": \"query\",\n \"name\": \"privacy\",\n \"required\": true,\n \"schema\": {\n \"type\": \"boolean\"\n }\n },\n {\n \"description\": \"Whether or not domain tranfer has been requested\",\n \"in\": \"query\",\n \"name\": \"forTransfer\",\n \"required\": false,\n \"schema\": {\n \"type\": \"boolean\"\n }\n }\n ],\n \"path\": \"/v1/domains/agreements\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_agreement\",\n \"summary\": \"Retrieve the legal agreement(s) required to purchase the specified TLD and add-ons\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"get_v2_customers_customer_id_domains_domain\": {\n \"description\": \"Retrieve details for the specified Domain\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_v2_customers_customer_id_domains_domain\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain name whose details are to be retrieved\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Optional details to be included in the response\",\n \"in\": \"query\",\n \"name\": \"includes\",\n \"required\": false,\n \"schema\": {\n \"items\": {\n \"enum\": [\n \"actions\",\n \"contacts\",\n \"dnssecRecords\",\n \"registryStatusCodes\"\n ],\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_v2_customers_customer_id_domains_domain\",\n \"summary\": \"Retrieve details for the specified Domain\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"get_v2_customers_customer_id_domains_domain_actions\": {\n \"description\": \"Retrieves a list of the most recent actions for the specified domain\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_v2_customers_customer_id_domains_domain_actions\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose actions are to be retrieved\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/actions\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_v2_customers_customer_id_domains_domain_actions\",\n \"summary\": \"Retrieves a list of the most recent actions for the specified domain\",\n \"tags\": [\n \"Actions\"\n ]\n },\n \"get_v2_customers_customer_id_domains_domain_actions_type\": {\n \"description\": \"Retrieves the most recent action for the specified domain\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_v2_customers_customer_id_domains_domain_actions_type\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose action is to be retrieved\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The type of action to retrieve\",\n \"in\": \"path\",\n \"name\": \"type\",\n \"required\": true,\n \"schema\": {\n \"enum\": [\n \"AUTH_CODE_PURCHASE\",\n \"AUTH_CODE_REGENERATE\",\n \"AUTO_RENEWAL\",\n \"BACKORDER_PURCHASE\",\n \"BACKORDER_DELETE\",\n \"BACKORDER_UPDATE\",\n \"CHANGE_OF_REGISTRANT_DELETE\",\n \"DNS_VERIFICATION\",\n \"DNSSEC_CREATE\",\n \"DNSSEC_DELETE\",\n \"DOMAIN_DELETE\",\n \"DOMAIN_UPDATE\",\n \"DOMAIN_UPDATE_CONTACTS\",\n \"DOMAIN_UPDATE_NAME_SERVERS\",\n \"EXPIRY\",\n \"ICANN_VERIFICATION\",\n \"MIGRATE\",\n \"MIGRATE_IN\",\n \"PREMIUM\",\n \"PRIVACY_FORWARDING_UPDATE\",\n \"PRIVACY_PURCHASE\",\n \"PRIVACY_DELETE\",\n \"REDEEM\",\n \"REGISTER\",\n \"RENEW\",\n \"RENEW_UNDO\",\n \"TRADE\",\n \"TRADE_CANCEL\",\n \"TRADE_PURCHASE\",\n \"TRADE_PURCHASE_AUTH_TEXT_MESSAGE\",\n \"TRADE_RESEND_AUTH_EMAIL\",\n \"TRANSFER\",\n \"TRANSFER_IN\",\n \"TRANSFER_IN_ACCEPT\",\n \"TRANSFER_IN_CANCEL\",\n \"TRANSFER_IN_RESTART\",\n \"TRANSFER_IN_RETRY\",\n \"TRANSFER_OUT\",\n \"TRANSFER_OUT_ACCEPT\",\n \"TRANSFER_OUT_REJECT\",\n \"TRANSFER_OUT_REQUESTED\",\n \"TRANSIT\"\n ],\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/actions/{type}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_v2_customers_customer_id_domains_domain_actions_type\",\n \"summary\": \"Retrieves the most recent action for the specified domain\",\n \"tags\": [\n \"Actions\"\n ]\n },\n \"get_v2_customers_customer_id_domains_domain_change_of_registrant\": {\n \"description\": \"Retrieve change of registrant information\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_v2_customers_customer_id_domains_domain_change_of_registrant\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose change of registrant information is to be retrieved\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/changeOfRegistrant\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_v2_customers_customer_id_domains_domain_change_of_registrant\",\n \"summary\": \"Retrieve change of registrant information\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"get_v2_customers_customer_id_domains_domain_privacy_forwarding\": {\n \"description\": \"Retrieve privacy email forwarding settings showing where emails are delivered\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_v2_customers_customer_id_domains_domain_privacy_forwarding\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain name whose details are to be retrieved\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/privacy/forwarding\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_v2_customers_customer_id_domains_domain_privacy_forwarding\",\n \"summary\": \"Retrieve privacy email forwarding settings showing where emails are delivered\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"get_v2_customers_customer_id_domains_domain_transfer\": {\n \"description\": \"Query the current transfer status\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_v2_customers_customer_id_domains_domain_transfer\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain Name\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/transfer\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_v2_customers_customer_id_domains_domain_transfer\",\n \"summary\": \"Query the current transfer status\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"get_v2_customers_customer_id_domains_notifications\": {\n \"description\": \"Retrieve the next domain notification\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_v2_customers_customer_id_domains_notifications\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/notifications\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_v2_customers_customer_id_domains_notifications\",\n \"summary\": \"Retrieve the next domain notification\",\n \"tags\": [\n \"Notifications\"\n ]\n },\n \"get_v2_customers_customer_id_domains_notifications_opt_in\": {\n \"description\": \"Retrieve a list of notification types that are opted in\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_v2_customers_customer_id_domains_notifications_opt_in\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/notifications/optIn\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_v2_customers_customer_id_domains_notifications_opt_in\",\n \"summary\": \"Retrieve a list of notification types that are opted in\",\n \"tags\": [\n \"Notifications\"\n ]\n },\n \"get_v2_customers_customer_id_domains_notifications_schemas_type\": {\n \"description\": \"Retrieve the schema for the notification data for the specified notification type\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_v2_customers_customer_id_domains_notifications_schemas_type\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The notification type whose schema should be retrieved\",\n \"in\": \"path\",\n \"name\": \"type\",\n \"required\": true,\n \"schema\": {\n \"enum\": [\n \"AUTO_RENEWAL\",\n \"BACKORDER\",\n \"BACKORDER_PURCHASE\",\n \"EXPIRY\",\n \"PREMIUM\",\n \"PRIVACY_PURCHASE\",\n \"REDEEM\",\n \"REGISTER\",\n \"RENEW\",\n \"TRADE\",\n \"TRANSFER\"\n ],\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/notifications/schemas/{type}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_v2_customers_customer_id_domains_notifications_schemas_type\",\n \"summary\": \"Retrieve the schema for the notification data for the specified notification type\",\n \"tags\": [\n \"Notifications\"\n ]\n },\n \"get_v2_customers_customer_id_domains_register_schema_tld\": {\n \"description\": \"Retrieve the schema to be submitted when registering a Domain for the specified TLD\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_v2_customers_customer_id_domains_register_schema_tld\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Top-Level Domain whose schema should be retrieved\",\n \"in\": \"path\",\n \"name\": \"tld\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/register/schema/{tld}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_v2_customers_customer_id_domains_register_schema_tld\",\n \"summary\": \"Retrieve the schema to be submitted when registering a Domain for the specified TLD\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"get_v2_domains_maintenances\": {\n \"description\": \"Retrieve a list of upcoming system Maintenances\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_v2_domains_maintenances\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Only include results with the selected `status` value. Returns all results if omitted
- ACTIVE - The upcoming maintenance is active.
- CANCELLED - The upcoming maintenance has been cancelled.
\",\n \"in\": \"query\",\n \"name\": \"status\",\n \"required\": false,\n \"schema\": {\n \"enum\": [\n \"ACTIVE\",\n \"CANCELLED\"\n ],\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Only include results with `modifiedAt` after the supplied date\",\n \"in\": \"query\",\n \"name\": \"modifiedAtAfter\",\n \"required\": false,\n \"schema\": {\n \"format\": \"iso-datetime\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Only include results with `startsAt` after the supplied date\",\n \"in\": \"query\",\n \"name\": \"startsAtAfter\",\n \"required\": false,\n \"schema\": {\n \"format\": \"iso-datetime\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Maximum number of results to return\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"default\": 100,\n \"maximum\": 100,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n }\n ],\n \"path\": \"/v2/domains/maintenances\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_v2_domains_maintenances\",\n \"summary\": \"Retrieve a list of upcoming system Maintenances\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"get_v2_domains_maintenances_maintenance_id\": {\n \"description\": \"Retrieve the details for an upcoming system Maintenances\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_v2_domains_maintenances_maintenance_id\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The identifier for the system maintenance\",\n \"in\": \"path\",\n \"name\": \"maintenanceId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/domains/maintenances/{maintenanceId}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_v2_domains_maintenances_maintenance_id\",\n \"summary\": \"Retrieve the details for an upcoming system Maintenances\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"get_v2_domains_usage_yyyymm\": {\n \"description\": \"Retrieve api usage request counts for a specific year/month. The data is retained for a period of three months.\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"get_v2_domains_usage_yyyymm\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The year/month timeframe for the request counts (in the format yyyy-mm)\",\n \"in\": \"path\",\n \"name\": \"yyyymm\",\n \"required\": true,\n \"schema\": {\n \"pattern\": \"^\\\\d{4}-\\\\d{2}$\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Determines if the detail records (grouped by request path) are included in the response\",\n \"in\": \"query\",\n \"name\": \"includes\",\n \"required\": false,\n \"schema\": {\n \"items\": {\n \"enum\": [\n \"details\"\n ],\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n }\n ],\n \"path\": \"/v2/domains/usage/{yyyymm}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"get_v2_domains_usage_yyyymm\",\n \"summary\": \"Retrieve api usage request counts for a specific year/month. The data is retained for a period of three months.\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"list\": {\n \"description\": \"Retrieve a list of Domains for the specified Shopper\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"list\",\n \"parameters\": [\n {\n \"description\": \"Shopper ID whose domains are to be retrieved\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Only include results with `status` value in the specified set\",\n \"in\": \"query\",\n \"name\": \"statuses\",\n \"required\": false,\n \"schema\": {\n \"items\": {\n \"enum\": [\n \"ACTIVE\",\n \"AWAITING_CLAIM_ACK\",\n \"AWAITING_DOCUMENT_AFTER_TRANSFER\",\n \"AWAITING_DOCUMENT_AFTER_UPDATE_ACCOUNT\",\n \"AWAITING_DOCUMENT_UPLOAD\",\n \"AWAITING_FAILED_TRANSFER_WHOIS_PRIVACY\",\n \"AWAITING_PAYMENT\",\n \"AWAITING_RENEWAL_TRANSFER_IN_COMPLETE\",\n \"AWAITING_TRANSFER_IN_ACK\",\n \"AWAITING_TRANSFER_IN_AUTH\",\n \"AWAITING_TRANSFER_IN_AUTO\",\n \"AWAITING_TRANSFER_IN_WHOIS\",\n \"AWAITING_TRANSFER_IN_WHOIS_FIX\",\n \"AWAITING_VERIFICATION_ICANN\",\n \"AWAITING_VERIFICATION_ICANN_MANUAL\",\n \"CANCELLED\",\n \"CANCELLED_HELD\",\n \"CANCELLED_REDEEMABLE\",\n \"CANCELLED_TRANSFER\",\n \"CONFISCATED\",\n \"DISABLED_SPECIAL\",\n \"EXCLUDED_INVALID_CLAIM_FIREHOSE\",\n \"EXPIRED_REASSIGNED\",\n \"FAILED_BACKORDER_CAPTURE\",\n \"FAILED_DROP_IMMEDIATE_THEN_ADD\",\n \"FAILED_PRE_REGISTRATION\",\n \"FAILED_REDEMPTION\",\n \"FAILED_REDEMPTION_REPORT\",\n \"FAILED_REGISTRATION\",\n \"FAILED_REGISTRATION_FIREHOSE\",\n \"FAILED_RESTORATION_REDEMPTION_MOCK\",\n \"FAILED_SETUP\",\n \"FAILED_TRANSFER_IN\",\n \"FAILED_TRANSFER_IN_BAD_STATUS\",\n \"FAILED_TRANSFER_IN_REGISTRY\",\n \"HELD_COURT_ORDERED\",\n \"HELD_DISPUTED\",\n \"HELD_EXPIRATION_PROTECTION\",\n \"HELD_EXPIRED_REDEMPTION_MOCK\",\n \"HELD_REGISTRAR_ADD\",\n \"HELD_REGISTRAR_REMOVE\",\n \"HELD_SHOPPER\",\n \"HELD_TEMPORARY\",\n \"LOCKED_ABUSE\",\n \"LOCKED_COPYRIGHT\",\n \"LOCKED_REGISTRY\",\n \"LOCKED_SUPER\",\n \"PARKED_AND_HELD\",\n \"PARKED_EXPIRED\",\n \"PARKED_VERIFICATION_ICANN\",\n \"PENDING_ABORT_CANCEL_SETUP\",\n \"PENDING_AGREEMENT_PRE_REGISTRATION\",\n \"PENDING_APPLY_RENEWAL_CREDITS\",\n \"PENDING_BACKORDER_CAPTURE\",\n \"PENDING_BLOCKED_REGISTRY\",\n \"PENDING_CANCEL_REGISTRANT_PROFILE\",\n \"PENDING_COMPLETE_REDEMPTION_WITHOUT_RECEIPT\",\n \"PENDING_COMPLETE_REGISTRANT_PROFILE\",\n \"PENDING_COO\",\n \"PENDING_COO_COMPLETE\",\n \"PENDING_DNS\",\n \"PENDING_DNS_ACTIVE\",\n \"PENDING_DNS_INACTIVE\",\n \"PENDING_DOCUMENT_VALIDATION\",\n \"PENDING_DOCUMENT_VERIFICATION\",\n \"PENDING_DROP_IMMEDIATE\",\n \"PENDING_DROP_IMMEDIATE_THEN_ADD\",\n \"PENDING_EPP_CREATE\",\n \"PENDING_EPP_DELETE\",\n \"PENDING_EPP_UPDATE\",\n \"PENDING_ESCALATION_REGISTRY\",\n \"PENDING_EXPIRATION\",\n \"PENDING_EXPIRATION_RESPONSE\",\n \"PENDING_EXPIRATION_SYNC\",\n \"PENDING_EXPIRED_REASSIGNMENT\",\n \"PENDING_EXPIRE_AUTO_ADD\",\n \"PENDING_EXTEND_REGISTRANT_PROFILE\",\n \"PENDING_FAILED_COO\",\n \"PENDING_FAILED_EPP_CREATE\",\n \"PENDING_FAILED_HELD\",\n \"PENDING_FAILED_PURCHASE_PREMIUM\",\n \"PENDING_FAILED_RECONCILE_FIREHOSE\",\n \"PENDING_FAILED_REDEMPTION_WITHOUT_RECEIPT\",\n \"PENDING_FAILED_RELEASE_PREMIUM\",\n \"PENDING_FAILED_RENEW_EXPIRATION_PROTECTION\",\n \"PENDING_FAILED_RESERVE_PREMIUM\",\n \"PENDING_FAILED_SUBMIT_FIREHOSE\",\n \"PENDING_FAILED_TRANSFER_ACK_PREMIUM\",\n \"PENDING_FAILED_TRANSFER_IN_ACK_PREMIUM\",\n \"PENDING_FAILED_TRANSFER_IN_PREMIUM\",\n \"PENDING_FAILED_TRANSFER_PREMIUM\",\n \"PENDING_FAILED_TRANSFER_SUBMIT_PREMIUM\",\n \"PENDING_FAILED_UNLOCK_PREMIUM\",\n \"PENDING_FAILED_UPDATE_API\",\n \"PENDING_FRAUD_VERIFICATION\",\n \"PENDING_FRAUD_VERIFIED\",\n \"PENDING_GET_CONTACTS\",\n \"PENDING_GET_HOSTS\",\n \"PENDING_GET_NAME_SERVERS\",\n \"PENDING_GET_STATUS\",\n \"PENDING_HOLD_ESCROW\",\n \"PENDING_HOLD_REDEMPTION\",\n \"PENDING_LOCK_CLIENT_REMOVE\",\n \"PENDING_LOCK_DATA_QUALITY\",\n \"PENDING_LOCK_THEN_HOLD_REDEMPTION\",\n \"PENDING_PARKING_DETERMINATION\",\n \"PENDING_PARK_INVALID_WHOIS\",\n \"PENDING_PARK_INVALID_WHOIS_REMOVAL\",\n \"PENDING_PURCHASE_PREMIUM\",\n \"PENDING_RECONCILE\",\n \"PENDING_RECONCILE_FIREHOSE\",\n \"PENDING_REDEMPTION\",\n \"PENDING_REDEMPTION_REPORT\",\n \"PENDING_REDEMPTION_REPORT_COMPLETE\",\n \"PENDING_REDEMPTION_REPORT_SUBMITTED\",\n \"PENDING_REDEMPTION_WITHOUT_RECEIPT\",\n \"PENDING_REDEMPTION_WITHOUT_RECEIPT_MOCK\",\n \"PENDING_RELEASE_PREMIUM\",\n \"PENDING_REMOVAL\",\n \"PENDING_REMOVAL_HELD\",\n \"PENDING_REMOVAL_PARKED\",\n \"PENDING_REMOVAL_UNPARK\",\n \"PENDING_RENEWAL\",\n \"PENDING_RENEW_EXPIRATION_PROTECTION\",\n \"PENDING_RENEW_INFINITE\",\n \"PENDING_RENEW_LOCKED\",\n \"PENDING_RENEW_WITHOUT_RECEIPT\",\n \"PENDING_REPORT_REDEMPTION_WITHOUT_RECEIPT\",\n \"PENDING_RESERVE_PREMIUM\",\n \"PENDING_RESET_VERIFICATION_ICANN\",\n \"PENDING_RESPONSE_FIREHOSE\",\n \"PENDING_RESTORATION\",\n \"PENDING_RESTORATION_INACTIVE\",\n \"PENDING_RESTORATION_REDEMPTION_MOCK\",\n \"PENDING_RETRY_EPP_CREATE\",\n \"PENDING_RETRY_HELD\",\n \"PENDING_SEND_AUTH_CODE\",\n \"PENDING_SETUP\",\n \"PENDING_SETUP_ABANDON\",\n \"PENDING_SETUP_AGREEMENT_LANDRUSH\",\n \"PENDING_SETUP_AGREEMENT_SUNRISE2_A\",\n \"PENDING_SETUP_AGREEMENT_SUNRISE2_B\",\n \"PENDING_SETUP_AGREEMENT_SUNRISE2_C\",\n \"PENDING_SETUP_AUTH\",\n \"PENDING_SETUP_DNS\",\n \"PENDING_SETUP_FAILED\",\n \"PENDING_SETUP_REVIEW\",\n \"PENDING_SETUP_SUNRISE\",\n \"PENDING_SETUP_SUNRISE_PRE\",\n \"PENDING_SETUP_SUNRISE_RESPONSE\",\n \"PENDING_SUBMIT_FAILURE\",\n \"PENDING_SUBMIT_FIREHOSE\",\n \"PENDING_SUBMIT_HOLD_FIREHOSE\",\n \"PENDING_SUBMIT_HOLD_LANDRUSH\",\n \"PENDING_SUBMIT_HOLD_SUNRISE\",\n \"PENDING_SUBMIT_LANDRUSH\",\n \"PENDING_SUBMIT_RESPONSE_FIREHOSE\",\n \"PENDING_SUBMIT_RESPONSE_LANDRUSH\",\n \"PENDING_SUBMIT_RESPONSE_SUNRISE\",\n \"PENDING_SUBMIT_SUCCESS_FIREHOSE\",\n \"PENDING_SUBMIT_SUCCESS_LANDRUSH\",\n \"PENDING_SUBMIT_SUCCESS_SUNRISE\",\n \"PENDING_SUBMIT_SUNRISE\",\n \"PENDING_SUBMIT_WAITING_LANDRUSH\",\n \"PENDING_SUCCESS_PRE_REGISTRATION\",\n \"PENDING_SUSPENDED_DATA_QUALITY\",\n \"PENDING_TRANSFER_ACK_PREMIUM\",\n \"PENDING_TRANSFER_IN\",\n \"PENDING_TRANSFER_IN_ACK\",\n \"PENDING_TRANSFER_IN_ACK_PREMIUM\",\n \"PENDING_TRANSFER_IN_BAD_REGISTRANT\",\n \"PENDING_TRANSFER_IN_CANCEL\",\n \"PENDING_TRANSFER_IN_CANCEL_REGISTRY\",\n \"PENDING_TRANSFER_IN_COMPLETE_ACK\",\n \"PENDING_TRANSFER_IN_DELETE\",\n \"PENDING_TRANSFER_IN_LOCK\",\n \"PENDING_TRANSFER_IN_NACK\",\n \"PENDING_TRANSFER_IN_NOTIFICATION\",\n \"PENDING_TRANSFER_IN_PREMIUM\",\n \"PENDING_TRANSFER_IN_RELEASE\",\n \"PENDING_TRANSFER_IN_RESPONSE\",\n \"PENDING_TRANSFER_IN_UNDERAGE\",\n \"PENDING_TRANSFER_OUT\",\n \"PENDING_TRANSFER_OUT_ACK\",\n \"PENDING_TRANSFER_OUT_NACK\",\n \"PENDING_TRANSFER_OUT_PREMIUM\",\n \"PENDING_TRANSFER_OUT_UNDERAGE\",\n \"PENDING_TRANSFER_OUT_VALIDATION\",\n \"PENDING_TRANSFER_PREMIUM\",\n \"PENDING_TRANSFER_PREMUIM\",\n \"PENDING_TRANSFER_SUBMIT_PREMIUM\",\n \"PENDING_UNLOCK_DATA_QUALITY\",\n \"PENDING_UNLOCK_PREMIUM\",\n \"PENDING_UPDATE\",\n \"PENDING_UPDATED_REGISTRANT_DATA_QUALITY\",\n \"PENDING_UPDATE_ACCOUNT\",\n \"PENDING_UPDATE_API\",\n \"PENDING_UPDATE_API_RESPONSE\",\n \"PENDING_UPDATE_AUTH\",\n \"PENDING_UPDATE_CONTACTS\",\n \"PENDING_UPDATE_CONTACTS_PRIVACY\",\n \"PENDING_UPDATE_DNS\",\n \"PENDING_UPDATE_DNS_SECURITY\",\n \"PENDING_UPDATE_ELIGIBILITY\",\n \"PENDING_UPDATE_EPP_CONTACTS\",\n \"PENDING_UPDATE_MEMBERSHIP\",\n \"PENDING_UPDATE_OWNERSHIP\",\n \"PENDING_UPDATE_OWNERSHIP_AUTH_AUCTION\",\n \"PENDING_UPDATE_OWNERSHIP_HELD\",\n \"PENDING_UPDATE_REGISTRANT\",\n \"PENDING_UPDATE_REPO\",\n \"PENDING_VALIDATION_DATA_QUALITY\",\n \"PENDING_VERIFICATION_FRAUD\",\n \"PENDING_VERIFICATION_STATUS\",\n \"PENDING_VERIFY_REGISTRANT_DATA_QUALITY\",\n \"RESERVED\",\n \"RESERVED_PREMIUM\",\n \"REVERTED\",\n \"SUSPENDED_VERIFICATION_ICANN\",\n \"TRANSFERRED_OUT\",\n \"UNLOCKED_ABUSE\",\n \"UNLOCKED_SUPER\",\n \"UNPARKED_AND_UNHELD\",\n \"UPDATED_OWNERSHIP\",\n \"UPDATED_OWNERSHIP_HELD\"\n ],\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n {\n \"description\": \"Only include results with `status` value in any of the specified groups\",\n \"in\": \"query\",\n \"name\": \"statusGroups\",\n \"required\": false,\n \"schema\": {\n \"items\": {\n \"enum\": [\n \"INACTIVE\",\n \"PRE_REGISTRATION\",\n \"REDEMPTION\",\n \"RENEWABLE\",\n \"VERIFICATION_ICANN\",\n \"VISIBLE\"\n ],\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n {\n \"description\": \"Maximum number of domains to return\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"maximum\": 1000,\n \"minimum\": 1,\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Marker Domain to use as the offset in results\",\n \"in\": \"query\",\n \"name\": \"marker\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Optional details to be included in the response\",\n \"in\": \"query\",\n \"name\": \"includes\",\n \"required\": false,\n \"schema\": {\n \"items\": {\n \"enum\": [\n \"authCode\",\n \"contacts\",\n \"nameServers\"\n ],\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n {\n \"description\": \"Only include results that have been modified since the specified date\",\n \"in\": \"query\",\n \"name\": \"modifiedDate\",\n \"required\": false,\n \"schema\": {\n \"format\": \"iso-datetime\",\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"list\",\n \"summary\": \"Retrieve a list of Domains for the specified Shopper\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"patch_v2_customers_customer_id_domains_domain_contacts\": {\n \"description\": \"Update domain contacts\",\n \"destructive\": true,\n \"method\": \"PATCH\",\n \"operation_id\": \"patch_v2_customers_customer_id_domains_domain_contacts\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose Contacts are to be updated.\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/contacts\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainContactsUpdateV2\"\n },\n \"security\": null,\n \"skill_name\": \"patch_v2_customers_customer_id_domains_domain_contacts\",\n \"summary\": \"Update domain contacts\",\n \"tags\": [\n \"Contacts\"\n ]\n },\n \"patch_v2_customers_customer_id_domains_domain_dnssec_records\": {\n \"description\": \"Add the specifed DNSSEC records to the domain\",\n \"destructive\": true,\n \"method\": \"PATCH\",\n \"operation_id\": \"patch_v2_customers_customer_id_domains_domain_dnssec_records\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to add the DNSSEC record for\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/dnssecRecords\",\n \"request_body\": {\n \"items\": {\n \"$ref\": \"#/definitions/DomainDnssec\"\n },\n \"type\": \"array\"\n },\n \"security\": null,\n \"skill_name\": \"patch_v2_customers_customer_id_domains_domain_dnssec_records\",\n \"summary\": \"Add the specifed DNSSEC records to the domain\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"patch_v2_customers_customer_id_domains_domain_privacy_forwarding\": {\n \"description\": \"Update privacy email forwarding settings to determine how emails are delivered\",\n \"destructive\": true,\n \"method\": \"PATCH\",\n \"operation_id\": \"patch_v2_customers_customer_id_domains_domain_privacy_forwarding\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain name whose details are to be retrieved\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/privacy/forwarding\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainPrivacyForwardingUpdate\"\n },\n \"security\": null,\n \"skill_name\": \"patch_v2_customers_customer_id_domains_domain_privacy_forwarding\",\n \"summary\": \"Update privacy email forwarding settings to determine how emails are delivered\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_domain_redeem\": {\n \"description\": \"Purchase a restore for the given domain to bring it out of redemption\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_domain_redeem\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to request redeem for\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/redeem\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainRedeemV2\"\n },\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_domain_redeem\",\n \"summary\": \"Purchase a restore for the given domain to bring it out of redemption\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_domain_regenerate_auth_code\": {\n \"description\": \"Regenerate the auth code for the given domain\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_domain_regenerate_auth_code\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to update authcode for\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/regenerateAuthCode\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_domain_regenerate_auth_code\",\n \"summary\": \"Regenerate the auth code for the given domain\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_domain_renew\": {\n \"description\": \"Renew the specified Domain\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_domain_renew\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to be renewed\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/renew\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainRenewV2\"\n },\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_domain_renew\",\n \"summary\": \"Renew the specified Domain\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_domain_transfer\": {\n \"description\": \"Purchase and start or restart transfer process\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_domain_transfer\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to transfer in\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/transfer\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainTransferInV2\"\n },\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_domain_transfer\",\n \"summary\": \"Purchase and start or restart transfer process\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_domain_transfer_in_accept\": {\n \"description\": \"Accepts the transfer in\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_domain_transfer_in_accept\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to accept the transfer in for\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/transferInAccept\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainTransferAuthCode\"\n },\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_domain_transfer_in_accept\",\n \"summary\": \"Accepts the transfer in\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_domain_transfer_in_cancel\": {\n \"description\": \"Cancels the transfer in\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_domain_transfer_in_cancel\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to cancel the transfer in for\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/transferInCancel\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_domain_transfer_in_cancel\",\n \"summary\": \"Cancels the transfer in\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_domain_transfer_in_restart\": {\n \"description\": \"Restarts transfer in request from the beginning\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_domain_transfer_in_restart\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to restart the transfer in\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/transferInRestart\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_domain_transfer_in_restart\",\n \"summary\": \"Restarts transfer in request from the beginning\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_domain_transfer_in_retry\": {\n \"description\": \"Retries the current transfer in request with supplied Authorization code\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_domain_transfer_in_retry\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to retry the transfer in\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/transferInRetry\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainTransferAuthCode\"\n },\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_domain_transfer_in_retry\",\n \"summary\": \"Retries the current transfer in request with supplied Authorization code\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_domain_transfer_out\": {\n \"description\": \"Initiate transfer out to another registrar for a .uk domain.\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_domain_transfer_out\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to initiate the transfer out for\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Registrar tag to push transfer to\",\n \"in\": \"query\",\n \"name\": \"registrar\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/transferOut\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_domain_transfer_out\",\n \"summary\": \"Initiate transfer out to another registrar for a .uk domain.\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_domain_transfer_out_accept\": {\n \"description\": \"Accept transfer out\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_domain_transfer_out_accept\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to accept the transfer out for\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/transferOutAccept\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_domain_transfer_out_accept\",\n \"summary\": \"Accept transfer out\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_domain_transfer_out_reject\": {\n \"description\": \"Reject transfer out\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_domain_transfer_out_reject\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to reject the transfer out for\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Transfer out reject reason\",\n \"in\": \"query\",\n \"name\": \"reason\",\n \"required\": false,\n \"schema\": {\n \"enum\": [\n \"EVIDENCE_OF_FRAUD\",\n \"URDP_ACTION\",\n \"COURT_ORDER\",\n \"DISPUTE_OVER_IDENTITY\",\n \"NO_PAYMENT_FOR_PREVIOUS_REGISTRATION_PERIOD\",\n \"WRITTEN_OBJECTION\",\n \"TRANSFERRED_WITHIN_SIXTY_DAYS\"\n ],\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/transferOutReject\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_domain_transfer_out_reject\",\n \"summary\": \"Reject transfer out\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_domain_transfer_validate\": {\n \"description\": \"Validate the request body using the Domain Transfer Schema for the specified TLD\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_domain_transfer_validate\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to transfer in\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/transfer/validate\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainTransferInV2\"\n },\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_domain_transfer_validate\",\n \"summary\": \"Validate the request body using the Domain Transfer Schema for the specified TLD\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_notifications_notification_id_acknowledge\": {\n \"description\": \"Acknowledge a domain notification\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_notifications_notification_id_acknowledge\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The notification ID to acknowledge\",\n \"in\": \"path\",\n \"name\": \"notificationId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/notifications/{notificationId}/acknowledge\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_notifications_notification_id_acknowledge\",\n \"summary\": \"Acknowledge a domain notification\",\n \"tags\": [\n \"Notifications\"\n ]\n },\n \"post_v2_customers_customer_id_domains_register\": {\n \"description\": \"Purchase and register the specified Domain\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_register\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/register\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainPurchaseV2\"\n },\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_register\",\n \"summary\": \"Purchase and register the specified Domain\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"post_v2_customers_customer_id_domains_register_validate\": {\n \"description\": \"Validate the request body using the Domain Registration Schema for the specified TLD\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"post_v2_customers_customer_id_domains_register_validate\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/register/validate\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainPurchaseV2\"\n },\n \"security\": null,\n \"skill_name\": \"post_v2_customers_customer_id_domains_register_validate\",\n \"summary\": \"Validate the request body using the Domain Registration Schema for the specified TLD\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"purchase\": {\n \"description\": \"Purchase and register the specified Domain\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"purchase\",\n \"parameters\": [\n {\n \"description\": \"The Shopper for whom the domain should be purchased\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/purchase\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainPurchase\"\n },\n \"security\": null,\n \"skill_name\": \"purchase\",\n \"summary\": \"Purchase and register the specified Domain\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"purchase_privacy\": {\n \"description\": \"Purchase privacy for a specified domain\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"purchase_privacy\",\n \"parameters\": [\n {\n \"description\": \"Shopper ID of the owner of the domain\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain for which to purchase privacy\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}/privacy/purchase\",\n \"request_body\": {\n \"$ref\": \"#/definitions/PrivacyPurchase\"\n },\n \"security\": null,\n \"skill_name\": \"purchase_privacy\",\n \"summary\": \"Purchase privacy for a specified domain\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"put_v2_customers_customer_id_domains_domain_name_servers\": {\n \"description\": \"Replaces the existing name servers on the domain.\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"put_v2_customers_customer_id_domains_domain_name_servers\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose name servers are to be replaced\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/{domain}/nameServers\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainNameServerUpdateV2\"\n },\n \"security\": null,\n \"skill_name\": \"put_v2_customers_customer_id_domains_domain_name_servers\",\n \"summary\": \"Replaces the existing name servers on the domain.\",\n \"tags\": [\n \"Domains\"\n ]\n },\n \"put_v2_customers_customer_id_domains_notifications_opt_in\": {\n \"description\": \"Opt in to recieve notifications for the submitted notification types\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"put_v2_customers_customer_id_domains_notifications_opt_in\",\n \"parameters\": [\n {\n \"description\": \"A client provided identifier for tracking this request.\",\n \"in\": \"header\",\n \"name\": \"X-Request-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The Customer identifier
Note: For API Resellers, performing actions on behalf of your customers, you need to specify the Subaccount you're operating on behalf of; otherwise use your shopper id.\",\n \"in\": \"path\",\n \"name\": \"customerId\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"The notification types that should be opted in\",\n \"in\": \"query\",\n \"name\": \"types\",\n \"required\": true,\n \"schema\": {\n \"items\": {\n \"enum\": [\n \"AUTH_CODE_PURCHASE\",\n \"AUTH_CODE_REGENERATE\",\n \"AUTO_RENEWAL\",\n \"BACKORDER\",\n \"BACKORDER_PURCHASE\",\n \"BACKORDER_DELETE\",\n \"BACKORDER_UPDATE\",\n \"CHANGE_OF_REGISTRANT_DELETE\",\n \"CONTACT_CREATE\",\n \"CONTACT_DELETE\",\n \"CONTACT_UPDATE\",\n \"DNS_VERIFICATION\",\n \"DNSSEC_CREATE\",\n \"DNSSEC_DELETE\",\n \"DOMAIN_DELETE\",\n \"DOMAIN_UPDATE\",\n \"DOMAIN_UPDATE_CONTACTS\",\n \"DOMAIN_UPDATE_NAME_SERVERS\",\n \"EXPIRY\",\n \"HOST_CREATE\",\n \"HOST_DELETE\",\n \"ICANN_VERIFICATION\",\n \"MIGRATE\",\n \"MIGRATE_IN\",\n \"PREMIUM\",\n \"PRIVACY_FORWARDING_UPDATE\",\n \"PRIVACY_PURCHASE\",\n \"PRIVACY_DELETE\",\n \"REDEEM\",\n \"REGISTER\",\n \"RENEW\",\n \"RENEW_UNDO\",\n \"TRADE\",\n \"TRADE_CANCEL\",\n \"TRADE_PURCHASE\",\n \"TRADE_PURCHASE_AUTH_TEXT_MESSAGE\",\n \"TRADE_RESEND_AUTH_EMAIL\",\n \"TRANSFER\",\n \"TRANSFER_IN\",\n \"TRANSFER_IN_ACCEPT\",\n \"TRANSFER_IN_CANCEL\",\n \"TRANSFER_IN_RESTART\",\n \"TRANSFER_IN_RETRY\",\n \"TRANSFER_OUT\",\n \"TRANSFER_OUT_ACCEPT\",\n \"TRANSFER_OUT_REJECT\",\n \"TRANSFER_OUT_REQUESTED\",\n \"TRANSIT\"\n ],\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n }\n ],\n \"path\": \"/v2/customers/{customerId}/domains/notifications/optIn\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"put_v2_customers_customer_id_domains_notifications_opt_in\",\n \"summary\": \"Opt in to recieve notifications for the submitted notification types\",\n \"tags\": [\n \"Notifications\"\n ]\n },\n \"record_add\": {\n \"description\": \"Add the specified DNS Records to the specified Domain\",\n \"destructive\": true,\n \"method\": \"PATCH\",\n \"operation_id\": \"record_add\",\n \"parameters\": [\n {\n \"description\": \"Shopper ID which owns the domain. NOTE: This is only required if you are a Reseller managing a domain purchased outside the scope of your reseller account. For instance, if you're a Reseller, but purchased a Domain via http://www.godaddy.com\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose DNS Records are to be augmented\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}/records\",\n \"request_body\": {\n \"$ref\": \"#/definitions/ArrayOfDNSRecord\"\n },\n \"security\": null,\n \"skill_name\": \"record_add\",\n \"summary\": \"Add the specified DNS Records to the specified Domain\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"record_delete_type_name\": {\n \"description\": \"Delete all DNS Records for the specified Domain with the specified Type and Name\",\n \"destructive\": true,\n \"method\": \"DELETE\",\n \"operation_id\": \"record_delete_type_name\",\n \"parameters\": [\n {\n \"description\": \"Shopper ID which owns the domain. NOTE: This is only required if you are a Reseller managing a domain purchased outside the scope of your reseller account. For instance, if you're a Reseller, but purchased a Domain via http://www.godaddy.com\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose DNS Records are to be deleted\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"DNS Record Type for which DNS Records are to be deleted\",\n \"in\": \"path\",\n \"name\": \"type\",\n \"required\": true,\n \"schema\": {\n \"enum\": [\n \"A\",\n \"AAAA\",\n \"CNAME\",\n \"MX\",\n \"SRV\",\n \"TXT\"\n ],\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"DNS Record Name for which DNS Records are to be deleted\",\n \"in\": \"path\",\n \"name\": \"name\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}/records/{type}/{name}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"record_delete_type_name\",\n \"summary\": \"Delete all DNS Records for the specified Domain with the specified Type and Name\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"record_get\": {\n \"description\": \"Retrieve DNS Records for the specified Domain, optionally with the specified Type and/or Name\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"record_get\",\n \"parameters\": [\n {\n \"description\": \"Shopper ID which owns the domain. NOTE: This is only required if you are a Reseller managing a domain purchased outside the scope of your reseller account. For instance, if you're a Reseller, but purchased a Domain via http://www.godaddy.com\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose DNS Records are to be retrieved\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"DNS Record Type for which DNS Records are to be retrieved\",\n \"in\": \"path\",\n \"name\": \"type\",\n \"required\": true,\n \"schema\": {\n \"enum\": [\n \"A\",\n \"AAAA\",\n \"CNAME\",\n \"MX\",\n \"NS\",\n \"SOA\",\n \"SRV\",\n \"TXT\"\n ],\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"DNS Record Name for which DNS Records are to be retrieved\",\n \"in\": \"path\",\n \"name\": \"name\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Number of results to skip for pagination\",\n \"in\": \"query\",\n \"name\": \"offset\",\n \"required\": false,\n \"schema\": {\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Maximum number of items to return\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"type\": \"integer\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}/records/{type}/{name}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"record_get\",\n \"summary\": \"Retrieve DNS Records for the specified Domain, optionally with the specified Type and/or Name\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"record_replace\": {\n \"description\": \"Replace all DNS Records for the specified Domain\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"record_replace\",\n \"parameters\": [\n {\n \"description\": \"Shopper ID which owns the domain. NOTE: This is only required if you are a Reseller managing a domain purchased outside the scope of your reseller account. For instance, if you're a Reseller, but purchased a Domain via http://www.godaddy.com\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose DNS Records are to be replaced\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}/records\",\n \"request_body\": {\n \"items\": {\n \"$ref\": \"#/definitions/DNSRecord\"\n },\n \"type\": \"array\"\n },\n \"security\": null,\n \"skill_name\": \"record_replace\",\n \"summary\": \"Replace all DNS Records for the specified Domain\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"record_replace_type\": {\n \"description\": \"Replace all DNS Records for the specified Domain with the specified Type\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"record_replace_type\",\n \"parameters\": [\n {\n \"description\": \"Shopper ID which owns the domain. NOTE: This is only required if you are a Reseller managing a domain purchased outside the scope of your reseller account. For instance, if you're a Reseller, but purchased a Domain via http://www.godaddy.com\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose DNS Records are to be replaced\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"DNS Record Type for which DNS Records are to be replaced\",\n \"in\": \"path\",\n \"name\": \"type\",\n \"required\": true,\n \"schema\": {\n \"enum\": [\n \"A\",\n \"AAAA\",\n \"CNAME\",\n \"MX\",\n \"NS\",\n \"SOA\",\n \"SRV\",\n \"TXT\"\n ],\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}/records/{type}\",\n \"request_body\": {\n \"items\": {\n \"$ref\": \"#/definitions/DNSRecordCreateType\"\n },\n \"type\": \"array\"\n },\n \"security\": null,\n \"skill_name\": \"record_replace_type\",\n \"summary\": \"Replace all DNS Records for the specified Domain with the specified Type\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"record_replace_type_name\": {\n \"description\": \"Replace all DNS Records for the specified Domain with the specified Type and Name\",\n \"destructive\": true,\n \"method\": \"PUT\",\n \"operation_id\": \"record_replace_type_name\",\n \"parameters\": [\n {\n \"description\": \"Shopper ID which owns the domain. NOTE: This is only required if you are a Reseller managing a domain purchased outside the scope of your reseller account. For instance, if you're a Reseller, but purchased a Domain via http://www.godaddy.com\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose DNS Records are to be replaced\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"DNS Record Type for which DNS Records are to be replaced\",\n \"in\": \"path\",\n \"name\": \"type\",\n \"required\": true,\n \"schema\": {\n \"enum\": [\n \"A\",\n \"AAAA\",\n \"CNAME\",\n \"MX\",\n \"NS\",\n \"SOA\",\n \"SRV\",\n \"TXT\"\n ],\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"DNS Record Name for which DNS Records are to be replaced\",\n \"in\": \"path\",\n \"name\": \"name\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}/records/{type}/{name}\",\n \"request_body\": {\n \"items\": {\n \"$ref\": \"#/definitions/DNSRecordCreateTypeName\"\n },\n \"type\": \"array\"\n },\n \"security\": null,\n \"skill_name\": \"record_replace_type_name\",\n \"summary\": \"Replace all DNS Records for the specified Domain with the specified Type and Name\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"renew\": {\n \"description\": \"Renew the specified Domain\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"renew\",\n \"parameters\": [\n {\n \"description\": \"Shopper for whom Domain is to be renewed. NOTE: This is only required if you are a Reseller managing a domain purchased outside the scope of your reseller account. For instance, if you're a Reseller, but purchased a Domain via http://www.godaddy.com\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to renew\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}/renew\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainRenew\"\n },\n \"security\": null,\n \"skill_name\": \"renew\",\n \"summary\": \"Renew the specified Domain\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"schema\": {\n \"description\": \"Retrieve the schema to be submitted when registering a Domain for the specified TLD\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"schema\",\n \"parameters\": [\n {\n \"description\": \"The Top-Level Domain whose schema should be retrieved\",\n \"in\": \"path\",\n \"name\": \"tld\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/purchase/schema/{tld}\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"schema\",\n \"summary\": \"Retrieve the schema to be submitted when registering a Domain for the specified TLD\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"suggest\": {\n \"description\": \"Suggest alternate Domain names based on a seed Domain, a set of keywords, or the shopper's purchase history\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"suggest\",\n \"parameters\": [\n {\n \"description\": \"Shopper ID for which the suggestions are being generated\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain name or set of keywords for which alternative domain names will be suggested\",\n \"in\": \"query\",\n \"name\": \"query\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Two-letter ISO country code to be used as a hint for target region
\\nNOTE: These are sample values, there are many\\nmore\",\n \"in\": \"query\",\n \"name\": \"country\",\n \"required\": false,\n \"schema\": {\n \"enum\": [\n \"AC\",\n \"AD\",\n \"AE\",\n \"AF\",\n \"AG\",\n \"AI\",\n \"AL\",\n \"AM\",\n \"AO\",\n \"AQ\",\n \"AR\",\n \"AS\",\n \"AT\",\n \"AU\",\n \"AW\",\n \"AX\",\n \"AZ\",\n \"BA\",\n \"BB\",\n \"BD\",\n \"BE\",\n \"BF\",\n \"BG\",\n \"BH\",\n \"BI\",\n \"BJ\",\n \"BM\",\n \"BN\",\n \"BO\",\n \"BQ\",\n \"BR\",\n \"BS\",\n \"BT\",\n \"BV\",\n \"BW\",\n \"BY\",\n \"BZ\",\n \"CA\",\n \"CC\",\n \"CD\",\n \"CF\",\n \"CG\",\n \"CH\",\n \"CI\",\n \"CK\",\n \"CL\",\n \"CM\",\n \"CN\",\n \"CO\",\n \"CR\",\n \"CV\",\n \"CW\",\n \"CX\",\n \"CY\",\n \"CZ\",\n \"DE\",\n \"DJ\",\n \"DK\",\n \"DM\",\n \"DO\",\n \"DZ\",\n \"EC\",\n \"EE\",\n \"EG\",\n \"EH\",\n \"ER\",\n \"ES\",\n \"ET\",\n \"FI\",\n \"FJ\",\n \"FK\",\n \"FM\",\n \"FO\",\n \"FR\",\n \"GA\",\n \"GB\",\n \"GD\",\n \"GE\",\n \"GF\",\n \"GG\",\n \"GH\",\n \"GI\",\n \"GL\",\n \"GM\",\n \"GN\",\n \"GP\",\n \"GQ\",\n \"GR\",\n \"GS\",\n \"GT\",\n \"GU\",\n \"GW\",\n \"GY\",\n \"HK\",\n \"HM\",\n \"HN\",\n \"HR\",\n \"HT\",\n \"HU\",\n \"ID\",\n \"IE\",\n \"IL\",\n \"IM\",\n \"IN\",\n \"IO\",\n \"IQ\",\n \"IS\",\n \"IT\",\n \"JE\",\n \"JM\",\n \"JO\",\n \"JP\",\n \"KE\",\n \"KG\",\n \"KH\",\n \"KI\",\n \"KM\",\n \"KN\",\n \"KR\",\n \"KV\",\n \"KW\",\n \"KY\",\n \"KZ\",\n \"LA\",\n \"LB\",\n \"LC\",\n \"LI\",\n \"LK\",\n \"LR\",\n \"LS\",\n \"LT\",\n \"LU\",\n \"LV\",\n \"LY\",\n \"MA\",\n \"MC\",\n \"MD\",\n \"ME\",\n \"MG\",\n \"MH\",\n \"MK\",\n \"ML\",\n \"MM\",\n \"MN\",\n \"MO\",\n \"MP\",\n \"MQ\",\n \"MR\",\n \"MS\",\n \"MT\",\n \"MU\",\n \"MV\",\n \"MW\",\n \"MX\",\n \"MY\",\n \"MZ\",\n \"NA\",\n \"NC\",\n \"NE\",\n \"NF\",\n \"NG\",\n \"NI\",\n \"NL\",\n \"NO\",\n \"NP\",\n \"NR\",\n \"NU\",\n \"NZ\",\n \"OM\",\n \"PA\",\n \"PE\",\n \"PF\",\n \"PG\",\n \"PH\",\n \"PK\",\n \"PL\",\n \"PM\",\n \"PN\",\n \"PR\",\n \"PS\",\n \"PT\",\n \"PW\",\n \"PY\",\n \"QA\",\n \"RE\",\n \"RO\",\n \"RS\",\n \"RU\",\n \"RW\",\n \"SA\",\n \"SB\",\n \"SC\",\n \"SE\",\n \"SG\",\n \"SH\",\n \"SI\",\n \"SJ\",\n \"SK\",\n \"SL\",\n \"SM\",\n \"SN\",\n \"SO\",\n \"SR\",\n \"ST\",\n \"SV\",\n \"SX\",\n \"SZ\",\n \"TC\",\n \"TD\",\n \"TF\",\n \"TG\",\n \"TH\",\n \"TJ\",\n \"TK\",\n \"TL\",\n \"TM\",\n \"TN\",\n \"TO\",\n \"TP\",\n \"TR\",\n \"TT\",\n \"TV\",\n \"TW\",\n \"TZ\",\n \"UA\",\n \"UG\",\n \"UM\",\n \"US\",\n \"UY\",\n \"UZ\",\n \"VA\",\n \"VC\",\n \"VE\",\n \"VG\",\n \"VI\",\n \"VN\",\n \"VU\",\n \"WF\",\n \"WS\",\n \"YE\",\n \"YT\",\n \"ZA\",\n \"ZM\",\n \"ZW\"\n ],\n \"format\": \"iso-country-code\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Name of city to be used as a hint for target region\",\n \"in\": \"query\",\n \"name\": \"city\",\n \"required\": false,\n \"schema\": {\n \"format\": \"city-name\",\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Sources to be queried
\\n- CC_TLD - Varies the TLD using Country Codes
\\n- EXTENSION - Varies the TLD
\\n- KEYWORD_SPIN - Identifies keywords and then rotates each one
\\n- PREMIUM - Includes variations with premium prices
\",\n \"in\": \"query\",\n \"name\": \"sources\",\n \"required\": false,\n \"schema\": {\n \"items\": {\n \"enum\": [\n \"CC_TLD\",\n \"EXTENSION\",\n \"KEYWORD_SPIN\",\n \"PREMIUM\",\n \"cctld\",\n \"extension\",\n \"keywordspin\",\n \"premium\"\n ],\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n {\n \"description\": \"Top-level domains to be included in suggestions
\\nNOTE: These are sample values, there are many\\nmore\",\n \"in\": \"query\",\n \"name\": \"tlds\",\n \"required\": false,\n \"schema\": {\n \"items\": {\n \"type\": \"string\"\n },\n \"type\": \"array\"\n }\n },\n {\n \"description\": \"Maximum length of second-level domain\",\n \"in\": \"query\",\n \"name\": \"lengthMax\",\n \"required\": false,\n \"schema\": {\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Minimum length of second-level domain\",\n \"in\": \"query\",\n \"name\": \"lengthMin\",\n \"required\": false,\n \"schema\": {\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Maximum number of suggestions to return\",\n \"in\": \"query\",\n \"name\": \"limit\",\n \"required\": false,\n \"schema\": {\n \"type\": \"integer\"\n }\n },\n {\n \"description\": \"Maximum amount of time, in milliseconds, to wait for responses\\nIf elapses, return the results compiled up to that point\",\n \"in\": \"query\",\n \"name\": \"waitMs\",\n \"required\": false,\n \"schema\": {\n \"default\": 1000,\n \"format\": \"integer-positive\",\n \"type\": \"integer\"\n }\n }\n ],\n \"path\": \"/v1/domains/suggest\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"suggest\",\n \"summary\": \"Suggest alternate Domain names based on a seed Domain, a set of keywords, or the shopper's purchase history\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"tlds\": {\n \"description\": \"Retrieves a list of TLDs supported and enabled for sale\",\n \"destructive\": false,\n \"method\": \"GET\",\n \"operation_id\": \"tlds\",\n \"parameters\": [],\n \"path\": \"/v1/domains/tlds\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"tlds\",\n \"summary\": \"Retrieves a list of TLDs supported and enabled for sale\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"transfer_in\": {\n \"description\": \"Purchase and start or restart transfer process\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"transfer_in\",\n \"parameters\": [\n {\n \"description\": \"The Shopper to whom the domain should be transfered\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain to transfer in\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}/transfer\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainTransferIn\"\n },\n \"security\": null,\n \"skill_name\": \"transfer_in\",\n \"summary\": \"Purchase and start or restart transfer process\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"update\": {\n \"description\": \"Update details for the specified Domain\",\n \"destructive\": true,\n \"method\": \"PATCH\",\n \"operation_id\": \"update\",\n \"parameters\": [\n {\n \"description\": \"Domain whose details are to be updated\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Shopper for whom Domain is to be updated. NOTE: This is only required if you are a Reseller managing a domain purchased outside the scope of your reseller account. For instance, if you're a Reseller, but purchased a Domain via http://www.godaddy.com\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainUpdate\"\n },\n \"security\": null,\n \"skill_name\": \"update\",\n \"summary\": \"Update details for the specified Domain\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"update_contacts\": {\n \"description\": \"Update domain\",\n \"destructive\": true,\n \"method\": \"PATCH\",\n \"operation_id\": \"update_contacts\",\n \"parameters\": [\n {\n \"description\": \"Shopper for whom domain contacts are to be updated. NOTE: This is only required if you are a Reseller managing a domain purchased outside the scope of your reseller account. For instance, if you're a Reseller, but purchased a Domain via http://www.godaddy.com\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose Contacts are to be updated.\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}/contacts\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainContacts\"\n },\n \"security\": null,\n \"skill_name\": \"update_contacts\",\n \"summary\": \"Update domain\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"validate\": {\n \"description\": \"Validate the request body using the Domain Purchase Schema for the specified TLD\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"validate\",\n \"parameters\": [],\n \"path\": \"/v1/domains/purchase/validate\",\n \"request_body\": {\n \"$ref\": \"#/definitions/DomainPurchase\"\n },\n \"security\": null,\n \"skill_name\": \"validate\",\n \"summary\": \"Validate the request body using the Domain Purchase Schema for the specified TLD\",\n \"tags\": [\n \"v1\"\n ]\n },\n \"verify_email\": {\n \"description\": \"Re-send Contact E-mail Verification for specified Domain\",\n \"destructive\": true,\n \"method\": \"POST\",\n \"operation_id\": \"verify_email\",\n \"parameters\": [\n {\n \"description\": \"Shopper for whom domain contact e-mail should be verified. NOTE: This is only required if you are a Reseller managing a domain purchased outside the scope of your reseller account. For instance, if you're a Reseller, but purchased a Domain via http://www.godaddy.com\",\n \"in\": \"header\",\n \"name\": \"X-Shopper-Id\",\n \"required\": false,\n \"schema\": {\n \"type\": \"string\"\n }\n },\n {\n \"description\": \"Domain whose Contact E-mail should be verified.\",\n \"in\": \"path\",\n \"name\": \"domain\",\n \"required\": true,\n \"schema\": {\n \"type\": \"string\"\n }\n }\n ],\n \"path\": \"/v1/domains/{domain}/verifyRegistrantEmail\",\n \"request_body\": null,\n \"security\": null,\n \"skill_name\": \"verify_email\",\n \"summary\": \"Re-send Contact E-mail Verification for specified Domain\",\n \"tags\": [\n \"v1\"\n ]\n }\n}")
ROOT_SECURITY = json.loads("[\n {\n \"godaddy_sso_key\": []\n }\n]")
SECURITY_SCHEMES = json.loads("{\n \"godaddy_sso_key\": {\n \"description\": \"GoDaddy API key and secret in API_KEY:API_SECRET format.\",\n \"in\": \"header\",\n \"name\": \"Authorization\",\n \"type\": \"apiKey\",\n \"x-a2a-description\": \"Enter API_KEY:API_SECRET. Requests send it as Authorization: sso-key .\",\n \"x-a2a-field-name\": \"GODADDY_API_KEY_SECRET\",\n \"x-a2a-label\": \"GoDaddy API key and secret\",\n \"x-a2a-prefix\": \"sso-key \"\n }\n}")
SECURITY_FIELDS = json.loads("{\n \"godaddy_sso_key\": {\n \"field\": \"GODADDY_API_KEY_SECRET\",\n \"kind\": \"apiKey\",\n \"location\": \"header\",\n \"name\": \"Authorization\",\n \"prefix\": \"sso-key \"\n }\n}")
PATH_PARAMETER_RE = re.compile(r"{([^}/]+)}")
class OperationInput(BaseModel):
parameters: dict[str, Any] = Field(
default_factory=dict,
description="Path, query, header, and cookie parameters keyed by OpenAPI parameter name.",
)
body: Any | None = Field(default=None, description="JSON request body, when the operation accepts one.")
class GoDaddy(A2AAgent):
name = "go-daddy"
description = "The Domains API is for domain-related actions such as purchasing, renewing, or managing domains.
Updates to domains generally require the domain to be in an `ACTIVE` status. Some update actions (such as updating nameservers) on protected and high-value domains requires 2FA which is currently not supported via the api.
"
version = "0.1.0"
consumer_setup = ConsumerSetup.from_fields(
ConsumerSetupField.config("OPENAPI_BASE_URL", label="API base URL", description="Override the default API server (https://api.ote-godaddy.com).", required=False, input_type="url"),
ConsumerSetupField.secret("GODADDY_API_KEY_SECRET", label="GoDaddy API key and secret", description="Enter API_KEY:API_SECRET. Requests send it as Authorization: sso-key .", required=True),
)
llm_provisioning = LLMProvisioning.PLATFORM
pricing = Pricing(
price_per_call_usd=0.0,
caller_pays_llm=False,
notes="Uses a scoped platform LLM grant through ctx.llm.",
)
resources = Resources(cpu="200m", memory="512Mi")
egress = EgressPolicy(
allow_hosts=('api.ote-godaddy.com',),
deny_internet_by_default=True,
)
tools_used = ("openapi", "deepagents")
capabilities = {
"openapi_auto_agent": {
"operation_count": len(OPERATIONS),
"default_base_url": DEFAULT_BASE_URL,
"security_schemes": list(SECURITY_SCHEMES),
}
}
@skill(
name="auto",
description="Use the OpenAPI service to complete a natural-language goal.",
tags=("openapi", "auto"),
timeout_seconds=180,
)
async def auto(self, ctx: RunContext, goal: str) -> dict[str, Any]:
creds = ctx.llm
if not creds.api_key:
return {
"error": "llm_credentials_missing",
"final": (
"LLM credentials were not available for this run. Hosted "
"generated OpenAPI agents should receive a platform LLM grant."
),
"messages": [],
}
graph = create_a2a_deep_agent(
ctx,
creds=creds,
tools=self._operation_tools(ctx),
system_prompt=self._system_prompt(),
)
result = await graph.ainvoke({"messages": [{"role": "user", "content": goal}]})
messages = result.get("messages", []) if isinstance(result, dict) else []
final = _message_text(messages[-1]) if messages else result
return {
"final": final,
"messages": [_message_to_dict(message) for message in messages[-8:]],
}
@skill(
name="list",
description="GET /v1/domains - Retrieve a list of Domains for the specified Shopper",
tags=('v1',),
timeout_seconds=60,
)
async def list(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"list",
parameters=parameters or {},
body=body,
)
@skill(
name="get_agreement",
description="GET /v1/domains/agreements - Retrieve the legal agreement(s) required to purchase the specified TLD and add-ons",
tags=('v1',),
timeout_seconds=60,
)
async def get_agreement(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_agreement",
parameters=parameters or {},
body=body,
)
@skill(
name="available",
description="GET /v1/domains/available - Determine whether or not the specified domain is available for purchase",
tags=('v1',),
timeout_seconds=60,
)
async def available(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"available",
parameters=parameters or {},
body=body,
)
@skill(
name="available_bulk",
description="POST /v1/domains/available - Determine whether or not the specified domains are available for purchase",
tags=('v1',),
timeout_seconds=120,
)
async def available_bulk(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"available_bulk",
parameters=parameters or {},
body=body,
)
@skill(
name="contacts_validate",
description="POST /v1/domains/contacts/validate - Validate the request body using the Domain Contact Validation Schema for specified domains.",
tags=('v1',),
timeout_seconds=120,
)
async def contacts_validate(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"contacts_validate",
parameters=parameters or {},
body=body,
)
@skill(
name="purchase",
description="POST /v1/domains/purchase - Purchase and register the specified Domain",
tags=('v1',),
timeout_seconds=120,
)
async def purchase(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"purchase",
parameters=parameters or {},
body=body,
)
@skill(
name="schema",
description="GET /v1/domains/purchase/schema/{tld} - Retrieve the schema to be submitted when registering a Domain for the specified TLD",
tags=('v1',),
timeout_seconds=60,
)
async def schema(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"schema",
parameters=parameters or {},
body=body,
)
@skill(
name="validate",
description="POST /v1/domains/purchase/validate - Validate the request body using the Domain Purchase Schema for the specified TLD",
tags=('v1',),
timeout_seconds=120,
)
async def validate(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"validate",
parameters=parameters or {},
body=body,
)
@skill(
name="suggest",
description="GET /v1/domains/suggest - Suggest alternate Domain names based on a seed Domain, a set of keywords, or the shopper's purchase history",
tags=('v1',),
timeout_seconds=60,
)
async def suggest(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"suggest",
parameters=parameters or {},
body=body,
)
@skill(
name="tlds",
description="GET /v1/domains/tlds - Retrieves a list of TLDs supported and enabled for sale",
tags=('v1',),
timeout_seconds=60,
)
async def tlds(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"tlds",
parameters=parameters or {},
body=body,
)
@skill(
name="cancel",
description="DELETE /v1/domains/{domain} - Cancel a purchased domain",
tags=('v1',),
timeout_seconds=120,
)
async def cancel(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"cancel",
parameters=parameters or {},
body=body,
)
@skill(
name="get",
description="GET /v1/domains/{domain} - Retrieve details for the specified Domain",
tags=('v1',),
timeout_seconds=60,
)
async def get(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get",
parameters=parameters or {},
body=body,
)
@skill(
name="update",
description="PATCH /v1/domains/{domain} - Update details for the specified Domain",
tags=('v1',),
timeout_seconds=120,
)
async def update(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"update",
parameters=parameters or {},
body=body,
)
@skill(
name="update_contacts",
description="PATCH /v1/domains/{domain}/contacts - Update domain",
tags=('v1',),
timeout_seconds=120,
)
async def update_contacts(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"update_contacts",
parameters=parameters or {},
body=body,
)
@skill(
name="cancel_privacy",
description="DELETE /v1/domains/{domain}/privacy - Submit a privacy cancellation request for the given domain",
tags=('v1',),
timeout_seconds=120,
)
async def cancel_privacy(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"cancel_privacy",
parameters=parameters or {},
body=body,
)
@skill(
name="purchase_privacy",
description="POST /v1/domains/{domain}/privacy/purchase - Purchase privacy for a specified domain",
tags=('v1',),
timeout_seconds=120,
)
async def purchase_privacy(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"purchase_privacy",
parameters=parameters or {},
body=body,
)
@skill(
name="record_add",
description="PATCH /v1/domains/{domain}/records - Add the specified DNS Records to the specified Domain",
tags=('v1',),
timeout_seconds=120,
)
async def record_add(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"record_add",
parameters=parameters or {},
body=body,
)
@skill(
name="record_replace",
description="PUT /v1/domains/{domain}/records - Replace all DNS Records for the specified Domain",
tags=('v1',),
timeout_seconds=120,
)
async def record_replace(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"record_replace",
parameters=parameters or {},
body=body,
)
@skill(
name="record_get",
description="GET /v1/domains/{domain}/records/{type}/{name} - Retrieve DNS Records for the specified Domain, optionally with the specified Type and/or Name",
tags=('v1',),
timeout_seconds=60,
)
async def record_get(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"record_get",
parameters=parameters or {},
body=body,
)
@skill(
name="record_replace_type_name",
description="PUT /v1/domains/{domain}/records/{type}/{name} - Replace all DNS Records for the specified Domain with the specified Type and Name",
tags=('v1',),
timeout_seconds=120,
)
async def record_replace_type_name(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"record_replace_type_name",
parameters=parameters or {},
body=body,
)
@skill(
name="record_delete_type_name",
description="DELETE /v1/domains/{domain}/records/{type}/{name} - Delete all DNS Records for the specified Domain with the specified Type and Name",
tags=('v1',),
timeout_seconds=120,
)
async def record_delete_type_name(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"record_delete_type_name",
parameters=parameters or {},
body=body,
)
@skill(
name="record_replace_type",
description="PUT /v1/domains/{domain}/records/{type} - Replace all DNS Records for the specified Domain with the specified Type",
tags=('v1',),
timeout_seconds=120,
)
async def record_replace_type(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"record_replace_type",
parameters=parameters or {},
body=body,
)
@skill(
name="renew",
description="POST /v1/domains/{domain}/renew - Renew the specified Domain",
tags=('v1',),
timeout_seconds=120,
)
async def renew(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"renew",
parameters=parameters or {},
body=body,
)
@skill(
name="transfer_in",
description="POST /v1/domains/{domain}/transfer - Purchase and start or restart transfer process",
tags=('v1',),
timeout_seconds=120,
)
async def transfer_in(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"transfer_in",
parameters=parameters or {},
body=body,
)
@skill(
name="verify_email",
description="POST /v1/domains/{domain}/verifyRegistrantEmail - Re-send Contact E-mail Verification for specified Domain",
tags=('v1',),
timeout_seconds=120,
)
async def verify_email(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"verify_email",
parameters=parameters or {},
body=body,
)
@skill(
name="get_v2_customers_customer_id_domains_domain",
description="GET /v2/customers/{customerId}/domains/{domain} - Retrieve details for the specified Domain",
tags=('Domains',),
timeout_seconds=60,
)
async def get_v2_customers_customer_id_domains_domain(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_v2_customers_customer_id_domains_domain",
parameters=parameters or {},
body=body,
)
@skill(
name="delete_v2_customers_customer_id_domains_domain_change_of_registrant",
description="DELETE /v2/customers/{customerId}/domains/{domain}/changeOfRegistrant - Cancels a pending change of registrant request for a given domain",
tags=('Domains',),
timeout_seconds=120,
)
async def delete_v2_customers_customer_id_domains_domain_change_of_registrant(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"delete_v2_customers_customer_id_domains_domain_change_of_registrant",
parameters=parameters or {},
body=body,
)
@skill(
name="get_v2_customers_customer_id_domains_domain_change_of_registrant",
description="GET /v2/customers/{customerId}/domains/{domain}/changeOfRegistrant - Retrieve change of registrant information",
tags=('Domains',),
timeout_seconds=60,
)
async def get_v2_customers_customer_id_domains_domain_change_of_registrant(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_v2_customers_customer_id_domains_domain_change_of_registrant",
parameters=parameters or {},
body=body,
)
@skill(
name="patch_v2_customers_customer_id_domains_domain_dnssec_records",
description="PATCH /v2/customers/{customerId}/domains/{domain}/dnssecRecords - Add the specifed DNSSEC records to the domain",
tags=('Domains',),
timeout_seconds=120,
)
async def patch_v2_customers_customer_id_domains_domain_dnssec_records(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"patch_v2_customers_customer_id_domains_domain_dnssec_records",
parameters=parameters or {},
body=body,
)
@skill(
name="delete_v2_customers_customer_id_domains_domain_dnssec_records",
description="DELETE /v2/customers/{customerId}/domains/{domain}/dnssecRecords - Remove the specifed DNSSEC record from the domain",
tags=('Domains',),
timeout_seconds=120,
)
async def delete_v2_customers_customer_id_domains_domain_dnssec_records(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"delete_v2_customers_customer_id_domains_domain_dnssec_records",
parameters=parameters or {},
body=body,
)
@skill(
name="put_v2_customers_customer_id_domains_domain_name_servers",
description="PUT /v2/customers/{customerId}/domains/{domain}/nameServers - Replaces the existing name servers on the domain.",
tags=('Domains',),
timeout_seconds=120,
)
async def put_v2_customers_customer_id_domains_domain_name_servers(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"put_v2_customers_customer_id_domains_domain_name_servers",
parameters=parameters or {},
body=body,
)
@skill(
name="get_v2_customers_customer_id_domains_domain_privacy_forwarding",
description="GET /v2/customers/{customerId}/domains/{domain}/privacy/forwarding - Retrieve privacy email forwarding settings showing where emails are delivered",
tags=('Domains',),
timeout_seconds=60,
)
async def get_v2_customers_customer_id_domains_domain_privacy_forwarding(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_v2_customers_customer_id_domains_domain_privacy_forwarding",
parameters=parameters or {},
body=body,
)
@skill(
name="patch_v2_customers_customer_id_domains_domain_privacy_forwarding",
description="PATCH /v2/customers/{customerId}/domains/{domain}/privacy/forwarding - Update privacy email forwarding settings to determine how emails are delivered",
tags=('Domains',),
timeout_seconds=120,
)
async def patch_v2_customers_customer_id_domains_domain_privacy_forwarding(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"patch_v2_customers_customer_id_domains_domain_privacy_forwarding",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_domain_redeem",
description="POST /v2/customers/{customerId}/domains/{domain}/redeem - Purchase a restore for the given domain to bring it out of redemption",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_domain_redeem(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_domain_redeem",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_domain_renew",
description="POST /v2/customers/{customerId}/domains/{domain}/renew - Renew the specified Domain",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_domain_renew(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_domain_renew",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_domain_transfer",
description="POST /v2/customers/{customerId}/domains/{domain}/transfer - Purchase and start or restart transfer process",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_domain_transfer(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_domain_transfer",
parameters=parameters or {},
body=body,
)
@skill(
name="get_v2_customers_customer_id_domains_domain_transfer",
description="GET /v2/customers/{customerId}/domains/{domain}/transfer - Query the current transfer status",
tags=('Domains',),
timeout_seconds=60,
)
async def get_v2_customers_customer_id_domains_domain_transfer(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_v2_customers_customer_id_domains_domain_transfer",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_domain_transfer_validate",
description="POST /v2/customers/{customerId}/domains/{domain}/transfer/validate - Validate the request body using the Domain Transfer Schema for the specified TLD",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_domain_transfer_validate(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_domain_transfer_validate",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_domain_transfer_in_accept",
description="POST /v2/customers/{customerId}/domains/{domain}/transferInAccept - Accepts the transfer in",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_domain_transfer_in_accept(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_domain_transfer_in_accept",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_domain_transfer_in_cancel",
description="POST /v2/customers/{customerId}/domains/{domain}/transferInCancel - Cancels the transfer in",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_domain_transfer_in_cancel(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_domain_transfer_in_cancel",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_domain_transfer_in_restart",
description="POST /v2/customers/{customerId}/domains/{domain}/transferInRestart - Restarts transfer in request from the beginning",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_domain_transfer_in_restart(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_domain_transfer_in_restart",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_domain_transfer_in_retry",
description="POST /v2/customers/{customerId}/domains/{domain}/transferInRetry - Retries the current transfer in request with supplied Authorization code",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_domain_transfer_in_retry(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_domain_transfer_in_retry",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_domain_transfer_out",
description="POST /v2/customers/{customerId}/domains/{domain}/transferOut - Initiate transfer out to another registrar for a .uk domain.",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_domain_transfer_out(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_domain_transfer_out",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_domain_transfer_out_accept",
description="POST /v2/customers/{customerId}/domains/{domain}/transferOutAccept - Accept transfer out",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_domain_transfer_out_accept(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_domain_transfer_out_accept",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_domain_transfer_out_reject",
description="POST /v2/customers/{customerId}/domains/{domain}/transferOutReject - Reject transfer out",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_domain_transfer_out_reject(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_domain_transfer_out_reject",
parameters=parameters or {},
body=body,
)
@skill(
name="domains_forwards_delete",
description="DELETE /v2/customers/{customerId}/domains/forwards/{fqdn} - Submit a forwarding cancellation request for the given fqdn",
tags=('Domains',),
timeout_seconds=120,
)
async def domains_forwards_delete(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"domains_forwards_delete",
parameters=parameters or {},
body=body,
)
@skill(
name="domains_forwards_get",
description="GET /v2/customers/{customerId}/domains/forwards/{fqdn} - Retrieve the forwarding information for the given fqdn",
tags=('Domains',),
timeout_seconds=60,
)
async def domains_forwards_get(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"domains_forwards_get",
parameters=parameters or {},
body=body,
)
@skill(
name="domains_forwards_put",
description="PUT /v2/customers/{customerId}/domains/forwards/{fqdn} - Modify the forwarding information for the given fqdn",
tags=('Domains',),
timeout_seconds=120,
)
async def domains_forwards_put(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"domains_forwards_put",
parameters=parameters or {},
body=body,
)
@skill(
name="domains_forwards_post",
description="POST /v2/customers/{customerId}/domains/forwards/{fqdn} - Create a new forwarding configuration for the given FQDN",
tags=('Domains',),
timeout_seconds=120,
)
async def domains_forwards_post(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"domains_forwards_post",
parameters=parameters or {},
body=body,
)
@skill(
name="get_v2_customers_customer_id_domains_domain_actions",
description="GET /v2/customers/{customerId}/domains/{domain}/actions - Retrieves a list of the most recent actions for the specified domain",
tags=('Actions',),
timeout_seconds=60,
)
async def get_v2_customers_customer_id_domains_domain_actions(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_v2_customers_customer_id_domains_domain_actions",
parameters=parameters or {},
body=body,
)
@skill(
name="delete_v2_customers_customer_id_domains_domain_actions_type",
description="DELETE /v2/customers/{customerId}/domains/{domain}/actions/{type} - Cancel the most recent user action for the specified domain",
tags=('Actions',),
timeout_seconds=120,
)
async def delete_v2_customers_customer_id_domains_domain_actions_type(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"delete_v2_customers_customer_id_domains_domain_actions_type",
parameters=parameters or {},
body=body,
)
@skill(
name="get_v2_customers_customer_id_domains_domain_actions_type",
description="GET /v2/customers/{customerId}/domains/{domain}/actions/{type} - Retrieves the most recent action for the specified domain",
tags=('Actions',),
timeout_seconds=60,
)
async def get_v2_customers_customer_id_domains_domain_actions_type(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_v2_customers_customer_id_domains_domain_actions_type",
parameters=parameters or {},
body=body,
)
@skill(
name="get_v2_customers_customer_id_domains_notifications",
description="GET /v2/customers/{customerId}/domains/notifications - Retrieve the next domain notification",
tags=('Notifications',),
timeout_seconds=60,
)
async def get_v2_customers_customer_id_domains_notifications(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_v2_customers_customer_id_domains_notifications",
parameters=parameters or {},
body=body,
)
@skill(
name="get_v2_customers_customer_id_domains_notifications_opt_in",
description="GET /v2/customers/{customerId}/domains/notifications/optIn - Retrieve a list of notification types that are opted in",
tags=('Notifications',),
timeout_seconds=60,
)
async def get_v2_customers_customer_id_domains_notifications_opt_in(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_v2_customers_customer_id_domains_notifications_opt_in",
parameters=parameters or {},
body=body,
)
@skill(
name="put_v2_customers_customer_id_domains_notifications_opt_in",
description="PUT /v2/customers/{customerId}/domains/notifications/optIn - Opt in to recieve notifications for the submitted notification types",
tags=('Notifications',),
timeout_seconds=120,
)
async def put_v2_customers_customer_id_domains_notifications_opt_in(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"put_v2_customers_customer_id_domains_notifications_opt_in",
parameters=parameters or {},
body=body,
)
@skill(
name="get_v2_customers_customer_id_domains_notifications_schemas_type",
description="GET /v2/customers/{customerId}/domains/notifications/schemas/{type} - Retrieve the schema for the notification data for the specified notification type",
tags=('Notifications',),
timeout_seconds=60,
)
async def get_v2_customers_customer_id_domains_notifications_schemas_type(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_v2_customers_customer_id_domains_notifications_schemas_type",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_notifications_notification_id_acknowledge",
description="POST /v2/customers/{customerId}/domains/notifications/{notificationId}/acknowledge - Acknowledge a domain notification",
tags=('Notifications',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_notifications_notification_id_acknowledge(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_notifications_notification_id_acknowledge",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_register",
description="POST /v2/customers/{customerId}/domains/register - Purchase and register the specified Domain",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_register(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_register",
parameters=parameters or {},
body=body,
)
@skill(
name="get_v2_customers_customer_id_domains_register_schema_tld",
description="GET /v2/customers/{customerId}/domains/register/schema/{tld} - Retrieve the schema to be submitted when registering a Domain for the specified TLD",
tags=('Domains',),
timeout_seconds=60,
)
async def get_v2_customers_customer_id_domains_register_schema_tld(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_v2_customers_customer_id_domains_register_schema_tld",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_register_validate",
description="POST /v2/customers/{customerId}/domains/register/validate - Validate the request body using the Domain Registration Schema for the specified TLD",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_register_validate(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_register_validate",
parameters=parameters or {},
body=body,
)
@skill(
name="get_v2_domains_maintenances",
description="GET /v2/domains/maintenances - Retrieve a list of upcoming system Maintenances",
tags=('Domains',),
timeout_seconds=60,
)
async def get_v2_domains_maintenances(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_v2_domains_maintenances",
parameters=parameters or {},
body=body,
)
@skill(
name="get_v2_domains_maintenances_maintenance_id",
description="GET /v2/domains/maintenances/{maintenanceId} - Retrieve the details for an upcoming system Maintenances",
tags=('Domains',),
timeout_seconds=60,
)
async def get_v2_domains_maintenances_maintenance_id(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_v2_domains_maintenances_maintenance_id",
parameters=parameters or {},
body=body,
)
@skill(
name="get_v2_domains_usage_yyyymm",
description="GET /v2/domains/usage/{yyyymm} - Retrieve api usage request counts for a specific year/month. The data is retained for a period of three months.",
tags=('Domains',),
timeout_seconds=60,
)
async def get_v2_domains_usage_yyyymm(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"get_v2_domains_usage_yyyymm",
parameters=parameters or {},
body=body,
)
@skill(
name="patch_v2_customers_customer_id_domains_domain_contacts",
description="PATCH /v2/customers/{customerId}/domains/{domain}/contacts - Update domain contacts",
tags=('Contacts',),
timeout_seconds=120,
)
async def patch_v2_customers_customer_id_domains_domain_contacts(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"patch_v2_customers_customer_id_domains_domain_contacts",
parameters=parameters or {},
body=body,
)
@skill(
name="post_v2_customers_customer_id_domains_domain_regenerate_auth_code",
description="POST /v2/customers/{customerId}/domains/{domain}/regenerateAuthCode - Regenerate the auth code for the given domain",
tags=('Domains',),
timeout_seconds=120,
)
async def post_v2_customers_customer_id_domains_domain_regenerate_auth_code(
self,
ctx: RunContext,
parameters: dict[str, Any] | None = None,
body: Any | None = None,
) -> dict[str, Any]:
return await self._request(
ctx,
"post_v2_customers_customer_id_domains_domain_regenerate_auth_code",
parameters=parameters or {},
body=body,
)
def _operation_tools(self, ctx: RunContext) -> list[StructuredTool]:
tools: list[StructuredTool] = []
for operation_id, operation in OPERATIONS.items():
async def call(
parameters: dict[str, Any] | None = None,
body: Any | None = None,
*,
_operation_id: str = operation_id,
) -> dict[str, Any]:
return await self._request(
ctx,
_operation_id,
parameters=parameters or {},
body=body,
)
tools.append(
StructuredTool.from_function(
coroutine=call,
name=operation["skill_name"],
description=self._tool_description(operation),
args_schema=OperationInput,
)
)
return tools
def _system_prompt(self) -> str:
lines = [
"You operate an API through generated OpenAPI tools.",
"Call tools to get real results. Do not invent API responses.",
"For write, update, or delete operations, explain the intended action before calling the tool.",
"If an operation reports missing consumer setup, tell the user which setup field is required.",
"",
"Available operations:",
]
for operation in OPERATIONS.values():
marker = "WRITE" if operation.get("destructive") else "READ"
lines.append(
f"- {operation['skill_name']}: {marker} {operation['method']} {operation['path']} — {operation['summary']}"
)
return "\n".join(lines)
def _tool_description(self, operation: dict[str, Any]) -> str:
parts = [
f"{operation['method']} {operation['path']}",
str(operation.get("description") or operation.get("summary") or ""),
]
if operation.get("parameters"):
parts.append(
"Parameters: "
+ ", ".join(
f"{p['name']} in {p['in']}{' required' if p.get('required') else ''}"
for p in operation["parameters"]
)
)
if operation.get("request_body") is not None:
parts.append("Accepts a JSON request body.")
return "\n".join(part for part in parts if part)
async def _request(
self,
ctx: RunContext,
operation_id: str,
*,
parameters: dict[str, Any],
body: Any | None,
) -> dict[str, Any]:
operation = OPERATIONS[operation_id]
base_url = str(ctx.consumer_config("OPENAPI_BASE_URL", DEFAULT_BASE_URL) or DEFAULT_BASE_URL).rstrip("/")
url, query, headers = self._request_parts(ctx, operation, parameters)
request_kwargs: dict[str, Any] = {
"params": query,
"headers": headers,
}
if body is not None:
request_kwargs["json"] = body
async with httpx.AsyncClient(timeout=60.0, follow_redirects=True) as client:
response = await client.request(
operation["method"],
f"{base_url}{url}",
**request_kwargs,
)
content_type = response.headers.get("content-type", "")
try:
payload: Any = response.json() if "json" in content_type else response.text
except ValueError:
payload = response.text
if response.status_code >= 400:
return {
"ok": False,
"status_code": response.status_code,
"operation_id": operation_id,
"error": payload,
}
return {
"ok": True,
"status_code": response.status_code,
"operation_id": operation_id,
"result": payload,
}
def _request_parts(
self,
ctx: RunContext,
operation: dict[str, Any],
parameters: dict[str, Any],
) -> tuple[str, dict[str, Any], dict[str, str]]:
path = operation["path"]
query: dict[str, Any] = {}
headers: dict[str, str] = {}
cookies: dict[str, Any] = {}
for param in operation.get("parameters") or []:
name = param["name"]
if name not in parameters:
if param.get("required"):
raise ValueError(f"missing required parameter {name!r}")
continue
value = parameters[name]
location = param["in"]
if location == "path":
path = path.replace("{" + name + "}", str(value))
elif location == "query":
query[name] = value
elif location == "header":
headers[name] = str(value)
elif location == "cookie":
cookies[name] = value
unresolved = PATH_PARAMETER_RE.findall(path)
if unresolved:
missing = ", ".join(sorted(set(unresolved)))
raise ValueError("missing required path parameter(s): " + missing)
if cookies:
headers["cookie"] = "; ".join(f"{key}={value}" for key, value in cookies.items())
auth_headers, auth_query = self._auth_for_operation(ctx, operation)
headers.update(auth_headers)
query.update(auth_query)
return path, query, headers
def _auth_for_operation(self, ctx: RunContext, operation: dict[str, Any]) -> tuple[dict[str, str], dict[str, Any]]:
requirements = operation.get("security")
if requirements is None:
requirements = ROOT_SECURITY
if requirements == []:
return {}, {}
missing: list[str] = []
for requirement in requirements or []:
if not isinstance(requirement, dict) or not requirement:
return {}, {}
headers: dict[str, str] = {}
query: dict[str, Any] = {}
ok = True
for scheme_name in requirement:
mapping = SECURITY_FIELDS.get(scheme_name) or {}
secret_name = mapping.get("field")
value = _consumer_secret_optional(ctx, secret_name) if secret_name else ""
if not value:
ok = False
if secret_name:
missing.append(secret_name)
continue
kind = mapping.get("kind")
if kind == "apiKey":
prefix = mapping.get("prefix") or ""
sent_value = f"{prefix}{value}"
if mapping.get("location") == "query":
query[mapping.get("name") or scheme_name] = sent_value
else:
headers[mapping.get("name") or scheme_name] = sent_value
elif kind in {"http", "oauth2"}:
scheme = mapping.get("scheme") or "Bearer"
if scheme.lower() == "basic":
token = base64.b64encode(value.encode("utf-8")).decode("ascii")
headers["authorization"] = f"Basic {token}"
else:
headers["authorization"] = f"{scheme} {value}"
else:
ok = False
if ok:
return headers, query
if missing:
raise ConsumerSetupMissing(
"operation requires consumer setup secret(s): "
+ ", ".join(sorted(set(missing)))
)
return {}, {}
def _consumer_secret_optional(ctx: RunContext, name: str | None) -> str:
if not name:
return ""
try:
return ctx.consumer_secret(name)
except ConsumerSetupMissing:
return ""
def _message_text(message: Any) -> Any:
content = getattr(message, "content", message)
return content
def _message_to_dict(message: Any) -> dict[str, Any]:
if isinstance(message, BaseMessage):
return message.model_dump(mode="json")
if hasattr(message, "model_dump"):
return message.model_dump(mode="json")
if isinstance(message, dict):
return message
return {"content": str(message)}
agent = GoDaddy()