Equity Rank Methodology API

The methodology API from Equity Rank — 2 operation(s) for methodology.

GitHub OpenAPI

Operations 2

GET /api/methodology/backtest-summary Get Backtest Summary #
GET /api/methodology/pdf Get Methodology Pdf #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/equity-rank-com:equity-rank-com-methodology-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

equity-rank-com-methodology-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Equity Rank Com Methodology API
  version: 0.1.0
  description: 'Operations tagged methodology across 2 of this provider''s published API definitions: openapi.json, equity-rank-com-openapi.yml. Each path carries the servers of the definition it was published in.'
tags:
- name: methodology
paths:
  /api/methodology/backtest-summary:
    get:
      tags:
      - methodology
      summary: Get Backtest Summary
      description: 'Return combined signal backtest proof statistics.


        No authentication required. Designed for public viewing on /methodology.


        Checks Supabase methodology_stats for real data (real_n >= 50); if unavailable

        or insufficient, returns the hardcoded proof numbers from the synthetic simulation.'
      operationId: get_backtest_summary_api_methodology_backtest_summary_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/app__routers__methodology__BacktestSummaryResponse'
  /api/methodology/pdf:
    get:
      tags:
      - methodology
      summary: Get Methodology Pdf
      description: 'Download the Equity Rank methodology white paper as a PDF.


        No authentication required — this is a public, informational document.

        The PDF mirrors the /methodology page content with additional detail on

        valuation methods, sector weights, and the SAVE score pillars.


        Generated fresh on each request; build-stamped with RAILWAY_GIT_COMMIT_SHA.'
      operationId: get_methodology_pdf_api_methodology_pdf_get
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema: {}
components:
  schemas:
    app__routers__methodology__BacktestSummaryResponse:
      properties:
        combined_hit_rate:
          anyOf:
          - type: number
          - type: 'null'
          title: Combined Hit Rate
        combined_r2:
          anyOf:
          - type: number
          - type: 'null'
          title: Combined R2
        save_hit_rate:
          anyOf:
          - type: number
          - type: 'null'
          title: Save Hit Rate
        innovation_hit_rate:
          anyOf:
          - type: number
          - type: 'null'
          title: Innovation Hit Rate
        signal_correlation:
          anyOf:
          - type: number
          - type: 'null'
          title: Signal Correlation
        n_simulations:
          type: integer
          title: N Simulations
          default: 0
        data_source:
          type: string
          title: Data Source
          default: withheld_uninformative_metric
        real_data_since:
          anyOf:
          - type: string
          - type: 'null'
          title: Real Data Since
        real_n:
          type: integer
          title: Real N
          default: 0
        live_factor_ic:
          items:
            $ref: '#/components/schemas/LiveFactorIC'
          type: array
          title: Live Factor Ic
          default: []
        live_ic_as_of:
          anyOf:
          - type: string
          - type: 'null'
          title: Live Ic As Of
        ic_series:
          items:
            $ref: '#/components/schemas/FactorICSeries'
          type: array
          title: Ic Series
          default: []
        realized_outcomes:
          items:
            $ref: '#/components/schemas/RealizedOutcomeBucket'
          type: array
          title: Realized Outcomes
          default: []
        realized_outcomes_total_n:
          type: integer
          title: Realized Outcomes Total N
          default: 0
        realized_outcomes_as_of:
          anyOf:
          - type: string
          - type: 'null'
          title: Realized Outcomes As Of
      type: object
      title: BacktestSummaryResponse
      description: 'Response model for GET /api/methodology/backtest-summary.


        Topline hit-rate fields are permanently null (see _WITHHELD_DATA_SOURCE

        note above) — kept in the model so existing consumers deserialize

        cleanly; every consumer must treat null as "withheld", not zero.'
    FactorICSeriesPoint:
      properties:
        date:
          type: string
          title: Date
        ic:
          anyOf:
          - type: number
          - type: 'null'
          title: Ic
      type: object
      required:
      - date
      - ic
      title: FactorICSeriesPoint
      description: One dated rolling-IC reading for the sparkline series (B5).
    LiveFactorIC:
      properties:
        factor_name:
          type: string
          title: Factor Name
        horizon_days:
          type: integer
          title: Horizon Days
        ic_rolling_20d:
          anyOf:
          - type: number
          - type: 'null'
          title: Ic Rolling 20D
        as_of:
          anyOf:
          - type: string
          - type: 'null'
          title: As Of
        mean_ic:
          anyOf:
          - type: number
          - type: 'null'
          title: Mean Ic
        t_hac:
          anyOf:
          - type: number
          - type: 'null'
          title: T Hac
        eff_n:
          anyOf:
          - type: number
          - type: 'null'
          title: Eff N
        significant:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Significant
        passes_rule:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Passes Rule
        adequate_eff_n:
          anyOf:
          - type: boolean
          - type: 'null'
          title: Adequate Eff N
      type: object
      required:
      - factor_name
      - horizon_days
      - ic_rolling_20d
      - as_of
      title: LiveFactorIC
      description: 'One live information-coefficient cell from factor_ic_history.


        2026-08-03 (P1-8): carries the overlap-corrected significance verdict

        alongside the legacy rolling mean, so no consumer can over-read a raw

        rolling IC again. `passes_rule` is the Newey-West HAC + BH-FDR +

        effective-N decision from factor_ic_significance; `adequate_eff_n` is

        False when the cell''s overlap-corrected sample is still too thin to

        decide anything.'
    FactorICSeries:
      properties:
        factor_name:
          type: string
          title: Factor Name
        horizon_days:
          type: integer
          title: Horizon Days
        points:
          items:
            $ref: '#/components/schemas/FactorICSeriesPoint'
          type: array
          title: Points
      type: object
      required:
      - factor_name
      - horizon_days
      - points
      title: FactorICSeries
      description: 'Time series of rolling-20d IC for one factor at one horizon (B5).


        Powers the per-factor sparklines on /methodology. Points ascend by date and

        are capped server-side (~90) — this is a trend glyph, not an export feed.'
    RealizedOutcomeBucket:
      properties:
        signal_source:
          type: string
          title: Signal Source
        horizon_days:
          type: integer
          title: Horizon Days
        n:
          type: integer
          title: N
        hits:
          type: integer
          title: Hits
        hit_rate:
          anyOf:
          - type: number
          - type: 'null'
          title: Hit Rate
        base_rate:
          anyOf:
          - type: number
          - type: 'null'
          title: Base Rate
        excess_hit_rate:
          anyOf:
          - type: number
          - type: 'null'
          title: Excess Hit Rate
        excess_n:
          type: integer
          title: Excess N
          default: 0
        excess_ci_low:
          anyOf:
          - type: number
          - type: 'null'
          title: Excess Ci Low
        excess_ci_high:
          anyOf:
          - type: number
          - type: 'null'
          title: Excess Ci High
        ticker_count:
          type: integer
          title: Ticker Count
          default: 0
        sufficient:
          type: boolean
          title: Sufficient
          default: true
        first_prediction:
          anyOf:
          - type: string
          - type: 'null'
          title: First Prediction
        last_evaluated:
          anyOf:
          - type: string
          - type: 'null'
          title: Last Evaluated
      type: object
      required:
      - signal_source
      - horizon_days
      - n
      - hits
      - first_prediction
      - last_evaluated
      title: RealizedOutcomeBucket
      description: 'Aggregated realized directional outcomes for one (signal, horizon) (B5).


        Computed at request time from signal_outcomes.hit_flag (the outcome

        recorder''s own direction-agreement flag), never from the stale

        methodology_stats keys. Buckets publish only at n >= 50 by default;

        published verbatim — including readings below coin-flip.


        `ticker_count` / `sufficient` (AWL-08, Phase 89-14): ticker_count is the

        distinct-symbol count within the bucket (a bare hit-rate percentage over

        a handful of tickers is exactly what the track-record surface must never

        present bare). `sufficient` is False only when the caller opts in via

        `include_insufficient=True` (the track-record surface) — the default

        /backtest-summary caller never sees a sub-threshold bucket, unchanged.


        2026-08-03 (P0-4): `hit_rate` is now ALWAYS None. The verification pack

        proved it identical to the drift base rate at every horizon — zero

        information. Published instead: `base_rate` (share of positive realized

        moves in the bucket — explicitly labeled market drift, so readers see WHY

        the raw rate is uninformative) and `excess_hit_rate` (mean of

        signal_outcomes.excess_hit_flag: direction agreement measured against the

        same-horizon universe median move, the drift-corrected metric), which is

        None until enough excess evaluations accumulate.'
  securitySchemes:
    HTTPBearer:
      type: http
      scheme: bearer
x-refined-from:
- openapi.json
- equity-rank-com-openapi.yml