Skip to content

For developers

The engine under Studio

Studio is one way in: a sentence becomes a typed spec and the spec runs. Underneath it is a point-in-time record of the US public filings — every row carrying the clock it arrived on, every read bounded to an instant you name, and every run leaving a receipt somebody else can recompute. All of it is addressable directly.

  • REST
  • MCP
  • Python
  • Parquet
  • Apache-2.0 harness

The /v1/sample routes and the harness need no account. Everything else is on the plans, from $29 a month.

Three commands

A bounded read, a run with the network off, an agent connected

The first needs no key: /v1/sample is public and rate-limited to 30 requests a minute per IP. The second installs the evaluation harness, which runs entirely on your machine and has no runtime dependency on this service. The third points an MCP client at the same record, with no install at all.

as_of 2023-03-10T23:59:59Z · no key 200 · count 1

$ curl -s "https://api.pit.aqx.llc/v1/sample/news?example=svb&as_of=2023-03-10T23:59:59Z"
{
  "as_of": "2023-03-10T23:59:59Z",
  "visible_by": "published_at",
  "status": "ok",
  "count": 1,
  "coverage": { "touched": ["sec.edgar/2023-03-10"], "missing": [] }
}

install Apache-2.0

$ pip install git+https://github.com/sharath/pit-harness

connect an agent POST /mcp

$ claude mcp add --transport http pit https://api.pit.aqx.llc/mcp \
       --header "Authorization: Bearer pit_live_..."
pit_query  pit_diff  pit_coverage  pit_meta
587,748 rows across seven public sources, read from /v1/meta on 2026-08-27. Oldest partition 2008-09-01; the tape has written forward every 15 minutes since 2026-08-26, so the count keeps rising.
5 clocks on every row, three of them queryable. Which three, and what a null does.
1 receipt per run: the trajectory hashed, the arms named, and a verifier that reruns the check offline.

The record

One corpus, five clocks, and a refusal where the evidence stops

A point-in-time read filters on exactly one timestamp field and the response repeats which one it used. That is the whole contract: you never get today's copy of a file back from a question about 2023, and you never get a silent zero where we simply have no data.

event_at
When the thing happened.
published_at
The publisher's own timestamp. The default visible_by.
available_at
First public availability we hold evidence for. Evidence or null, never a guess.
acceptance_at
When the receiving system accepted the filing.
committed_at
When we wrote the row. A 2026 backfill of a 2020 filing carries a 2026 committed_at.

visible_by accepts published_at, available_at and committed_at. All 563,594 sec.edgar rows carry available_at: null, because SEC publishes no dissemination clock — so a strict cut over SEC data returns HTTP 409 with count as JSON null rather than an empty list that looks like an answer. A coverage gap refuses the same way. The rules are on Coverage certificates, and the definitions on as-of and lookahead bias.

The harness

Run an agent against a frozen window with the network off

pit-harness is Apache-2.0, installs with pip, and runs on your machine with no account and no key. Every tool call is answered from the frozen window and nowhere else, and the whole trajectory is hashed into a receipt anyone holding the same files can recompute.

pit-harness run · 2023-03-01 → 2023-03-10 · 8-K 2.7s · exit 0

$ pit-harness run --config run.json \
       --trajectory trajectory.jsonl --receipt receipt.json
run bf78382b9021b3be  valid=True  receipt sha256:4580ffd92e09f045e71d4e63069ce200c9d14f865aef5a6ef88026410718c395
  main      leaky  reachable=False
  main      pit    reachable=True

Transcribed from the run on Evaluation Harness, executed 2026-08-27 against the pit-eval-sec-2022-11_2023-03 release on a laptop. The leaky arm is the control that is supposed to be unreachable; a run where it is reachable is a run that read the future. Methods covers the arms, Benchmarks the measured results.

The interfaces

REST for your code, MCP for your agent, Studio for a sentence

REST

Host https://api.pit.aqx.llc. One envelope on every response, bound cursor pagination, twelve error codes. OpenAPI 3 at /v1/openapi.json, generated from the server types. API reference →

MCP

POST /mcp, four read-only tools — pit_query, pit_diff, pit_coverage, pit_meta. One connect string for Claude Code, Claude.ai and Cursor; no install. MCP server →

Studio

POST /v1/studio/runs takes a prompt or a typed spec and returns the run document; GET /v1/studio/runs/{id} returns the same document again. The spec is readable before anything executes. Studio, in detail →

Files

Flat parquet partitions, one sha256 each, pinned to a corpus version. For a backtest that reads the whole corpus rather than paging an API. Flat Files →

Everything under Studio

Fifteen surfaces over the same corpus and the same envelope

Each one is a documented way to reach the same rows under the same clock rules, so a coverage certificate means the same thing in a flat file, in a benchmark release and on a live query. The full index says what each one serves today.