---
updatedAt: 2026-05-15T09:04:24.000Z
agentTools:
  projectIndex: https://docs.ortex.com/llms.txt
---

# Content List


<p>The ORTEX Market Intelligence API delivers data-driven financial content
generated from ORTEX's market datasets — short interest, cost to borrow,
utilization, options flow, ORTEX Alpha signals, and more.</p>

<p>Content types (<code>content_type</code>):</p>
<ul>
    <li><strong>pulse</strong> — Flash headlines when a data event crosses a threshold. Sub-type
    in <code>pulse_type</code>: <code>short_interest</code>, <code>analyst</code>, <code>options</code>,
    <code>institutional</code>, <code>ctb</code>, <code>utilization</code>, <code>signal</code>,
    <code>convergence</code>, <code>alt_data</code>.</li>
    <li><strong>earnings_preview</strong> — Short-form analytical brief 2–3 trading days ahead of earnings.</li>
    <li><strong>trader_note</strong> — Weekly long-form deep dive per covered stock.</li>
    <li><strong>weekly_digest</strong> — Weekly synthesis of cross-stock themes, sector trends, and
    convergence alerts. Sub-type in <code>theme</code>:
    <code>week_ahead</code>, <code>overall</code>, <code>short_interest</code>, <code>analyst</code>,
    <code>options</code>, <code>convergence</code>.</li>
    <li><strong>convergence_report</strong> — Auto-triggered when 3+ distinct data events align on one ticker.</li>
    <li><strong>market_commentary</strong> — Cross-stock market-wide articles published on a 4-hour cadence
    (8h for money_flow). Sub-type in <code>theme</code>: <code>general</code>, <code>short_interest</code>,
    <code>analyst</code>, <code>events</code>, <code>insider</code>, <code>options</code>, <code>money_flow</code>.</li>
</ul>

<h3>Identifying content by subject</h3>
<p>The simplest way to pull subject-matter content across content types is the <code>?topics=</code> filter —
e.g. <code>?topics=short_interest</code> returns SI pulses, the SI weekly digest, the SI commentary, and any
long-form row grounded in SI data. Closed vocabulary: <code>short_interest</code>, <code>cost_to_borrow</code>,
<code>utilization</code>, <code>options</code>, <code>analyst</code>, <code>institutional</code>,
<code>insider</code>, <code>signals</code>, <code>earnings</code>, <code>money_flow</code>,
<code>convergence</code>, <code>general</code>. Comma-separate for OR semantics.</p>

<h3>Looking up content by ticker</h3>
<p>The <code>?ticker=</code> filter searches both the row's primary tagged ticker AND any
body-mentioned tickers (via <code>related_tradingitems</code>) — so <code>?ticker=NYSE:F</code> returns any
digest, trader note, or commentary that references Ford on NYSE. Two formats are accepted:</p>
<ul>
    <li><strong>Colon-separated:</strong> <code>?ticker=NYSE:F</code>. The segment before the colon can be an
    exchange symbol (<code>NYSE</code>), a MIC code (<code>XNYS</code>), or an ISO 3166-1 alpha-2 country code
    (<code>US</code>) — same resolution as every other v1 stock endpoint.</li>
    <li><strong>Legacy:</strong> <code>?ticker=F&exchange=NYSE</code>. Equivalent to the colon form.</li>
</ul>

<h3>Identifiers per row</h3>
<p>Pass <code>?include=identifiers</code> to receive a list of <code>{exchange, ticker, mic, isin}</code>
dicts per row covering both the primary tagged ticker and every body-mentioned ticker. Always
present on the detail endpoint; opt-in on list (one extra ISIN query per row).</p>

<h3>Data sources &amp; methodology</h3>
<p>Each metric is built on a public-knowledge input category and an
ORTEX modelling layer on top. The inputs aren't secret; the modelling
is what's proprietary.</p>
<ul>
    <li><strong>Short interest</strong> — ORTEX Proprietary Short Interest.</li>
    <li><strong>Cost to borrow &amp; utilization</strong> — aggregated from securities-lending market feeds
    (prime-broker and agent-lender data) and normalised across counterparties. Raw lending data is fragmented;
    the aggregation + normalisation is the proprietary layer.</li>
    <li><strong>Options flow</strong> — US options data, classified by an ORTEX buy/sell-pressure model.</li>
    <li><strong>ORTEX Alpha signals</strong> — quantitative signals built on top of all of the above plus exchange
    price/volume feeds. Inputs are listed in this document; signal construction (weights, thresholds, lookbacks)
    is the proprietary layer.</li>
    <li><strong>Analyst &amp; institutional</strong> — sourced from established licensed data vendors.</li>
    <li><strong>Alternative data</strong> (<code>alt_data</code>) — real-economy datasets ORTEX ingests from
    public registers, regulators and publishers (vehicle registrations, air traffic, bank call reports, and
    more), mapped to companies. An article only calls a dataset a leading indicator when ORTEX has measured
    it to lead the company's reported figures out of sample; a current-quarter reading is where the data
    points so far, never a forecast.</li>
</ul>

<p>Every response includes a <strong>provenance</strong> section detailing
when the content was generated, which ORTEX data sources contributed
(<code>data_sources</code> — see the "Data sources &amp; methodology"
block above for what each slug means), and the prompt/model version
— so you can always trace an article back to the underlying data.</p>

<p>All API subscribers — retail and enterprise — receive every article
with its full body. The <code>is_premium</code> flag is surfaced for
reference only; API consumers are never rate-limited on content, only
on request volume.</p>


# OpenAPI definition

```json
{
  "openapi": "3.0.3",
  "info": {
    "title": "ORTEX APIs",
    "version": "1.0",
    "description": "A revolutionary global equity analytics platform which identifies and analyses relevant data for your stocks."
  },
  "paths": {
    "/api/v1/market_intelligence/content": {
      "get": {
        "operationId": "market_intelligence_content_list",
        "description": "\n<p>The ORTEX Market Intelligence API delivers data-driven financial content\ngenerated from ORTEX's market datasets — short interest, cost to borrow,\nutilization, options flow, ORTEX Alpha signals, and more.</p>\n\n<p>Content types (<code>content_type</code>):</p>\n<ul>\n    <li><strong>pulse</strong> — Flash headlines when a data event crosses a threshold. Sub-type\n    in <code>pulse_type</code>: <code>short_interest</code>, <code>analyst</code>, <code>options</code>,\n    <code>institutional</code>, <code>ctb</code>, <code>utilization</code>, <code>signal</code>,\n    <code>convergence</code>, <code>alt_data</code>.</li>\n    <li><strong>earnings_preview</strong> — Short-form analytical brief 2–3 trading days ahead of earnings.</li>\n    <li><strong>trader_note</strong> — Weekly long-form deep dive per covered stock.</li>\n    <li><strong>weekly_digest</strong> — Weekly synthesis of cross-stock themes, sector trends, and\n    convergence alerts. Sub-type in <code>theme</code>:\n    <code>week_ahead</code>, <code>overall</code>, <code>short_interest</code>, <code>analyst</code>,\n    <code>options</code>, <code>convergence</code>.</li>\n    <li><strong>convergence_report</strong> — Auto-triggered when 3+ distinct data events align on one ticker.</li>\n    <li><strong>market_commentary</strong> — Cross-stock market-wide articles published on a 4-hour cadence\n    (8h for money_flow). Sub-type in <code>theme</code>: <code>general</code>, <code>short_interest</code>,\n    <code>analyst</code>, <code>events</code>, <code>insider</code>, <code>options</code>, <code>money_flow</code>.</li>\n</ul>\n\n<h3>Identifying content by subject</h3>\n<p>The simplest way to pull subject-matter content across content types is the <code>?topics=</code> filter —\ne.g. <code>?topics=short_interest</code> returns SI pulses, the SI weekly digest, the SI commentary, and any\nlong-form row grounded in SI data. Closed vocabulary: <code>short_interest</code>, <code>cost_to_borrow</code>,\n<code>utilization</code>, <code>options</code>, <code>analyst</code>, <code>institutional</code>,\n<code>insider</code>, <code>signals</code>, <code>earnings</code>, <code>money_flow</code>,\n<code>convergence</code>, <code>general</code>. Comma-separate for OR semantics.</p>\n\n<h3>Looking up content by ticker</h3>\n<p>The <code>?ticker=</code> filter searches both the row's primary tagged ticker AND any\nbody-mentioned tickers (via <code>related_tradingitems</code>) — so <code>?ticker=NYSE:F</code> returns any\ndigest, trader note, or commentary that references Ford on NYSE. Two formats are accepted:</p>\n<ul>\n    <li><strong>Colon-separated:</strong> <code>?ticker=NYSE:F</code>. The segment before the colon can be an\n    exchange symbol (<code>NYSE</code>), a MIC code (<code>XNYS</code>), or an ISO 3166-1 alpha-2 country code\n    (<code>US</code>) — same resolution as every other v1 stock endpoint.</li>\n    <li><strong>Legacy:</strong> <code>?ticker=F&exchange=NYSE</code>. Equivalent to the colon form.</li>\n</ul>\n\n<h3>Identifiers per row</h3>\n<p>Pass <code>?include=identifiers</code> to receive a list of <code>{exchange, ticker, mic, isin}</code>\ndicts per row covering both the primary tagged ticker and every body-mentioned ticker. Always\npresent on the detail endpoint; opt-in on list (one extra ISIN query per row).</p>\n\n<h3>Data sources &amp; methodology</h3>\n<p>Each metric is built on a public-knowledge input category and an\nORTEX modelling layer on top. The inputs aren't secret; the modelling\nis what's proprietary.</p>\n<ul>\n    <li><strong>Short interest</strong> — ORTEX Proprietary Short Interest.</li>\n    <li><strong>Cost to borrow &amp; utilization</strong> — aggregated from securities-lending market feeds\n    (prime-broker and agent-lender data) and normalised across counterparties. Raw lending data is fragmented;\n    the aggregation + normalisation is the proprietary layer.</li>\n    <li><strong>Options flow</strong> — US options data, classified by an ORTEX buy/sell-pressure model.</li>\n    <li><strong>ORTEX Alpha signals</strong> — quantitative signals built on top of all of the above plus exchange\n    price/volume feeds. Inputs are listed in this document; signal construction (weights, thresholds, lookbacks)\n    is the proprietary layer.</li>\n    <li><strong>Analyst &amp; institutional</strong> — sourced from established licensed data vendors.</li>\n    <li><strong>Alternative data</strong> (<code>alt_data</code>) — real-economy datasets ORTEX ingests from\n    public registers, regulators and publishers (vehicle registrations, air traffic, bank call reports, and\n    more), mapped to companies. An article only calls a dataset a leading indicator when ORTEX has measured\n    it to lead the company's reported figures out of sample; a current-quarter reading is where the data\n    points so far, never a forecast.</li>\n</ul>\n\n<p>Every response includes a <strong>provenance</strong> section detailing\nwhen the content was generated, which ORTEX data sources contributed\n(<code>data_sources</code> — see the \"Data sources &amp; methodology\"\nblock above for what each slug means), and the prompt/model version\n— so you can always trace an article back to the underlying data.</p>\n\n<p>All API subscribers — retail and enterprise — receive every article\nwith its full body. The <code>is_premium</code> flag is surfaced for\nreference only; API consumers are never rate-limited on content, only\non request volume.</p>\n",
        "summary": "Content List",
        "parameters": [
          {
            "in": "query",
            "name": "content_type",
            "schema": {
              "type": "string",
              "enum": [
                "convergence_report",
                "earnings_preview",
                "market_commentary",
                "pulse",
                "trader_note",
                "weekly_digest"
              ]
            },
            "description": "Filter by content type (pulse, earnings_preview, trader_note, weekly_digest, convergence_report, market_commentary)."
          },
          {
            "in": "query",
            "name": "exchange",
            "schema": {
              "type": "string"
            },
            "description": "Exchange symbol to disambiguate the ticker (e.g. NYSE / NASDAQ / LSE), case-insensitive. Useful when the same ticker exists on multiple venues — e.g. BYND on US vs BYND on LSE. On /content/ the param narrows the listing to rows whose tradingitem belongs to that exchange. On /stock/<ticker>/ it pins the lookup; without it the primary listing wins."
          },
          {
            "in": "query",
            "name": "include",
            "schema": {
              "type": "string"
            },
            "description": "Comma-separated list of optional fields to include in each row. Default is the compact projection: `id`, `contentType`, `ticker`, `exchange`, `publishedAt`. Recognised values: `headline`, `body`, `provenance`, `theme`, `pulseType`, `identifiers`. Example: `?include=headline,provenance,identifiers`."
          },
          {
            "name": "page",
            "required": false,
            "in": "query",
            "description": "A page number within the paginated result set.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "name": "page_size",
            "required": false,
            "in": "query",
            "description": "Number of results to return per page.",
            "schema": {
              "type": "integer"
            }
          },
          {
            "in": "query",
            "name": "pulse_type",
            "schema": {
              "type": "string",
              "enum": [
                "alt_data",
                "analyst",
                "convergence",
                "ctb",
                "institutional",
                "options",
                "short_interest",
                "signal",
                "utilization"
              ]
            },
            "description": "Filter pulse rows by pulse_type (short_interest, analyst, options, institutional, ctb, utilization, signal, convergence, alt_data)."
          },
          {
            "in": "query",
            "name": "q",
            "schema": {
              "type": "string"
            },
            "description": "Free-text search across headline + body. Use the `ticker` parameter for exact ticker matches."
          },
          {
            "in": "query",
            "name": "severity",
            "schema": {
              "type": "string",
              "enum": [
                "critical",
                "high",
                "low",
                "medium"
              ]
            },
            "description": "Filter by exact severity (low, medium, high, critical)."
          },
          {
            "in": "query",
            "name": "theme",
            "schema": {
              "type": "string",
              "enum": [
                "analyst",
                "convergence",
                "events",
                "general",
                "insider",
                "money_flow",
                "options",
                "overall",
                "short_interest",
                "week_ahead"
              ]
            },
            "description": "Theme slug. For `content_type=weekly_digest`: `week_ahead`, `overall`, `short_interest`, `analyst`, `options`, `convergence`. For `content_type=market_commentary`: `general`, `short_interest`, `analyst`, `events`, `insider`, `options`, `money_flow`. The same param applies to both content types; the response row's `content_type` disambiguates."
          },
          {
            "in": "query",
            "name": "ticker",
            "schema": {
              "type": "string"
            },
            "description": "Filter to a single ticker. Accepts BOTH `EXCHANGE:TICKER` (e.g. `NYSE:F`, `XNYS:F`, `US:F`) and legacy bare-ticker form with a separate `exchange` param. Searches both the row's primary tagged ticker AND every body-mentioned ticker, so `?ticker=NYSE:F` returns any article that references Ford anywhere — not just rows whose primary subject is Ford. Case-insensitive."
          },
          {
            "in": "query",
            "name": "topics",
            "schema": {
              "type": "string",
              "enum": [
                "analyst",
                "convergence",
                "cost_to_borrow",
                "earnings",
                "general",
                "insider",
                "institutional",
                "money_flow",
                "options",
                "short_interest",
                "signals",
                "utilization"
              ]
            },
            "description": "Comma-separated topic slugs from the closed vocabulary. Returns rows whose computed ``topics`` list intersects the requested set (OR semantics, not AND). Single best filter for subject-matter queries — covers pulses (via ``pulseType``), weekly digests + market commentary (via ``theme``), and any long-form row whose snapshot declared an explicit ``dataSources`` list. Example: ``?topics=short_interest`` to fetch SI pulses, the SI weekly digest, the SI commentary, and any trader note grounded in SI data."
          }
        ],
        "tags": [
          "Market Intelligence"
        ],
        "security": [
          {
            "ApiKeyAuth": []
          }
        ],
        "responses": {
          "200": {
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedMIContentCustomerListList"
                }
              }
            },
            "description": ""
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "MIContentCustomerList": {
        "type": "object",
        "description": "List representation for the customer API.\n\nCompact by default: ``id``, ``content_type``, ``ticker``,\n``exchange``, ``published_at``. Callers opt into the\nheavier-weight fields via ``?include=headline,body,provenance``\non the list endpoint, which surfaces here as\n``context['include_fields']``.\n\nAll field hiding (premium flags, lifecycle, generated_at,\nsecurity_id) happens via ``Meta.fields`` — exactly the set\ndocumented in the module docstring.",
        "properties": {
          "id": {
            "type": "integer",
            "readOnly": true
          },
          "contentType": {
            "enum": [
              "pulse",
              "earnings_preview",
              "trader_note",
              "weekly_digest",
              "convergence_report",
              "market_commentary",
              "corporate_action"
            ],
            "type": "string",
            "description": "* `pulse` - Stock Pulse\n* `earnings_preview` - Earnings Preview\n* `trader_note` - Sales Trader Note\n* `weekly_digest` - Weekly Digest\n* `convergence_report` - Convergence Report\n* `market_commentary` - Market Commentary\n* `corporate_action` - Corporate Action",
            "x-spec-enum-id": "a914b59c51b40ee6"
          },
          "ticker": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "exchange": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "isin": {
            "type": "string",
            "nullable": true,
            "readOnly": true
          },
          "ortexSid": {
            "type": "integer",
            "nullable": true,
            "readOnly": true
          },
          "publishedAt": {
            "type": "string",
            "format": "date-time",
            "nullable": true
          },
          "topics": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "Closed-vocabulary subject-matter tags for this row.\n\nLets callers filter \"anything SI-flavoured\" with one query\n(``?topics=short_interest``) instead of enumerating\n``content_type=pulse&pulse_type=short_interest`` +\n``content_type=weekly_digest&theme=short_interest`` +\n``content_type=market_commentary&theme=short_interest``\nseparately. See ``compute_topics`` and ``Topic`` in\n``market_intelligence.constants`` for the resolution rules and\nthe closed vocabulary.\n\nDerived at request time from existing discriminators — no\nschema change required. Empty list (rather than null) when no\ntopic resolves, so callers always get a JSON array.",
            "readOnly": true
          }
        },
        "required": [
          "contentType",
          "exchange",
          "id",
          "isin",
          "ortexSid",
          "ticker",
          "topics"
        ]
      },
      "PaginatedMIContentCustomerListList": {
        "type": "object",
        "required": [
          "length",
          "paginationLinks",
          "rows"
        ],
        "properties": {
          "paginationLinks": {
            "type": "object",
            "example": {
              "next": "http://api.example.org/accounts/?page=4",
              "previous": "http://api.example.org/accounts/?page=2"
            }
          },
          "length": {
            "type": "integer",
            "example": 123
          },
          "rows": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/MIContentCustomerList"
            }
          }
        }
      }
    },
    "securitySchemes": {
      "ApiKeyAuth": {
        "type": "apiKey",
        "in": "header",
        "name": "Ortex-Api-Key",
        "description": "Use test API key: `TEST` to get a limited result."
      }
    }
  },
  "servers": [
    {
      "url": "https://api.ortex.com/",
      "description": "Production"
    }
  ]
}
```