{
  "openapi": "3.1.0",
  "info": {
    "title": "FrontierPicks",
    "version": "1.0.0",
    "description": "FrontierPicks is a static research publisher. There is no HTTP API surface — every resource is a versioned URL that returns prerendered HTML + structured data. This document is a pointer for agents.",
    "contact": { "email": "hello@frontierpicks.com", "url": "https://frontierpicks.com" },
    "license": { "name": "Content © FrontierPicks, research/reference use, attribution requested" }
  },
  "servers": [{ "url": "https://frontierpicks.com" }],
  "x-discovery": {
    "llms_txt":      "https://frontierpicks.com/llms.txt",
    "llms_full_txt": "https://frontierpicks.com/llms-full.txt",
    "agent_tools":   "https://frontierpicks.com/agent-tools.json",
    "webmcp":        "https://frontierpicks.com/.well-known/webmcp.json",
    "feed_json":     "https://frontierpicks.com/feed.json",
    "feed_rss":      "https://frontierpicks.com/rss.xml",
    "sitemap":       "https://frontierpicks.com/sitemap.xml"
  },
  "paths": {
    "/dossiers/": {
      "get": {
        "summary": "List all dossiers",
        "responses": { "200": { "description": "HTML index" } }
      }
    },
    "/dossiers/{ticker}/": {
      "get": {
        "summary": "Read a per-ticker dossier",
        "parameters": [
          { "name": "ticker", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[A-Z]{1,5}([.-][A-Z]{1,2})?$" } }
        ],
        "responses": { "200": { "description": "HTML + JSON-LD Article" } }
      }
    },
    "/dossiers/{ticker}.json": {
      "get": {
        "summary": "Read a per-ticker dossier as JSON",
        "parameters": [
          { "name": "ticker", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^[A-Z]{1,5}([.-][A-Z]{1,2})?$" } }
        ],
        "responses": { "200": { "description": "application/json (schema: https://frontierpicks.com/schemas/dossier.v1.json)" } }
      }
    },
    "/journal/": {
      "get": {
        "summary": "List dated journal entries",
        "responses": { "200": { "description": "HTML index" } }
      }
    },
    "/journal/{date}/": {
      "get": {
        "summary": "Read a single journal entry",
        "parameters": [
          { "name": "date", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" } }
        ],
        "responses": { "200": { "description": "HTML + JSON-LD Article" } }
      }
    },
    "/journal/{date}.json": {
      "get": {
        "summary": "Read a single journal entry as JSON",
        "parameters": [
          { "name": "date", "in": "path", "required": true, "schema": { "type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$" } }
        ],
        "responses": { "200": { "description": "application/json (schema: https://frontierpicks.com/schemas/journal.v1.json)" } }
      }
    },
    "/now.json":          { "get": { "summary": "Live market snapshot as JSON: regime call (VIX, breadth, S&P vs trend), momentum top movers, latest changes. Non-monetary.", "responses": { "200": { "description": "application/json" } } } },
    "/macro.json":        { "get": { "summary": "Macro regime dashboard as JSON: the regime call, VIX, breadth (share + counts), S&P 500 close and distance vs its 200-day EMA. Non-monetary.", "responses": { "200": { "description": "application/json" } } } },
    "/hot.json":          { "get": { "summary": "Live momentum board as JSON: the strongest US names by 3-month momentum and acceleration, with sector and dossier coverage. Non-monetary.", "responses": { "200": { "description": "application/json" } } } },
    "/latest.json":       { "get": { "summary": "Change feed as JSON: every new/refreshed dossier, conviction move, resolved thesis, journal entry and momentum entrant over the last 30 days. Non-monetary.", "responses": { "200": { "description": "application/json" } } } },
    "/calendar.json":     { "get": { "summary": "Catalyst calendar as JSON: every dated event the model is watching, grouped this week / next week / later, plus recently passed. Non-monetary.", "responses": { "200": { "description": "application/json" } } } },
    "/themes/motion.json": { "get": { "summary": "Emergent-theme status board as JSON: accelerating / maturing / saturated clusters with the names in each and the model's rationale. Non-monetary.", "responses": { "200": { "description": "application/json" } } } },
    "/track-record.json": { "get": { "summary": "The falsifiable calibration record as JSON: open commitments + Brier-scored resolved outcomes. Non-monetary.", "responses": { "200": { "description": "application/json" } } } },
    "/macro/":            { "get": { "summary": "Weekly macro view", "responses": { "200": { "description": "HTML" } } } },
    "/watchlist/":        { "get": { "summary": "Names under research", "responses": { "200": { "description": "HTML" } } } },
    "/sector-rotation/":  { "get": { "summary": "Weekly sector flow read", "responses": { "200": { "description": "HTML" } } } },
    "/methodology/":      { "get": { "summary": "Pipeline + archetype documentation", "responses": { "200": { "description": "HTML" } } } }
  }
}
