XOOMAR

API docs

31 datasets, one API

Clean JSON and CSV from primary sources, 44 documented endpoints, open CORS. 10 requests a minute without a key, 30 with a free key.

Base URL

https://xoomar.com

Rate limit

10 requests a minute without a key, 30 with a free key

Auth

Optional X-API-Key header

Response format

{
  "data": { ... },
  "updatedAt": "<ISO 8601 time the response was built>",
  "source": "xoomar.com",
  "docs": "https://xoomar.com/markets/api",
  "license": "https://xoomar.com/terms",
  "attribution": "Credit XOOMAR with a link to the dataset page on xoomar.com when you republish this data"
}

A few dated feeds (earnings, Treasury auctions, the threshold list, the latest day of short volume and fails to deliver, liquidation history) set updatedAt to the date of their newest row instead.

Every response carries X-RateLimit-Limit and X-RateLimit-Remaining for the minute, X-RateLimit-Day-Limit and X-RateLimit-Day-Remaining for the day, and X-Plan (keyless or free).

Client libraries

Python

PyPI·Source·Apache-2.0

pip install xoomar
from xoomar import Xoomar

x = Xoomar()                      # Xoomar(api_key="xm_live_...") for the free-key limit
x.short_interest("GME")[0]        # FINRA short interest, newest first
x.cot("gold")                     # CFTC positioning history
x.fed_liquidity()[-1]             # net liquidity, latest week
x.financials("AAPL")["quarterly"] # XBRL income statement by quarter

JavaScript / TypeScript

npm·Source·Apache-2.0

npm install xoomar
import { Xoomar } from "xoomar";

const x = new Xoomar();                  // new Xoomar({ apiKey }) for the free-key limit
(await x.shortInterest("GME"))[0];       // FINRA short interest, newest first
await x.cot("gold");                     // CFTC positioning history
(await x.fedLiquidity()).at(-1);         // net liquidity, latest week
(await x.financials("AAPL")).quarterly;  // XBRL income statement by quarter

AI agents (MCP server)

npm·Source·Apache-2.0

https://xoomar.com/mcp  ·  npx -y xoomar-mcp
// Hosted, nothing to install: add https://xoomar.com/mcp as a remote MCP server
// (Claude.ai custom connector, ChatGPT, Cursor). Claude Code:
claude mcp add --transport http xoomar https://xoomar.com/mcp

// Local over stdio (Claude Desktop, Claude Code, Cursor):
{ "mcpServers": { "xoomar": { "command": "npx", "args": ["-y", "xoomar-mcp"] } } }

// 26 tools: short_interest, insider_trades, insider_clusters, earnings_calendar,
// fund_holders, company_financials, cot_positioning, fed_liquidity and more.
// Ask: "Which tracked funds bought NVDA last quarter?"

Every method returns the data part of the response and keeps the envelope (updatedAt, source, attribution) on the client. No key needed to start (10 requests a minute without a key, 30 with a free key); a free account key goes in an X-API-Key header. The whole API is described in OpenAPI 3.1 (import it into Postman, Cursor or a GPT action) and in llms.txt.

Endpoints

31 datasets and one lookup tool, grouped by topic. Each docs page lists the fields and the parameters.

SEC filings and ownership

Short interest and FINRA

Macro and rates

Positioning and flows

Crypto derivatives

Government

Rate limits and keys

10 requests a minute per IP without a key and 30 a minute with a free account key, with at least six months of history. Send the key as an X-API-Key header from a free account. Beyond a limit the API answers HTTP 429 with a Retry-After header in seconds; an invalid key answers 401.

CSV downloads

Most datasets also serve CSV at /api/markets/{dataset}/csv: up to 50,000 rows a pull on most endpoints, lower on a few, same limits as JSON.

OpenAPI, llms.txt and MCP

/openapi.json describes every endpoint, parameter and response field (OpenAPI 3.1): import it into Postman or Insomnia, point an assistant at it, or generate a client. llms.txt maps the site for AI agents, and the hosted MCP server at https://xoomar.com/mcp serves 26 tools covering most datasets.