{
  "openapi": "3.0.3",
  "info": {
    "title": "ATT APIs based on TMF674 (v4.0.0) - Geographic Site",
    "version": "v1.0.21"
  },
  "tags": [
    {
      "name": "geographicSite"
    }
  ],
  "paths": {
    "/healthz": {
      "get": {
        "description": "Health Check",
        "security": [
          {
            "ATT-Azure-AD-JWT-Token": []
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "example": {
                    "application_name": "tmf674-geographic-site-management",
                    "message": "Application up and running"
                  }
                }
              }
            }
          }
        }
      }
    },
    "/geographicSite": {
      "get": {
        "operationId": "listGeographicSite",
        "description": "This operation list or find Market Service Area entities\n\nValid query parameter combinations are: `zipCode` + `category`; `internationalPostalCode` + `category`; `city` + `state` + `category`; `marketCode` + `category`; `npa` + `category`. Parameters belonging to alternative combinations are optional in the OpenAPI parameter list; the API applies the combination rules at runtime.",
        "summary": "Find Market Service Areas",
        "tags": [
          "geographicSite"
        ],
        "security": [
          {
            "ATT-Azure-AD-JWT-Token": []
          }
        ],
        "parameters": [
          {
            "name": "X-ATT-CorrelationId",
            "description": "Recommended format is 32 hexadecimal characters GUID (XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX).",
            "in": "header",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "zipCode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 5,
              "maxLength": 5,
              "pattern": "\\d{5}"
            },
            "description": "USA domestic zip code."
          },
          {
            "name": "category",
            "in": "query",
            "required": true,
            "schema": {
              "enum": [
                "Activation",
                "Portin",
                "AutoAssign"
              ],
              "type": "string"
            },
            "description": "The type of action the market and/or service area is being requested for. Values are Activation or Portin. Select Portin if porting in a number from another carrier. AutoAssign enum shoould only be used by Jasper."
          },
          {
            "name": "marketType",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "TLG",
                "CPW",
                "Both"
              ],
              "type": "string"
            },
            "description": "Market type can assume values TLG or CPW or Both. Default is Both."
          },
          {
            "name": "limit",
            "in": "query",
            "required": false,
            "schema": {
              "type": "number",
              "minimum": 1,
              "maximum": 10000
            },
            "description": "Use to limit results entries in response payload."
          },
          {
            "name": "@type",
            "in": "query",
            "required": false,
            "schema": {
              "enum": [
                "MarketServiceArea"
              ],
              "type": "string"
            },
            "description": "Set to string MarketServiceArea"
          },
          {
            "name": "internationalPostalCode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 5,
              "maxLength": 10,
              "pattern": "([A-Z0-9 ]){5,10}"
            },
            "description": "International postal code. Defined by Universal Postal Union (standardized in ISO 19160-4:2023)."
          },
          {
            "name": "city",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The city name must be spelled correctly. There is no 'closest match' capability."
          },
          {
            "name": "state",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string"
            },
            "description": "The state abbreviation. See Use Cases documentation to know supported states."
          },
          {
            "name": "marketCode",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 3,
              "maxLength": 3
            },
            "description": "Market code."
          },
          {
            "name": "npa",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 3,
              "maxLength": 3,
              "pattern": "\\d{3}"
            },
            "description": "NPA"
          },
          {
            "name": "nxx",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 3,
              "maxLength": 3,
              "pattern": "\\d{3}"
            },
            "description": "NXX"
          },
          {
            "name": "line",
            "in": "query",
            "required": false,
            "schema": {
              "type": "string",
              "minLength": 4,
              "maxLength": 4,
              "pattern": "\\d{4}"
            },
            "description": "Line"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "headers": {
              "X-Result-Count": {
                "description": "Actual number of items returned in the response body",
                "schema": {
                  "type": "integer"
                }
              },
              "X-Total-Count": {
                "description": "Total number of items matching criteria",
                "schema": {
                  "type": "integer"
                }
              },
              "x-att-ConversationId": {
                "description": "Echoes back the same value provided in the request by the client, if one was provided by the client. Otherwise, the server will generate a GUID and provide that to the client.",
                "schema": {
                  "type": "string",
                  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
                }
              },
              "x-att-CorrelationId": {
                "description": "Echoes back the value provided in the request by the client, only if one was provided by the client.",
                "schema": {
                  "type": "string"
                }
              },
              "x-att-TransactionId": {
                "description": "A GUID which uniquely identifies a message returned by the server. This must not be re-used. Each downstream system used during the business transaction or process flow will have their own, unique identifier.",
                "schema": {
                  "type": "string",
                  "pattern": "^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$"
                }
              },
              "Content-Length": {
                "description": "Matches the count of bytes in the response body so the client can know whether it has read the correct number of bytes.",
                "schema": {
                  "type": "integer"
                }
              }
            },
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MarketServiceArea"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MarketServiceArea"
                  }
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "code": "400",
                  "reason": "Required header 'X-ATT-ConversationId' not specified",
                  "message": "Required header 'X-ATT-ConversationId' not specified",
                  "status": "400-BAD_REQUEST-TMF689"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "code": "401",
                  "reason": "Unauthorized",
                  "message": "Unauthorized",
                  "status": "401-UNAUTHORIZED-TMF689"
                }
              }
            }
          },
          "403": {
            "description": "Forbidden",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "code": "403",
                  "reason": "Forbidden",
                  "message": "Forbidden",
                  "status": "403-FORBIDDEN-TMF689"
                }
              }
            }
          },
          "404": {
            "description": "Not Found",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "code": "404",
                  "reason": "Requested resource no found.",
                  "message": "Requested resource no found.",
                  "status": "404-NOT_FOUND-TMF689"
                }
              }
            }
          },
          "405": {
            "description": "Method Not allowed",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "code": "405",
                  "reason": "HTTP Method get not allowed",
                  "message": "HTTP Method get not allowed",
                  "status": "405-METHOD_NOT_ALLOWED-TMF689"
                }
              }
            }
          },
          "406": {
            "description": "Unacceptable request body.",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "example": {
                    "code": "406",
                    "reason": "Not Acceptable",
                    "error": "Not Acceptable",
                    "status": "406-UNACCEPTABLE-TMF689"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "example": {
                    "code": "406",
                    "reason": "Not Acceptable",
                    "error": "Not Acceptable",
                    "status": "406-UNACCEPTABLE-TMF689"
                  }
                }
              }
            }
          },
          "409": {
            "description": "Conflict",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                }
              }
            }
          },
          "415": {
            "description": "Bad Content-Type header. Unsupported media type.",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "example": {
                    "code": "415",
                    "reason": "Unsupported mediaType",
                    "message": "Unsupported mediaType",
                    "status": "415-UNSUPPORTED_MEDIA_TYPE-TMF689"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "example": {
                    "code": "415",
                    "reason": "Unsupported mediaType",
                    "message": "Unsupported mediaType",
                    "status": "415-UNSUPPORTED_MEDIA_TYPE-TMF689"
                  }
                }
              }
            }
          },
          "500": {
            "description": "Internal Server Error",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "$ref": "#/components/schemas/Error"
                },
                "example": {
                  "code": "500",
                  "reason": "Internal Server Error",
                  "message": "Internal Server Error",
                  "status": "500-INTERNAL SERVER_ERROR-TMF689"
                }
              }
            }
          },
          "503": {
            "description": "Error communicating with JWKS server.",
            "content": {
              "application/json;charset=utf-8": {
                "schema": {
                  "example": {
                    "code": "503",
                    "reason": "Internal Server Error",
                    "message": "Internal Server Error",
                    "status": "503-INTERNAL SERVER_ERROR-TMF689"
                  }
                }
              },
              "application/json": {
                "schema": {
                  "example": {
                    "code": "503",
                    "reason": "Internal Server Error",
                    "message": "Internal Server Error",
                    "status": "503-INTERNAL SERVER_ERROR-TMF689"
                  }
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "MarketServiceArea": {
        "allOf": [
          {
            "$ref": "#/components/schemas/GeographicSite"
          }
        ],
        "type": "object",
        "required": [
          "AdditionalMarketInfo",
          "place"
        ],
        "properties": {
          "marketCode": {
            "description": "",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "subMarketCode": {
            "description": "",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "matchType": {
            "description": "The relationship of the service area to the location (zipcode, city/state, market) entered.  E=Exact Match; C=Closest Match",
            "enum": [
              "E",
              "C"
            ],
            "type": "string"
          },
          "technology": {
            "type": "array",
            "items": {
              "description": "The available technology for this service area",
              "type": "string",
              "pattern": "^[?-~ -%'-;=]{0,200}$"
            }
          },
          "distance": {
            "description": "The service area distance",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "legacyWirelineFootprint": {
            "description": "The legacy wireline footprint specified by zipcode (if available).",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "isLocal": {
            "description": "The service area is a local call from the Local Calling Area number supplied in the request",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "localMarketType": {
            "description": "The local market type which can be either TLG or CPW",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "name": {
            "description": "The name of the service area.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "domain": {
            "description": "",
            "enum": [
              "Activation",
              "Portin",
              "AutoAssign"
            ],
            "type": "string"
          },
          "npa": {
            "description": "Specified NPA for SubscriberNumber searches",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "AdditionalMarketInfo": {
            "type": "array",
            "maxItems": 1,
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/Location"
            }
          },
          "NumberBlockNPA": {
            "type": "array",
            "items": {
              "description": "The available number blocks for this service area.  Only the npa value will be returned.  Nxx and line will not.",
              "type": "string",
              "pattern": "^[?-~ -%'-;=]{0,200}$"
            }
          },
          "zipCodeInfo": {
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SafeString"
            }
          },
          "countyInfo": {
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SafeString"
            }
          },
          "internationalPostalCodeInfo": {
            "description": "",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SafeString"
            }
          },
          "place": {
            "type": "array",
            "maxItems": 1,
            "minItems": 1,
            "items": {
              "$ref": "#/components/schemas/PlaceRefOrValue"
            }
          },
          "relatedParty": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RelatedParty"
            }
          }
        }
      },
      "Error": {
        "description": "Used when an API throws an Error, typically with a HTTP error response-code (3xx, 4xx, 5xx)",
        "type": "object",
        "required": [
          "code",
          "reason"
        ],
        "properties": {
          "code": {
            "description": "Application relevant detail, defined in the API or a common list.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "reason": {
            "description": "Explanation of the reason for the error which can be shown to a client user.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "message": {
            "description": "More details and corrective actions related to the error which can be shown to a client user.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "status": {
            "description": "HTTP Error code extension",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "referenceError": {
            "description": "URI of documentation describing the error.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@baseType": {
            "description": "When sub-classing, this defines the super-class.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@schemaLocation": {
            "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@type": {
            "description": "When sub-classing, this defines the sub-class entity name.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "GeographicSite": {
        "type": "object",
        "properties": {
          "id": {
            "description": "Unique identifier of the place",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "href": {
            "description": "Unique reference of the place",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "code": {
            "description": "A code that may be used for some addressing schemes eg: [ANSI T1.253-1999]",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "description": {
            "description": "Text describing additional information regarding the site",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "name": {
            "description": "A user-friendly name for the place, such as [Paris Store], [London Store], [Main Home]",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "status": {
            "description": "The condition of the GeographicSite, such as planned, underConstruction, cancelled, active, inactive, former",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "calendar": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CalendarPeriod"
            }
          },
          "place": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PlaceRefOrValue"
            }
          },
          "relatedParty": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RelatedParty"
            }
          },
          "siteRelationship": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/GeographicSiteRelationship"
            }
          },
          "@baseType": {
            "description": "When sub-classing, this defines the super-class",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@schemaLocation": {
            "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@type": {
            "description": "When sub-classing, this defines the sub-class entity name",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "Location": {
        "description": "Market locations belonging to current site",
        "type": "object",
        "required": [
          "locationMarketType",
          "serviceAreaCode",
          "market"
        ],
        "properties": {
          "locationMarketType": {
            "$ref": "#/components/schemas/SafeString"
          },
          "serviceAreaCode": {
            "$ref": "#/components/schemas/SafeString"
          },
          "market": {
            "$ref": "#/components/schemas/Market"
          }
        }
      },
      "SafeString": {
        "description": "Objective is to limit the data provided to safeguard parameters.",
        "type": "string",
        "pattern": "^[?-~ -%'-;=]{0,200}$"
      },
      "PlaceRefOrValue": {
        "description": "A  place described by reference or by value linked to a specific entity. The polymorphic attributes @type, @schemaLocation & @referredType are related to the place entity and not the PlaceRefOrValue class itself",
        "type": "object",
        "required": [
          "city",
          "country"
        ],
        "properties": {
          "id": {
            "description": "Unique identifier of the place",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "href": {
            "description": "Unique reference of the place",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "name": {
            "description": "A user-friendly name for the place, such as [Paris Store], [London Store], [Main Home]",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "city": {
            "description": "City name; e.g.: COLUMBIA",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "state": {
            "description": "State name abbreviation; e.g: SC as defined by ISO 3166-2 alpha-2 standard",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "country": {
            "description": "International country code abbreviation; e.g: US, IT, FR as defined by ISO 3166-1 alpha-2 standard",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$",
            "minLength": 2,
            "maxLength": 2
          },
          "@baseType": {
            "description": "When sub-classing, this defines the super-class",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@schemaLocation": {
            "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@type": {
            "description": "When sub-classing, this defines the sub-class entity name",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@referredType": {
            "description": "The actual type of the target instance when needed for disambiguation.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "RelatedParty": {
        "description": "Related Entity reference. A related party defines party or party role linked to a specific entity.",
        "type": "object",
        "required": [
          "id",
          "@referredType"
        ],
        "properties": {
          "id": {
            "description": "Unique identifier of a related entity.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "href": {
            "description": "Reference of the related entity.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "name": {
            "description": "Name of the related entity.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "role": {
            "description": "Role played by the related party",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@baseType": {
            "description": "When sub-classing, this defines the super-class",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@schemaLocation": {
            "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@type": {
            "description": "When sub-classing, this defines the sub-class entity name",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@referredType": {
            "description": "The actual type of the target instance when needed for disambiguation.",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "CalendarPeriod": {
        "type": "object",
        "properties": {
          "day": {
            "description": "Day where the calendar status applies (e.g.: monday, mon-to-fri, weekdays, weekend, all week, ...)",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "status": {
            "description": "Indication of the availability of the site (e.g.: open)",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "timeZone": {
            "description": "Indication of the timezone applicable to the calendar information (e.g.: Paris, GMT+1)",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "hourPeriod": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HourPeriod"
            }
          },
          "@baseType": {
            "description": "When sub-classing, this defines the super-class",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@schemaLocation": {
            "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@type": {
            "description": "When sub-classing, this defines the sub-class entity name",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "GeographicSiteRelationship": {
        "type": "object",
        "required": [
          "id",
          "relationshipType"
        ],
        "properties": {
          "id": {
            "description": "Unique identifier of the related site entity within the server",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "href": {
            "description": "Reference of the related geographic site",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "relationshipType": {
            "description": "Type of relationship",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "role": {
            "description": "Role of the related site in the relationship",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "validFor": {
            "$ref": "#/components/schemas/TimePeriod"
          },
          "@baseType": {
            "description": "When sub-classing, this defines the super-class",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@schemaLocation": {
            "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@type": {
            "description": "When sub-classing, this defines the sub-class entity name",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "Market": {
        "description": "Market qualifiers definition",
        "type": "object",
        "required": [
          "billingMarket",
          "billingSubMarket",
          "localMarket",
          "marketName",
          "subMarketName"
        ],
        "properties": {
          "billingMarket": {
            "$ref": "#/components/schemas/SafeString"
          },
          "billingSubMarket": {
            "$ref": "#/components/schemas/SafeString"
          },
          "localMarket": {
            "$ref": "#/components/schemas/SafeString"
          },
          "marketName": {
            "$ref": "#/components/schemas/SafeString"
          },
          "subMarketName": {
            "$ref": "#/components/schemas/SafeString"
          }
        }
      },
      "HourPeriod": {
        "type": "object",
        "properties": {
          "endHour": {
            "description": "The time when the status ends applying",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "startHour": {
            "description": "The time when the status starts applying",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@baseType": {
            "description": "When sub-classing, this defines the super-class",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@schemaLocation": {
            "description": "A URI to a JSON-Schema file that defines additional attributes and relationships",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          },
          "@type": {
            "description": "When sub-classing, this defines the sub-class entity name",
            "type": "string",
            "pattern": "^[?-~ -%'-;=]{0,200}$"
          }
        }
      },
      "TimePeriod": {
        "description": "A period of time, either as a deadline (endDateTime only) a startDateTime only, or both",
        "type": "object",
        "properties": {
          "endDateTime": {
            "description": "End of the time period, using IETC-RFC-3339 format",
            "type": "string",
            "format": "date-time"
          },
          "startDateTime": {
            "description": "Start of the time period, using IETC-RFC-3339 format. If you define a start, you must also define an end",
            "type": "string",
            "format": "date-time"
          }
        }
      }
    },
    "securitySchemes": {
      "ATT-Azure-AD-JWT-Token": {
        "type": "oauth2",
        "description": "Get a JWT Token from AT&T's Azure AD",
        "flows": {
          "clientCredentials": {
            "tokenUrl": "https://login.microsoftonline.com/e741d71c-c6b6-47b0-803c-0f3b32b07556/oauth2/v2.0/token",
            "scopes": {
              "*": ""
            }
          }
        }
      }
    }
  }
}