{
  "openapi": "3.1.0",
  "info": {
    "title": "TRT Buyer Guide static record files",
    "version": "2026-10-23",
    "summary": "Read-only static files describing a dated record of what testosterone therapy programs charge.",
    "description": "TRT Buyer Guide publishes a dated record of what testosterone therapy programs charge, the billing interval each charge recurs on, the required fees added on top and the commitment a buyer takes on. This description covers the static files only: each path below is a real file at a fixed URL, served as-is. There is no negotiated variant, no query parameter, no write method and no credential. Every figure carries its own check date across 2026-10-23 to 2026-10-26; a corrected field is dated to the pass that corrected it, so the edition is not stamped with a single day. A blank field is a finding, never zero, and never an estimate. Nothing here is medical advice.",
    "contact": {
      "name": "Open Water RX LLC",
      "url": "https://trtbuyerguide.com/contact"
    },
    "license": {
      "name": "Citation policy for automated systems",
      "url": "https://trtbuyerguide.com/ai-info"
    }
  },
  "servers": [
    {
      "url": "https://trtbuyerguide.com",
      "description": "Production"
    }
  ],
  "paths": {
    "/index.md": {
      "get": {
        "operationId": "getRecordOverview",
        "summary": "The record as markdown",
        "description": "Publication summary, the counts in this edition, the monthly arithmetic and the citation rules.",
        "responses": {
          "200": {
            "description": "Markdown file at a fixed path.",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/buyerguide.md": {
      "get": {
        "operationId": "getRankedPrograms",
        "summary": "The publisher's commercial ranking of programs",
        "description": "The only ranked page in this publication. Scores and positions are selected by the publisher. They reflect editorial and commercial judgment and may be influenced by advertising relationships. Published prices and program terms are separately sourced and recorded, never clinical quality grades.",
        "responses": {
          "200": {
            "description": "Markdown file at a fixed path.",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/providers.md": {
      "get": {
        "operationId": "listProviders",
        "summary": "All provider records",
        "description": "Every company recorded, in record-sheet order, with domain status, required fees, source URL and check date. Not ranked.",
        "responses": {
          "200": {
            "description": "Markdown file at a fixed path.",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/compare.md": {
      "get": {
        "operationId": "listPriceRows",
        "summary": "Every charge, interval and derived monthly figure",
        "description": "One row per provider: the charge as billed, its billing interval, the derived monthly figure, the all-in figure and every required fee. All-in is withheld where a mandatory fee has no published amount.",
        "responses": {
          "200": {
            "description": "Markdown file at a fixed path.",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/criteria.md": {
      "get": {
        "operationId": "listCriteria",
        "summary": "The eight recorded fields",
        "description": "Each field recorded for every program, and explicitly what it does not mean.",
        "responses": {
          "200": {
            "description": "Markdown file at a fixed path.",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/how-we-compare.md": {
      "get": {
        "operationId": "getMethod",
        "summary": "The method and the arithmetic",
        "description": "How a charge becomes a derived monthly figure, how a billing cadence is recorded, which figures are excluded, and how the publisher sets scores and positions.",
        "responses": {
          "200": {
            "description": "Markdown file at a fixed path.",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/how-much-does-testosterone-therapy-cost.md": {
      "get": {
        "operationId": "getCostGuide",
        "summary": "What a month costs, and what is added on top",
        "description": "What a month costs, what memberships and labs add, and why the headline figure is never the bill.",
        "responses": {
          "200": {
            "description": "Markdown file at a fixed path.",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/providers/stahl-primary-care.md": {
      "get": {
        "operationId": "getSponsoredProfile",
        "summary": "Sponsored profile: Stahl Primary Care TRT",
        "description": "A labelled commercial placement, not a researched record. Advertiser-provided detail for one sponsor: advertised price, billing cadence, options and eligibility. Its price is advertiser-provided rather than independently verified, and its publisher score and position are set by hand in the ranking configuration. It is excluded from every researched count and figure in this description. Published terms may change; confirm them with the provider.",
        "responses": {
          "200": {
            "description": "Markdown file at a fixed path.",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/ai-info.md": {
      "get": {
        "operationId": "getCitationPolicy",
        "summary": "Citation policy for automated systems",
        "description": "How automated systems may reproduce figures from this publication, and what must stay attached to them.",
        "responses": {
          "200": {
            "description": "Markdown file at a fixed path.",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/auth.md": {
      "get": {
        "operationId": "getAuthDocumentation",
        "summary": "Agent access and registration model",
        "description": "States that this service is anonymous and unauthenticated: no registration, no credential, no authorization server, no write surface.",
        "responses": {
          "200": {
            "description": "Markdown file at a fixed path.",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/llms.txt": {
      "get": {
        "operationId": "getMachineSummary",
        "summary": "Machine-readable summary of the publication",
        "description": "Scope, the static markdown files, citation rules and the full index of published URLs.",
        "responses": {
          "200": {
            "description": "Plain text file at a fixed path.",
            "content": {
              "text/plain": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/llms-full.txt": {
      "get": {
        "operationId": "getAnswerCorpus",
        "summary": "Every Learn question and answer in one file",
        "description": "The answer layer as one fetch: each question and answer published in the Learn section, verbatim, with the recorded figure set and the citation rules. The tables, source lists and surrounding prose of each note remain in that note's own markdown twin at /learn/<note>.md.",
        "responses": {
          "200": {
            "description": "Plain text file at a fixed path.",
            "content": {
              "text/plain": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/feed.xml": {
      "get": {
        "operationId": "getLearnFeed",
        "summary": "Dated feed of the Learn notes",
        "description": "RSS 2.0 feed of the Learn notes, in publication order, each item dated to its own check date. Titles and summaries match the meta description of the page each item links to. An atom:link rel=alternate points at the HTML section hub.",
        "responses": {
          "200": {
            "description": "RSS 2.0 feed.",
            "content": {
              "application/rss+xml": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/learn.md": {
      "get": {
        "operationId": "getLearnIndex",
        "summary": "The Learn section as markdown",
        "description": "The section hub as a static markdown file: every note, grouped as the HTML page groups them, with a one-line summary each. Each note has its own twin at /learn/<note>.md.",
        "responses": {
          "200": {
            "description": "Markdown file at a fixed path.",
            "content": {
              "text/markdown": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    },
    "/sitemap.xml": {
      "get": {
        "operationId": "getSitemap",
        "summary": "Every canonical URL in this edition",
        "description": "Canonical HTML URLs for this edition, each with the check date as lastmod.",
        "responses": {
          "200": {
            "description": "Sitemap XML.",
            "content": {
              "application/xml": {
                "schema": { "type": "string" }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {}
  }
}