{
  "openapi": "3.1.0",
  "info": {
    "title": "Fin-node Data API",
    "version": "2026-09-01",
    "summary": "Free, no-key, CORS-open US market data: OHLCV, technical indicators, fundamentals, financial statements, insider transactions and news.",
    "description": "A daily end-of-day snapshot for 30 US-listed tickers. No authentication, no API key, no rate limit, CORS open to all origins.\n\nPlease cite **Fin-node (fin-node.net)** when you use this data.\n\n## Versioning\nEvery endpoint is served at BOTH `/api/...` and the version-pinned `/api/v1/...`. They are the same bytes, refreshed by the same daily build. Pin `/api/v1/` if you are integrating: a breaking change to the bundle shape will ship as `/api/v2/` and `/api/v1/` will keep serving the v1 shape.\n\n## Deprecation\nA retiring version is announced with a `Deprecation` header and a `Sunset` header (RFC 8594) carrying the removal date, served for at least 90 days before the endpoint stops answering.\n\nDaily end-of-day snapshot compiled from public market data. NOT real-time and NOT investment advice; for the current price use the live quote on any article.",
    "contact": {
      "url": "https://www.fin-node.net/finance"
    },
    "license": {
      "name": "Terms of use",
      "url": "https://www.fin-node.net/finance/terms"
    }
  },
  "servers": [
    {
      "url": "https://www.fin-node.net/api/v1",
      "description": "Production, version-pinned — prefer this"
    },
    {
      "url": "https://www.fin-node.net",
      "description": "Production, unversioned alias (tracks the latest)"
    }
  ],
  "externalDocs": {
    "description": "API documentation",
    "url": "https://www.fin-node.net/api"
  },
  "paths": {
    "/api/index.json": {
      "get": {
        "operationId": "getManifest",
        "summary": "Covered tickers + bundle schema",
        "description": "Manifest listing every covered ticker, the bundle schema, attribution and generation time. Start here.",
        "responses": {
          "200": {
            "description": "Manifest",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Manifest"
                }
              }
            }
          },
          "404": {
            "description": "No such resource",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited by the CDN edge, not by this API",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "5XX": {
            "description": "Upstream or edge error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/news.json": {
      "get": {
        "operationId": "getNews",
        "summary": "Latest market news across all tickers",
        "responses": {
          "200": {
            "description": "News feed",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NewsFeed"
                }
              }
            }
          },
          "404": {
            "description": "No such resource",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited by the CDN edge, not by this API",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "5XX": {
            "description": "Upstream or edge error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    },
    "/api/{ticker}.json": {
      "get": {
        "operationId": "getTickerBundle",
        "summary": "Full data bundle for one ticker",
        "parameters": [
          {
            "name": "ticker",
            "in": "path",
            "required": true,
            "description": "US-listed ticker symbol, uppercase",
            "schema": {
              "type": "string",
              "enum": [
                "NVDA",
                "AAPL",
                "GOOGL",
                "MSFT",
                "META",
                "SPCX",
                "TSLA",
                "AMZN",
                "TSM",
                "MU",
                "JPM",
                "NFLX",
                "WBD",
                "PSKY",
                "GS",
                "BAC",
                "GOOG",
                "BRK.A",
                "PYPL",
                "BABA",
                "AVGO",
                "INTC",
                "MS",
                "AMD",
                "DIS",
                "IBM",
                "BLK",
                "SHEL",
                "LMT",
                "TM"
              ]
            },
            "example": "NVDA"
          }
        ],
        "responses": {
          "200": {
            "description": "Ticker bundle",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Bundle"
                }
              }
            }
          },
          "404": {
            "description": "Ticker not covered",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          },
          "429": {
            "description": "Rate limited by the CDN edge, not by this API",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            },
            "headers": {
              "Retry-After": {
                "description": "Seconds to wait before retrying",
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "5XX": {
            "description": "Upstream or edge error",
            "content": {
              "application/problem+json": {
                "schema": {
                  "$ref": "#/components/schemas/Problem"
                }
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "Problem": {
        "type": "object",
        "description": "RFC 9457 problem details.",
        "required": [
          "type",
          "title",
          "status"
        ],
        "properties": {
          "type": {
            "type": "string",
            "format": "uri",
            "description": "Stable URI identifying the error class.",
            "example": "https://www.fin-node.net/api/errors/not-found"
          },
          "title": {
            "type": "string",
            "example": "Ticker not covered"
          },
          "status": {
            "type": "integer",
            "example": 404
          },
          "detail": {
            "type": "string",
            "description": "Human-readable explanation for this occurrence."
          },
          "instance": {
            "type": "string",
            "format": "uri",
            "description": "The path that produced the error."
          },
          "code": {
            "type": "string",
            "description": "Machine-readable error code.",
            "example": "ticker_not_covered"
          },
          "hint": {
            "type": "string",
            "description": "How to recover — e.g. fetch /api/index.json for the covered list."
          }
        }
      },
      "Manifest": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string"
          },
          "generated": {
            "type": "string",
            "format": "date-time"
          },
          "count": {
            "type": "integer"
          },
          "tickers": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "attribution": {
            "type": "string"
          },
          "disclaimer": {
            "type": "string"
          }
        }
      },
      "NewsFeed": {
        "type": "object",
        "properties": {
          "generated": {
            "type": "string",
            "format": "date-time"
          },
          "news": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NewsItem"
            }
          }
        }
      },
      "NewsItem": {
        "type": "object",
        "properties": {
          "date": {
            "type": "string"
          },
          "headline": {
            "type": "string"
          },
          "url": {
            "type": "string",
            "format": "uri"
          },
          "tickers": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "Price": {
        "type": "object",
        "properties": {
          "Date": {
            "type": "string",
            "format": "date"
          },
          "Open": {
            "type": "number"
          },
          "High": {
            "type": "number"
          },
          "Low": {
            "type": "number"
          },
          "Close": {
            "type": "number"
          },
          "Volume": {
            "type": "number"
          }
        }
      },
      "Bundle": {
        "type": "object",
        "properties": {
          "symbol": {
            "type": "string"
          },
          "updated": {
            "type": "string",
            "format": "date-time"
          },
          "disclaimer": {
            "type": "string"
          },
          "prices": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Price"
            },
            "description": "Daily OHLCV"
          },
          "indicators": {
            "type": "object",
            "description": "name -> [{date, value}] for rsi, close_50_sma, close_200_sma, close_10_ema, macd, macds, macdh, boll_ub, boll, boll_lb, atr, vwma"
          },
          "fundamentals": {
            "type": "object",
            "description": "metric -> value"
          },
          "statements": {
            "type": "object",
            "description": "balance_sheet, cash_flow, income_statement"
          },
          "insider": {
            "type": "array",
            "items": {
              "type": "object"
            },
            "description": "Insider-transaction rows"
          },
          "news": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/NewsItem"
            }
          }
        }
      }
    }
  }
}