{
  "openapi": "3.1.1",
  "info": {
    "title": "ToxFinder API",
    "description": "Published cosmetic injectable (Botox, Dysport, Xeomin, Jeuveau, Daxxify, Letybo) prices from US clinics, normalized to a price per Botox-equivalent unit and traced to the page each came from. Read-only, no authentication, rate limited per caller. Documentation: https://toxfinder.com/agents/",
    "version": "1.0.0"
  },
  "servers": [
    {
      "url": "https://toxfinder.com/api"
    }
  ],
  "paths": {
    "/health": {
      "get": {
        "tags": [
          "Upkeep.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/mcp/server-card": {
      "get": {
        "tags": [
          "Upkeep.Api"
        ],
        "responses": {
          "200": {
            "description": "OK"
          }
        }
      }
    },
    "/v1": {
      "get": {
        "tags": [
          "ToxFinder v1"
        ],
        "summary": "Where everything is",
        "description": "Links to every route, the export's generation time and the conversion model in force.",
        "operationId": "GetIndex",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ApiIndexDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/markets": {
      "get": {
        "tags": [
          "ToxFinder v1"
        ],
        "summary": "Every launched market with its median",
        "description": "Markets are metros keyed like `boston`, `dfw` or `new_orleans`. Medians are USD per Botox-equivalent unit.",
        "operationId": "ListMarkets",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketListDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/markets/compare": {
      "get": {
        "tags": [
          "ToxFinder v1"
        ],
        "summary": "Compare two to six markets",
        "description": "`markets` is comma-separated or repeated. Deltas are relative to the first market named.",
        "operationId": "CompareMarkets",
        "parameters": [
          {
            "name": "markets",
            "in": "query",
            "schema": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketComparisonDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/markets/{market}": {
      "get": {
        "tags": [
          "ToxFinder v1"
        ],
        "summary": "One market's distribution, facets, coverage and freshness",
        "operationId": "GetMarket",
        "parameters": [
          {
            "name": "market",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MarketDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/clinics": {
      "get": {
        "tags": [
          "ToxFinder v1"
        ],
        "summary": "Search clinics with deterministic filters",
        "description": "Price filters apply to the normalized headline (USD per Botox-equivalent unit). `basis_source=stated` restricts to standing rates published by the clinic. Give `latitude`/`longitude`, or `near` as a market key or `City, ST`, for a radius search (default 25 miles). Sorts: price, distance, confidence, recently_verified. Limit 1 to 100.",
        "operationId": "SearchClinics",
        "parameters": [
          {
            "name": "query",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "market",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "city",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "state",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "near",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "latitude",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
              "type": [
                "number",
                "string"
              ],
              "format": "double"
            }
          },
          {
            "name": "longitude",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
              "type": [
                "number",
                "string"
              ],
              "format": "double"
            }
          },
          {
            "name": "radius_miles",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
              "type": [
                "number",
                "string"
              ],
              "format": "double"
            }
          },
          {
            "name": "product",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "basis_source",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "min_price",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "type": [
                "number",
                "string"
              ],
              "format": "double"
            }
          },
          {
            "name": "max_price",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
              "type": [
                "number",
                "string"
              ],
              "format": "double"
            }
          },
          {
            "name": "min_confidence",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
              "type": [
                "number",
                "string"
              ],
              "format": "double"
            }
          },
          {
            "name": "observed_after",
            "in": "query",
            "schema": {
              "type": "string",
              "format": "date-time"
            }
          },
          {
            "name": "sort",
            "in": "query",
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "limit",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          },
          {
            "name": "offset",
            "in": "query",
            "schema": {
              "pattern": "^-?(?:0|[1-9]\\d*)$",
              "type": [
                "integer",
                "string"
              ],
              "format": "int32"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SearchResultDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/clinics/{id}": {
      "get": {
        "tags": [
          "ToxFinder v1"
        ],
        "summary": "One clinic with every price it published and where each came from",
        "description": "`id` is the clinic's URL slug (`/new_orleans/{id}/`); the corpus provider id is also accepted.",
        "operationId": "GetClinic",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ClinicDetailDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/clinics/{id}/evidence": {
      "get": {
        "tags": [
          "ToxFinder v1"
        ],
        "summary": "Just the evidence rows for one clinic",
        "operationId": "GetClinicEvidence",
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EvidenceListDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/evidence/{observationId}": {
      "get": {
        "tags": [
          "ToxFinder v1"
        ],
        "summary": "The provenance behind one price",
        "description": "What the clinic advertised, what ToxFinder normalized it to, and the page and date it was read from.",
        "operationId": "GetEvidence",
        "parameters": [
          {
            "name": "observationId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/EvidenceDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/products": {
      "get": {
        "tags": [
          "ToxFinder v1"
        ],
        "summary": "The product vocabulary and each brand's conversion ratio",
        "operationId": "ListProducts",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ProductsDto"
                }
              }
            }
          }
        }
      }
    },
    "/v1/methodology": {
      "get": {
        "tags": [
          "ToxFinder v1"
        ],
        "summary": "Basis, confidence and normalization semantics, as data",
        "operationId": "GetMethodology",
        "responses": {
          "200": {
            "description": "OK",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MethodologyDto"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AdvertisedDto": {
        "required": [
          "text",
          "product",
          "basis",
          "basis_meaning",
          "stated",
          "price_min",
          "price_max",
          "currency",
          "area",
          "native_units",
          "is_promotional"
        ],
        "type": "object",
        "properties": {
          "text": {
            "type": "string"
          },
          "product": {
            "$ref": "#/components/schemas/ToxinProduct"
          },
          "basis": {
            "$ref": "#/components/schemas/PriceBasis"
          },
          "basis_meaning": {
            "type": "string"
          },
          "stated": {
            "type": "string"
          },
          "price_min": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "price_max": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "currency": {
            "type": "string"
          },
          "area": {
            "type": [
              "null",
              "string"
            ]
          },
          "native_units": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "is_promotional": {
            "type": "boolean"
          }
        }
      },
      "ApiIndexDto": {
        "required": [
          "name",
          "version",
          "description",
          "generated_at",
          "conversion_version",
          "markets",
          "clinics_priced",
          "links",
          "price_semantics"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "version": {
            "type": "string"
          },
          "description": {
            "type": "string"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "conversion_version": {
            "type": "string"
          },
          "markets": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "clinics_priced": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "links": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "price_semantics": {
            "type": "string"
          }
        }
      },
      "AppliedFiltersDto": {
        "required": [
          "query",
          "market",
          "city",
          "state",
          "near",
          "radius_miles",
          "product",
          "basis_source",
          "min_price",
          "max_price",
          "min_confidence",
          "observed_after",
          "sort"
        ],
        "type": "object",
        "properties": {
          "query": {
            "type": [
              "null",
              "string"
            ]
          },
          "market": {
            "type": [
              "null",
              "string"
            ]
          },
          "city": {
            "type": [
              "null",
              "string"
            ]
          },
          "state": {
            "type": [
              "null",
              "string"
            ]
          },
          "near": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/GeoPointDto"
              }
            ]
          },
          "radius_miles": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "product": {
            "oneOf": [
              {
                "type": "null"
              },
              {
                "$ref": "#/components/schemas/ToxinProduct"
              }
            ]
          },
          "basis_source": {
            "type": [
              "null",
              "string"
            ]
          },
          "min_price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "max_price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "min_confidence": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "observed_after": {
            "type": [
              "null",
              "string"
            ],
            "format": "date-time"
          },
          "sort": {
            "type": "string"
          }
        }
      },
      "CityFacetDto": {
        "required": [
          "name",
          "slug",
          "clinic_count",
          "median"
        ],
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "clinic_count": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "median": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "ClinicDetailDto": {
        "required": [
          "id",
          "provider_id",
          "name",
          "market",
          "market_display",
          "url",
          "location",
          "website",
          "phone",
          "categories",
          "pricing",
          "market_context",
          "evidence",
          "evidence_total",
          "skipped",
          "nearby",
          "conversion_version",
          "generated_at",
          "price_semantics"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "provider_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "market": {
            "type": "string"
          },
          "market_display": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "location": {
            "$ref": "#/components/schemas/LocationDto"
          },
          "website": {
            "type": [
              "null",
              "string"
            ]
          },
          "phone": {
            "type": [
              "null",
              "string"
            ]
          },
          "categories": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "pricing": {
            "$ref": "#/components/schemas/PricingDto"
          },
          "market_context": {
            "$ref": "#/components/schemas/MarketContextDto"
          },
          "evidence": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EvidenceDto"
            }
          },
          "evidence_total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "skipped": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EvidenceDto"
            }
          },
          "nearby": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NearbyDto"
            }
          },
          "conversion_version": {
            "type": "string"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "price_semantics": {
            "type": "string"
          }
        }
      },
      "ClinicRef": {
        "required": [
          "id",
          "name",
          "market",
          "url"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "market": {
            "type": "string"
          },
          "url": {
            "type": "string"
          }
        }
      },
      "ClinicSummaryDto": {
        "required": [
          "id",
          "provider_id",
          "name",
          "market",
          "market_display",
          "url",
          "location",
          "website",
          "phone",
          "pricing",
          "distance_miles"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "provider_id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "market": {
            "type": "string"
          },
          "market_display": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "location": {
            "$ref": "#/components/schemas/LocationDto"
          },
          "website": {
            "type": [
              "null",
              "string"
            ]
          },
          "phone": {
            "type": [
              "null",
              "string"
            ]
          },
          "pricing": {
            "$ref": "#/components/schemas/PricingDto"
          },
          "distance_miles": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "CoverageDto": {
        "required": [
          "providers_known",
          "clinics_priced",
          "pages_fetched",
          "distinct_prices"
        ],
        "type": "object",
        "properties": {
          "providers_known": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "clinics_priced": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "pages_fetched": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "distinct_prices": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "EvidenceDto": {
        "required": [
          "clinic",
          "advertised",
          "normalized",
          "provenance"
        ],
        "type": "object",
        "properties": {
          "clinic": {
            "$ref": "#/components/schemas/ClinicRef"
          },
          "advertised": {
            "$ref": "#/components/schemas/AdvertisedDto"
          },
          "normalized": {
            "$ref": "#/components/schemas/NormalizedDto"
          },
          "provenance": {
            "$ref": "#/components/schemas/ProvenanceDto"
          }
        }
      },
      "EvidenceListDto": {
        "required": [
          "clinic",
          "evidence",
          "evidence_total",
          "skipped",
          "conversion_version",
          "price_semantics"
        ],
        "type": "object",
        "properties": {
          "clinic": {
            "$ref": "#/components/schemas/ClinicRef"
          },
          "evidence": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EvidenceDto"
            }
          },
          "evidence_total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "skipped": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/EvidenceDto"
            }
          },
          "conversion_version": {
            "type": "string"
          },
          "price_semantics": {
            "type": "string"
          }
        }
      },
      "ExtractorKind": {
        "enum": [
          "unknown",
          "platform_adapter",
          "json_ld",
          "llm",
          "vision",
          "manual"
        ]
      },
      "FacetCountDto": {
        "required": [
          "key",
          "count",
          "meaning"
        ],
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "count": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "meaning": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "FreshnessDto": {
        "required": [
          "generated_at",
          "last_observed",
          "earliest_observed",
          "refresh_cadence"
        ],
        "type": "object",
        "properties": {
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "last_observed": {
            "type": "string",
            "format": "date-time"
          },
          "earliest_observed": {
            "type": "string",
            "format": "date-time"
          },
          "refresh_cadence": {
            "type": "string"
          }
        }
      },
      "GeoBoundsDto": {
        "required": [
          "min_lat",
          "min_lon",
          "max_lat",
          "max_lon"
        ],
        "type": "object",
        "properties": {
          "min_lat": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "min_lon": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "max_lat": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "max_lon": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "GeoPointDto": {
        "required": [
          "lat",
          "lon",
          "resolved_from"
        ],
        "type": "object",
        "properties": {
          "lat": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "lon": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "resolved_from": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "HistogramBucketDto": {
        "required": [
          "bucket",
          "count"
        ],
        "type": "object",
        "properties": {
          "bucket": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "count": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "LocationDto": {
        "required": [
          "street",
          "city",
          "state",
          "postal_code",
          "lat",
          "lon"
        ],
        "type": "object",
        "properties": {
          "street": {
            "type": [
              "null",
              "string"
            ]
          },
          "city": {
            "type": [
              "null",
              "string"
            ]
          },
          "state": {
            "type": [
              "null",
              "string"
            ]
          },
          "postal_code": {
            "type": [
              "null",
              "string"
            ]
          },
          "lat": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "lon": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "MarketComparisonDto": {
        "required": [
          "markets",
          "deltas",
          "methodology",
          "generated_at",
          "conversion_version"
        ],
        "type": "object",
        "properties": {
          "markets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MarketDto"
            }
          },
          "deltas": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MarketDeltaDto"
            }
          },
          "methodology": {
            "type": "string"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "conversion_version": {
            "type": "string"
          }
        }
      },
      "MarketContextDto": {
        "required": [
          "market",
          "market_display",
          "position",
          "of",
          "percentile",
          "p25",
          "median",
          "p75"
        ],
        "type": "object",
        "properties": {
          "market": {
            "type": "string"
          },
          "market_display": {
            "type": "string"
          },
          "position": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "of": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "percentile": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "p25": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "median": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "p75": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "MarketDeltaDto": {
        "required": [
          "market",
          "versus",
          "median_delta",
          "p25_delta",
          "p75_delta",
          "median_ratio"
        ],
        "type": "object",
        "properties": {
          "market": {
            "type": "string"
          },
          "versus": {
            "type": "string"
          },
          "median_delta": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "p25_delta": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "p75_delta": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "median_ratio": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "MarketDto": {
        "required": [
          "id",
          "slug",
          "display",
          "url",
          "clinic_count",
          "price",
          "histogram",
          "cities",
          "basis_sources",
          "products",
          "coverage",
          "freshness",
          "center",
          "bounds",
          "conversion_version",
          "price_semantics"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "slug": {
            "type": "string"
          },
          "display": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "clinic_count": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "price": {
            "$ref": "#/components/schemas/PriceDistributionDto"
          },
          "histogram": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/HistogramBucketDto"
            }
          },
          "cities": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CityFacetDto"
            }
          },
          "basis_sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FacetCountDto"
            }
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FacetCountDto"
            }
          },
          "coverage": {
            "$ref": "#/components/schemas/CoverageDto"
          },
          "freshness": {
            "$ref": "#/components/schemas/FreshnessDto"
          },
          "center": {
            "$ref": "#/components/schemas/GeoPointDto"
          },
          "bounds": {
            "$ref": "#/components/schemas/GeoBoundsDto"
          },
          "conversion_version": {
            "type": "string"
          },
          "price_semantics": {
            "type": "string"
          }
        }
      },
      "MarketListDto": {
        "required": [
          "markets",
          "all_markets",
          "clinics_priced",
          "providers_known",
          "generated_at",
          "conversion_version",
          "price_semantics"
        ],
        "type": "object",
        "properties": {
          "markets": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MarketSummaryDto"
            }
          },
          "all_markets": {
            "$ref": "#/components/schemas/PriceDistributionDto"
          },
          "clinics_priced": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "providers_known": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "conversion_version": {
            "type": "string"
          },
          "price_semantics": {
            "type": "string"
          }
        }
      },
      "MarketSummaryDto": {
        "required": [
          "id",
          "display",
          "url",
          "clinic_count",
          "median",
          "normalized_unit",
          "center"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "display": {
            "type": "string"
          },
          "url": {
            "type": "string"
          },
          "clinic_count": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "median": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "normalized_unit": {
            "type": "string"
          },
          "center": {
            "$ref": "#/components/schemas/GeoPointDto"
          }
        }
      },
      "MeaningDto": {
        "required": [
          "key",
          "meaning"
        ],
        "type": "object",
        "properties": {
          "key": {
            "type": "string"
          },
          "meaning": {
            "type": "string"
          }
        }
      },
      "MethodologyDto": {
        "required": [
          "normalized_unit",
          "conversion_version",
          "basis_sources",
          "price_basis",
          "extractors",
          "headline_rule",
          "confidence",
          "plausibility_band",
          "refresh_cadence",
          "caveats",
          "products",
          "links"
        ],
        "type": "object",
        "properties": {
          "normalized_unit": {
            "type": "string"
          },
          "conversion_version": {
            "type": "string"
          },
          "basis_sources": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MeaningDto"
            }
          },
          "price_basis": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MeaningDto"
            }
          },
          "extractors": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MeaningDto"
            }
          },
          "headline_rule": {
            "type": "string"
          },
          "confidence": {
            "type": "string"
          },
          "plausibility_band": {
            "type": "string"
          },
          "refresh_cadence": {
            "type": "string"
          },
          "caveats": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductDto"
            }
          },
          "links": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          }
        }
      },
      "NearbyDto": {
        "required": [
          "id",
          "name",
          "city",
          "url",
          "normalized_price",
          "distance_miles"
        ],
        "type": "object",
        "properties": {
          "id": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "city": {
            "type": [
              "null",
              "string"
            ]
          },
          "url": {
            "type": "string"
          },
          "normalized_price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "distance_miles": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "NormalizedDto": {
        "required": [
          "price_per_botox_equivalent_unit",
          "min",
          "max",
          "normalized_unit",
          "conversion_path",
          "assumed_units",
          "confidence",
          "in_headline",
          "conversion_version",
          "skipped_reason"
        ],
        "type": "object",
        "properties": {
          "price_per_botox_equivalent_unit": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "min": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "max": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "normalized_unit": {
            "type": "string"
          },
          "conversion_path": {
            "type": "string"
          },
          "assumed_units": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "confidence": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "in_headline": {
            "type": "boolean"
          },
          "conversion_version": {
            "type": "string"
          },
          "skipped_reason": {
            "type": [
              "null",
              "string"
            ]
          }
        }
      },
      "PagingDto": {
        "required": [
          "limit",
          "offset",
          "total",
          "has_more",
          "next_offset"
        ],
        "type": "object",
        "properties": {
          "limit": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "offset": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "total": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "has_more": {
            "type": "boolean"
          },
          "next_offset": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "null",
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "PriceBasis": {
        "enum": [
          "unknown",
          "per_unit",
          "per_area",
          "per_treatment",
          "package",
          "membership",
          "per_syringe"
        ]
      },
      "PriceDistributionDto": {
        "required": [
          "min",
          "p25",
          "median",
          "p75",
          "max",
          "normalized_unit"
        ],
        "type": "object",
        "properties": {
          "min": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "p25": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "median": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "p75": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "max": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "normalized_unit": {
            "type": "string"
          }
        }
      },
      "PricingDto": {
        "required": [
          "normalized_price",
          "normalized_unit",
          "basis_source",
          "basis_source_meaning",
          "confidence",
          "distinct_prices",
          "products",
          "has_promo",
          "last_observed",
          "market_percentile"
        ],
        "type": "object",
        "properties": {
          "normalized_price": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "normalized_unit": {
            "type": "string"
          },
          "basis_source": {
            "type": "string"
          },
          "basis_source_meaning": {
            "type": "string"
          },
          "confidence": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "distinct_prices": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ToxinProduct"
            }
          },
          "has_promo": {
            "type": "boolean"
          },
          "last_observed": {
            "type": "string",
            "format": "date-time"
          },
          "market_percentile": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          }
        }
      },
      "ProductDto": {
        "required": [
          "product",
          "label",
          "native_units_per_botox_unit",
          "attribution_confidence",
          "note"
        ],
        "type": "object",
        "properties": {
          "product": {
            "$ref": "#/components/schemas/ToxinProduct"
          },
          "label": {
            "type": "string"
          },
          "native_units_per_botox_unit": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "attribution_confidence": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?(?:[eE][+-]?\\d+)?$",
            "type": [
              "number",
              "string"
            ],
            "format": "double"
          },
          "note": {
            "type": "string"
          }
        }
      },
      "ProductsDto": {
        "required": [
          "products",
          "normalized_unit",
          "conversion_version",
          "note"
        ],
        "type": "object",
        "properties": {
          "products": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ProductDto"
            }
          },
          "normalized_unit": {
            "type": "string"
          },
          "conversion_version": {
            "type": "string"
          },
          "note": {
            "type": "string"
          }
        }
      },
      "ProvenanceDto": {
        "required": [
          "observation_id",
          "source_url",
          "observed_at",
          "extractor",
          "extractor_version",
          "corroborations"
        ],
        "type": "object",
        "properties": {
          "observation_id": {
            "type": "string"
          },
          "source_url": {
            "type": "string"
          },
          "observed_at": {
            "type": "string",
            "format": "date-time"
          },
          "extractor": {
            "$ref": "#/components/schemas/ExtractorKind"
          },
          "extractor_version": {
            "type": [
              "null",
              "string"
            ]
          },
          "corroborations": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          }
        }
      },
      "ResultSummaryDto": {
        "required": [
          "count",
          "min",
          "p25",
          "median",
          "p75",
          "max",
          "normalized_unit"
        ],
        "type": "object",
        "properties": {
          "count": {
            "pattern": "^-?(?:0|[1-9]\\d*)$",
            "type": [
              "integer",
              "string"
            ],
            "format": "int32"
          },
          "min": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "p25": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "median": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "p75": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "max": {
            "pattern": "^-?(?:0|[1-9]\\d*)(?:\\.\\d+)?$",
            "type": [
              "null",
              "number",
              "string"
            ],
            "format": "double"
          },
          "normalized_unit": {
            "type": "string"
          }
        }
      },
      "SearchResultDto": {
        "required": [
          "results",
          "paging",
          "summary",
          "applied",
          "price_semantics",
          "generated_at",
          "conversion_version"
        ],
        "type": "object",
        "properties": {
          "results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ClinicSummaryDto"
            }
          },
          "paging": {
            "$ref": "#/components/schemas/PagingDto"
          },
          "summary": {
            "$ref": "#/components/schemas/ResultSummaryDto"
          },
          "applied": {
            "$ref": "#/components/schemas/AppliedFiltersDto"
          },
          "price_semantics": {
            "type": "string"
          },
          "generated_at": {
            "type": "string",
            "format": "date-time"
          },
          "conversion_version": {
            "type": "string"
          }
        }
      },
      "ToxinProduct": {
        "enum": [
          "unknown",
          "unspecified_toxin",
          "botox",
          "dysport",
          "xeomin",
          "jeuveau",
          "daxxify",
          "letybo",
          "filler"
        ]
      }
    }
  },
  "tags": [
    {
      "name": "Upkeep.Api"
    },
    {
      "name": "ToxFinder v1"
    }
  ]
}