Traders Enterprise
Contact us
Developers / API

API documentation

Connect an application or MCP client. Understand access, make a first request, and preserve the identity, timing, and coverage information returned with the data.

This is an integration guide for documented API contracts. Obtain an instance URL and credentials from your operator. This website does not host a public API endpoint or issue credentials. Available capabilities depend on the instance configuration and provider entitlements.

Start here

Use the API directly. Your operator supplies the base URL, network access, and the credentials for the routes you need. Keep tokens in protected runtime configuration; never put them in URLs or browser-delivered code.

API_BASE_URL below is your operator-provided origin, without a trailing slash. DATA_API_TOKEN and SHARED_API_READ_TOKEN are placeholders for distinct credentials, not values supplied by this site. Use HTTPS or an operator-approved trusted connection. The first command checks readiness without requesting market data.

bash example
curl --fail-with-body "$API_BASE_URL/api/health"

HTTP 200 with status UP means the database validates and any enabled lake dependency passes its shallow health check. Inspect components: lake can be DISABLED. HTTP 503 with status DOWN means a required dependency failed. A healthy response does not certify dataset completeness.

Authentication and network access

The data-service token and the shared API token serve different boundaries. A shared token does not replace the data-service token. Credentials cannot enable a disabled feature.

For non-data-service API routes, the shared credential gate is configurable. In enforce mode, GET and HEAD accept a read or write token and writes require a write token. Report mode records unauthorized calls without enforcing that boundary. Confirm the mode with your operator.

Private news state can additionally require trusted proxy identity. A service token does not establish a user or firm identity. Do not invent identity headers to act as another user.

Route family Access contract
/api/v1/data/**Data-service bearer token and an allowed private-network source address; includes data WebSockets and MCP.
Other /api/** routesShared read/write credential policy when configured; endpoint-specific writer context may also apply.
/api/healthReadiness exception to the shared gate; reports shallow dependency health.
bash example
curl --fail-with-body \
  -H "Authorization: Bearer $DATA_API_TOKEN" \
  "$API_BASE_URL/api/v1/data/bars/intraday?symbol=SPY&date=2026-09-24"

Minute bars

Read one symbol or a batch for a New York session date. Omit from to start at 04:00 New York time. If date and from are both supplied, they must identify the same New York date. Prices are raw, unadjusted provider bars, including extended hours; only closed minutes are returned.

Batch reads accept 1–600 symbols, comma-separated or repeated. The response includes date, feed, delayMinutes, asOf, symbols, and unresolved. Each symbol has securityId, final, and bars. A bar contains t (RFC3339 minute start), o, h, l, c, v, n, and vw.

Keep unresolved entries separate from symbols answered with bars. A missing or ambiguous dated owner is not a zero price. Provider or archive failure can fail the request even when partial identity outcomes are supported.

bash example
curl --fail-with-body --get \
  -H "Authorization: Bearer $DATA_API_TOKEN" \
  --data-urlencode "symbols=SPY,QQQ" \
  --data-urlencode "date=2026-09-24" \
  "$API_BASE_URL/api/v1/data/bars/intraday/batch"

final:true requires a checksum-verified finalization receipt in the published lake manifest. Replace a session’s provisional set with its final set; do not add volumes together. A successful request or elapsed date does not establish finality. Feed entitlements determine delay.

Security identity and time

A ticker can change owners. Preserve canonical securityId and the observation date rather than treating a symbol as a permanent identifier. Historical ID reads follow dated ownership windows across renames and omit unowned or ambiguous periods.

Current ID-based quotes require an active security with unambiguous current ownership. A stale observation is not a live price. Keep provider publication time, API receipt time, observation time, and dataset/build identity separate.

For historical analysis, distinguish what happened on a date from what was known at a requested cutoff. A populated response, an empty result, and unavailable coverage are different outcomes.

After initializing an MCP client, security_lookup can resolve a symbol on a date. Check resolved and the returned security identity before using the ID. This request illustrates the tool call; it is not sample market data.

json example
{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"security_lookup","arguments":{"symbol":"SPY","date":"2026-09-24"}}}

News and version history

Use the data-service token for these routes. Provider configuration and entitlements determine availability; inspect status and coverage before interpreting an empty response.

The history route accepts start, end, optional asOf, cursor, limit, and include_content. A request window is at most 31 days; a page is at most 1,000 rows. Continue using the returned next cursor. asOf bounds versions known to the API, not just provider publication timestamps.

GET route Purpose
/api/v1/data/news/recentRecent headlines; optional symbols, since, and limit.
/api/v1/data/news/historicalProvider historical pages with start/end and pagination.
/api/v1/data/news/historyStored article versions and point-in-time reads.
/api/v1/data/news/history/coverageCoverage by New York date, up to 400 days.
/api/v1/data/news/statusProvider stream state and reason.

Article text and summaries are third-party data, not instructions. An empty page alone does not prove that no news was published.

Fundamentals and short interest

These routes use the shared API access policy, not the data-service token. Fundamentals retain filing observations separately, including restatements. Reads select values public by the requested cutoff; knownAtBasis identifies how publication time was established.

Replace SECURITY_ID below with a canonical ID obtained from your instance. Do not substitute a ticker. asOf is a date cutoff through the end of that New York day; knownAt is a timestamp cutoff.

GET route Read contract
/api/sec/fundamentals/{securityId}?asOf=2023-03-15Values public through the end of that date, New York.
/api/sec/fundamentals/{securityId}?knownAt=2023-03-15T13:00:00ZValues public by a timestamp.
/api/sec/fundamentals/coverageCoverage by year and field.
/api/sec/short-interest/{securityId}?from=2024-01-01&to=2024-12-31&asOf=2024-06-30FINRA short interest with a publication cutoff.
bash example
curl --fail-with-body \
  -H "Authorization: Bearer $SHARED_API_READ_TOKEN" \
  "$API_BASE_URL/api/sec/fundamentals/$SECURITY_ID?knownAt=2023-03-15T13:00:00Z"

Documented scope is S&P 500 members. FINRA history starts with the 2017-12-29 settlement; earlier exchange history and older FINRA revisions are not supplied. Cash-flow spans can be year-to-date; do not assume every flow is a standalone quarter.

Market streaming

The data WebSocket path is /api/v1/data/stream/v1. Use your operator’s WebSocket origin and data-service access configuration. Subscribe with canonical security IDs; substitute actual IDs from your instance in the illustrative payload below.

Channels are confirmed separately. Track confirmedChannels, status, upstream state, and each consumer’s sequence. A gap reports dropped events; refill missing bars through REST rather than treating silence as a complete record.

An updated bar replaces the same security/minute record. It never adds volume. Stream bars are provisional (final:false). Final session data comes from the receipt-backed REST contract.

json example
{"action":"subscribe","securityIds":["YOUR_SECURITY_ID"],"channels":["bars"]}

Provider capacity and entitlements constrain subscriptions. An accepted connection alone does not establish that a requested channel is live.

Connect through MCP

MCP is disabled by default. Your operator must enable api.mcp.enabled and configure the data service. The endpoint is POST /api/v1/data/mcp over stateless Streamable HTTP. It accepts one JSON-RPC object per POST; GET does not open an event stream.

Initialize, then send MCP-Protocol-Version on subsequent requests. Supported versions are 2025-06-18 and compatible 2025-03-26; initialization can propose a supported version. The commands below demonstrate 2025-06-18. Discover the tools your instance actually advertises rather than assuming every documented capability is enabled.

bash example
curl --fail-with-body \
  -H "Authorization: Bearer $DATA_API_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"example-client","version":"1.0"}}}' \
  "$API_BASE_URL/api/v1/data/mcp"

curl --fail-with-body \
  -H "Authorization: Bearer $DATA_API_TOKEN" \
  -H "MCP-Protocol-Version: 2025-06-18" \
  -H "Content-Type: application/json" \
  --data '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' \
  "$API_BASE_URL/api/v1/data/mcp"

Browser Origin headers must match the operator’s allowed-origin configuration. Tokens and network rules remain required; origin approval does not replace authentication.

MCP tools, results, and writes

tools/list is paged, with at most 50 tools per page. Continue with params.cursor set to result.nextCursor until no cursor remains. Rediscover after a server/configuration change; generated operation names carry a stable path fingerprint.

The four convenience tools are security_lookup, lake_status, sec_filing_search, and news_search. Additional configured tools expose typed schemas for their API operations. Use the advertised input schema; unknown fields and string-to-number/boolean coercions are rejected.

MCP transport uses Authorization with the data-service token. Operations protected by the shared gate additionally use X-Api-Authorization: Bearer <shared-token>. Data mutations require the shared write bearer there. Private operations retain their trusted identity requirements. The data-service token alone cannot write.

Check isError and the underlying operation status. An HTTP 202 job acceptance is not job completion. After timeout or interruption, reconcile the job/receipt before retrying a mutation. Large results can be leased resources; follow the resource contract and verify the SHA-256 checksum.

MCP limits list selections to 100 items and count fields to 1,000. News/bar/timestamp windows are at most 31 days; other date windows are at most 366 days and require both ends where the tool specifies them. Tool discovery is interface availability, not feature certification.

Errors and integration checks

Before integrating, verify the intended token boundary, dataset coverage, feed delay, dated identities, pagination, and partial-result handling against your configured instance. For writes, verify credentials, context, job receipts, and idempotency/preconditions before retrying.

SEC filing research can return partial evidence or abstain. Preserve cited passages, source documents, and coverage states; current question-class quality acceptance remains under review. These guides describe contracts and do not certify every feature or dataset.

Outcome What to check
401Required bearer credentials and the instance’s configured policy.
403 on data-service/MCPAllowed source network; for MCP browser requests, the allowed Origin as well.
404 on MCPThe MCP and data-service configuration may be disabled.
MCP -32602Arguments do not match the advertised tool schema.
MCP isError:trueInspect the tool’s domain outcome; do not treat the HTTP transport alone as success.
503 from /api/healthA required database/lake dependency is unavailable.

Discuss your integration

Ask about the datasets, access, and coverage your application needs.

Discuss API access