{
  "openapi": "3.1.0",
  "info": {
    "title": "Products APIs",
    "description": "Product catalog and pricing: product details, plan definitions, availability,\ncategory key mappings, and related catalog queries.\n",
    "version": "2.0.0"
  },
  "servers": [
    {
      "url": "https://api.sandbox.resellerclub.com/v2",
      "description": "Sandbox"
    },
    {
      "url": "https://api.resellerclub.com/v2",
      "description": "Live"
    }
  ],
  "security": [
    {
      "apiKeyAuth": [],
      "userIdHeader": []
    }
  ],
  "paths": {
    "/products/moves": {
      "post": {
        "tags": [
          "APIs"
        ],
        "summary": "Move a website product between customers",
        "description": "Moves all products from one customer to other customer.",
        "operationId": "moveWebsiteProduct",
        "requestBody": {
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MoveWebsiteProductRequest"
              }
            }
          },
          "required": true
        },
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/MoveWebsiteProductResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          }
        },
        "x-v2-response-schema": "MoveWebsiteProductResponse"
      }
    },
    "/products": {
      "get": {
        "tags": [
          "APIs"
        ],
        "summary": "List active product metadata",
        "description": "Returns active product details keyed by product identifier.",
        "operationId": "listProductDetails",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ListProductDetailsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          }
        },
        "x-v2-response-schema": "ListProductDetailsResponse"
      }
    },
    "/products/country-mappings": {
      "get": {
        "tags": [
          "APIs"
        ],
        "summary": "List product availability by country",
        "description": "Returns product keys mapped to supported country codes.",
        "operationId": "listCountryProductMappings",
        "parameters": [
          {
            "name": "group",
            "in": "query",
            "description": "Group (required).",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ListCountryProductMappingsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          }
        },
        "x-v2-response-schema": "ListCountryProductMappingsResponse"
      }
    },
    "/products/category-mappings": {
      "get": {
        "tags": [
          "APIs"
        ],
        "summary": "List product category key mappings including denied products",
        "description": "Returns product categories mapped to product keys.",
        "operationId": "listCategoryKeyMappings",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ListCategoryKeyMappingsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          }
        },
        "x-v2-response-schema": "ListCategoryKeyMappingsResponse"
      }
    },
    "/products/category-mappings/active": {
      "get": {
        "tags": [
          "APIs"
        ],
        "summary": "List active product category key mappings",
        "description": "Returns product categories mapped to product keys.",
        "operationId": "listActiveCategoryKeyMappings",
        "parameters": [
          {
            "name": "includeAddDeniedProducts",
            "in": "query",
            "description": "Include Add Denied Products (required).",
            "required": false,
            "schema": {
              "type": "boolean"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/ListActiveCategoryKeyMappingsResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          }
        },
        "x-v2-response-schema": "ListActiveCategoryKeyMappingsResponse"
      }
    },
    "/products/availability": {
      "get": {
        "tags": [
          "APIs"
        ],
        "summary": "Check product availability for a domain",
        "description": "Indicates whether the product is available for the specified domain.",
        "operationId": "checkProductAvailability",
        "parameters": [
          {
            "name": "domainName",
            "in": "query",
            "description": "Domain name for which the service availability is to be checked",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "productKey",
            "in": "query",
            "description": "Product key associated with the product",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/CheckProductAvailabilityResponse"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          },
          "503": {
            "description": "Service Unavailable",
            "content": {
              "*/*": {
                "schema": {
                  "$ref": "#/components/schemas/GenericResponse"
                }
              }
            }
          }
        },
        "x-v2-response-schema": "CheckProductAvailabilityResponse"
      }
    }
  },
  "components": {
    "schemas": {
      "GenericResponse": {
        "type": "object",
        "properties": {
          "message": {
            "type": "string"
          },
          "path": {
            "type": "string"
          },
          "status": {
            "type": "integer",
            "format": "int32"
          },
          "customLogMessage": {}
        }
      },
      "MoveWebsiteProductRequest": {
        "type": "object",
        "description": "Moves all products from one customer to other customer.",
        "properties": {
          "domainName": {
            "type": "string",
            "description": "Domain name that needs to be moved",
            "minLength": 1
          },
          "existingCustomerId": {
            "type": "integer",
            "format": "int32",
            "description": "Existing Customer ID from which the products are to be transferred"
          },
          "newCustomerId": {
            "type": "integer",
            "format": "int32",
            "description": "New Customer ID to which the products are to be transferred"
          },
          "defaultContact": {
            "type": "string",
            "description": "Value to indicate whether the old Contact has to be retained or to use the Default Contact of the new Customer. \nValid entries are oldcontact or default . \nNote In case of a .CN domain name, the Default Contact of the new Customer cannot be associated with the domain name and the old Contact has to be retained. \nHence, oldcontact will be the only valid value. Note In case of a .ES domain name, the Default Contact of the new Customer cannot be associated with the domain name and the old Contact has to be retained. \nHence, oldcontact will be the only valid value.",
            "minLength": 1
          }
        },
        "required": [
          "defaultContact",
          "domainName",
          "existingCustomerId",
          "newCustomerId"
        ]
      },
      "FreeEmailConfigEntryDto": {
        "type": "object",
        "description": "Free email configuration for a product.",
        "properties": {
          "productKey": {
            "type": "string",
            "description": "Product key"
          },
          "freeEmailTenure": {
            "type": "string",
            "description": "Free email tenure"
          }
        }
      },
      "ProductDetailDto": {
        "type": "object",
        "description": "Metadata for an active product.",
        "properties": {
          "productKey": {
            "type": "string",
            "description": "Product key"
          },
          "tldList": {
            "type": "array",
            "description": "tld List",
            "items": {
              "type": "string"
            }
          },
          "minRegistrationYear": {
            "type": "string",
            "description": "min Registration Year"
          },
          "maxRegistrationYear": {
            "type": "string",
            "description": "max Registration Year"
          },
          "minNs": {
            "type": "string",
            "description": "min Ns"
          },
          "maxNs": {
            "type": "string",
            "description": "max Ns"
          },
          "registrantContactGroup": {
            "type": "string",
            "description": "registrant Contact Group"
          },
          "adminContactGroup": {
            "type": "string",
            "description": "admin Contact Group"
          },
          "techContactGroup": {
            "type": "string",
            "description": "tech Contact Group"
          },
          "billingContactGroup": {
            "type": "string",
            "description": "billing Contact Group"
          },
          "isRenewAllowed": {
            "type": "boolean",
            "description": "is Renew Allowed"
          },
          "isTransferAllowed": {
            "type": "boolean",
            "description": "is Transfer Allowed"
          },
          "isTransferSecretRequired": {
            "type": "boolean",
            "description": "is Transfer Secret Required"
          },
          "isPrivacyProtectionAllowed": {
            "type": "boolean",
            "description": "is Privacy Protection Allowed"
          },
          "hasPollMsgSupport": {
            "type": "boolean",
            "description": "has Poll Msg Support"
          },
          "isBulkAllowed": {
            "type": "boolean",
            "description": "is Bulk Allowed"
          },
          "maxDomainLength": {
            "type": "string",
            "description": "max Domain Length"
          },
          "minDomainLength": {
            "type": "string",
            "description": "min Domain Length"
          },
          "minRenewalPeriod": {
            "type": "string",
            "description": "min Renewal Period"
          },
          "maxRenewalPeriod": {
            "type": "string",
            "description": "max Renewal Period"
          },
          "hasStorefrontSupport": {
            "type": "boolean",
            "description": "has Storefront Support"
          },
          "isParkingAllowed": {
            "type": "boolean",
            "description": "is Parking Allowed"
          },
          "isRestoreAutomated": {
            "type": "boolean",
            "description": "is Restore Automated"
          },
          "registryAddGracePeriod": {
            "type": "string",
            "description": "registry Add Grace Period"
          },
          "registryAutorenewGracePeriod": {
            "type": "string",
            "description": "registry Autorenew Grace Period"
          },
          "redemptionGracePeriod": {
            "type": "string",
            "description": "redemption Grace Period"
          },
          "maxDomainSecretLength": {
            "type": "string",
            "description": "max Domain Secret Length"
          },
          "minDomainSecretLength": {
            "type": "string",
            "description": "min Domain Secret Length"
          },
          "dnssecDataSupported": {
            "type": "string",
            "description": "dnssec Data Supported"
          },
          "isLockAllowed": {
            "type": "boolean",
            "description": "is Lock Allowed"
          },
          "registry": {
            "type": "string",
            "description": "registry"
          }
        }
      },
      "ProductCountryMappingEntryDto": {
        "type": "object",
        "description": "Product to country code mapping entry.",
        "properties": {
          "productKey": {
            "type": "string",
            "description": "Product key"
          },
          "countryCodes": {
            "type": "array",
            "description": "Country codes for the product",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CategoryKeyMappingDto": {
        "type": "object",
        "description": "Product category to product key mapping.",
        "properties": {
          "productKeys": {
            "type": "array",
            "description": "Product keys in the category",
            "items": {
              "type": "string"
            }
          },
          "domainProductTlds": {
            "type": "array",
            "description": "Domain product TLD mappings",
            "items": {
              "$ref": "#/components/schemas/ProductTldMappingDto"
            }
          }
        }
      },
      "CategoryMappingEntryDto": {
        "type": "object",
        "description": "Product category mapping entry.",
        "properties": {
          "categoryName": {
            "type": "string",
            "description": "Category name"
          },
          "mapping": {
            "$ref": "#/components/schemas/CategoryKeyMappingDto",
            "description": "Category key mapping"
          }
        }
      },
      "ProductTldMappingDto": {
        "type": "object",
        "description": "Domain product key to supported TLD list.",
        "properties": {
          "productKey": {
            "type": "string",
            "description": "Product key"
          },
          "tldList": {
            "type": "array",
            "description": "Supported top-level domains",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "CheckProductAvailabilityResponse": {
        "type": "object",
        "description": "Indicates whether the product is available for the specified domain.",
        "properties": {
          "available": {
            "type": "boolean",
            "description": "Whether the product is available"
          },
          "status": {
            "type": "string",
            "description": "Operation status"
          },
          "message": {
            "type": "string",
            "description": "Status message"
          }
        }
      },
      "ListActiveCategoryKeyMappingsResponse": {
        "type": "object",
        "description": "Returns product categories mapped to product keys.",
        "properties": {
          "categories": {
            "type": "array",
            "description": "Product categories mapped to product keys",
            "items": {
              "$ref": "#/components/schemas/CategoryMappingEntryDto"
            }
          },
          "status": {
            "type": "string",
            "description": "Operation status"
          },
          "message": {
            "type": "string",
            "description": "Status message"
          }
        }
      },
      "ListCategoryKeyMappingsResponse": {
        "type": "object",
        "description": "Returns product categories mapped to product keys.",
        "properties": {
          "categories": {
            "type": "array",
            "description": "Product categories mapped to product keys",
            "items": {
              "$ref": "#/components/schemas/CategoryMappingEntryDto"
            }
          },
          "status": {
            "type": "string",
            "description": "Operation status"
          },
          "message": {
            "type": "string",
            "description": "Status message"
          }
        }
      },
      "ListCountryProductMappingsResponse": {
        "type": "object",
        "description": "Returns product keys mapped to supported country codes.",
        "properties": {
          "productCountryMappings": {
            "type": "array",
            "description": "Product keys mapped to country codes",
            "items": {
              "$ref": "#/components/schemas/ProductCountryMappingEntryDto"
            }
          },
          "status": {
            "type": "string",
            "description": "Operation status"
          },
          "message": {
            "type": "string",
            "description": "Status message"
          }
        }
      },
      "ListProductDetailsResponse": {
        "type": "object",
        "description": "Returns active product details keyed by product identifier.",
        "properties": {
          "products": {
            "type": "array",
            "description": "Active products",
            "items": {
              "$ref": "#/components/schemas/ProductDetailDto"
            }
          },
          "freeServices": {
            "type": "array",
            "description": "Free services opted by the reseller",
            "items": {
              "type": "string"
            }
          },
          "freeEmailConfigs": {
            "type": "array",
            "description": "Free email configuration entries",
            "items": {
              "$ref": "#/components/schemas/FreeEmailConfigEntryDto"
            }
          },
          "domainAddons": {
            "type": "array",
            "description": "Domain add-on product keys available",
            "items": {
              "type": "string"
            }
          },
          "status": {
            "type": "string",
            "description": "Operation status"
          },
          "message": {
            "type": "string",
            "description": "Status message"
          }
        }
      },
      "MoveWebsiteProductResponse": {
        "type": "object",
        "description": "Returns the result of moving website products between customers, including action tracking metadata.",
        "properties": {
          "actionStatus": {
            "type": "string",
            "description": "Action status"
          },
          "actionStatusDesc": {
            "type": "string",
            "description": "Action status description"
          },
          "actionTypeDesc": {
            "type": "string",
            "description": "Action type description"
          },
          "entityId": {
            "type": "string",
            "description": "Entity identifier"
          },
          "eaqId": {
            "type": "string",
            "description": "Action queue identifier"
          },
          "actionType": {
            "type": "string",
            "description": "Action type"
          },
          "description": {
            "type": "string",
            "description": "Operation description"
          },
          "status": {
            "type": "string",
            "description": "Operation status"
          },
          "message": {
            "type": "string",
            "description": "Status message"
          }
        }
      }
    },
    "securitySchemes": {
      "apiKeyAuth": {
        "type": "apiKey",
        "description": "Reseller API key. In your own requests, send the full header value: Authorization: ApiKey YOUR_API_KEY",
        "name": "Authorization",
        "in": "header"
      },
      "userIdHeader": {
        "type": "apiKey",
        "description": "Reseller user ID",
        "name": "X-User-Id",
        "in": "header"
      }
    }
  },
  "tags": [
    {
      "name": "APIs"
    }
  ]
}