{
  "lexicon": 1,
  "id": "com.atproto.temp.checkHandleAvailability",
  "defs": {
    "main": {
      "type": "query",
      "description": "Checks whether the provided handle is available. If the handle is not available, available suggestions will be returned. Optional inputs will be used to generate suggestions.",
      "parameters": {
        "type": "params",
        "required": ["handle"],
        "properties": {
          "handle": {
            "type": "string",
            "format": "handle",
            "description": "Tentative handle. Will be checked for availability or used to build handle suggestions."
          },
          "email": {
            "type": "string",
            "description": "User-provided email. Might be used to build handle suggestions."
          },
          "birthDate": {
            "type": "string",
            "format": "datetime",
            "description": "User-provided birth date. Might be used to build handle suggestions."
          }
        }
      },
      "output": {
        "encoding": "application/json",
        "schema": {
          "type": "object",
          "required": ["handle", "result"],
          "properties": {
            "handle": {
              "type": "string",
              "format": "handle",
              "description": "Echo of the input handle."
            },
            "result": {
              "type": "union",
              "refs": ["#resultAvailable", "#resultUnavailable"]
            }
          }
        }
      },
      "errors": [
        {
          "name": "InvalidEmail",
          "description": "An invalid email was provided."
        }
      ]
    },
    "resultAvailable": {
      "type": "object",
      "description": "Indicates the provided handle is available.",
      "properties": {}
    },
    "resultUnavailable": {
      "type": "object",
      "description": "Indicates the provided handle is unavailable and gives suggestions of available handles.",
      "required": ["suggestions"],
      "properties": {
        "suggestions": {
          "type": "array",
          "description": "List of suggested handles based on the provided inputs.",
          "items": {
            "type": "ref",
            "ref": "#suggestion"
          }
        }
      }
    },
    "suggestion": {
      "type": "object",
      "required": ["handle", "method"],
      "properties": {
        "handle": {
          "type": "string",
          "format": "handle"
        },
        "method": {
          "type": "string",
          "description": "Method used to build this suggestion. Should be considered opaque to clients. Can be used for metrics."
        }
      }
    }
  }
}
