Skip to content

Worked example

Point-in-time SEC filings API

Give PIT an instant and a ticker. It returns the EDGAR rows that were visible then, the clock it filtered on, and a coverage certificate for every day it read: our record of what we found on each of those days. The 8-K below is the shortest way to see all three, and the sample runs without an account.

PIT=https://api.pit.aqx.llc — the sample takes no key.

as_of 2023-03-09T20:00:00Z count 0

$ curl -s "$PIT/v1/sample/news?example=svb&as_of=2023-03-09T20:00:00Z"
"count": 0

coverage.touched names sec.edgar/2023-03-09 and us.federal_register.pi/2023-03-09, both certified, and coverage.missing is empty, so the zero is SVB’s filing count at that instant.

as_of 2023-03-10T23:59:59Z count 1

$ curl -s "$PIT/v1/sample/news?example=svb&as_of=2023-03-10T23:59:59Z"
"title": "SVB FINANCIAL GROUP 8-K"

Accession 0001193125-23-067777, CIK 719739, with acceptance_at 2023-03-10T22:23:03Z from the EDGAR receipt.

content_sha256
8a95862ef3953dd206f1afeb5a0ab19014b57f7f332b764e948f6514fdd2d06a

Updated 2026-08-26. Every figure below was read off a running server.

Contract

What an as-of call takes and returns

Three clocks are selectable. Two more are on the row and readable, and asking to cut on either of them is rejected rather than quietly mapped to something else.

FieldOn an SEC row
published_atThe filer and index clock, and the default for visible_by. EDGAR’s daily index carries a Date Filed and no time, so we stamp the end of that day. The SVB 8-K reads 2023-03-10T23:59:59Z.
available_atFirst evidenced public availability. Null on all 563,594 SEC rows we hold, with availability_basis reading unknown, so a strict cut returns HTTP 409 rather than a shortened list.
committed_atWhen the row reached our store. Selectable, and it answers what we held by T rather than what the public held by T.
acceptance_atEDGAR’s ACCEPTANCE-DATETIME, in Eastern. Readable on the row and not selectable as a cut clock, because a receipt records that the SEC took the file rather than that anyone could read it. On the SVB 8-K it is 2023-03-10T22:23:03Z.
event_atThe underlying event where one is known. Null on SEC index rows, and not a cut clock.

Responses

Zero and missing arrive in different shapes

A cut that touched a day we never ingested refuses to answer rather than returning a shorter list.

Certified day, nothing matchedDay we have not ingested
HTTP200409
statusokcoverage_missing
count0JSON null
results[][]
Where the day appearscoverage.touchedcoverage.missing, keyed sec.edgar/YYYY-MM-DD

Strict availability is the same mechanism. Asking the 10 March cut for visible_by=available_at returns 409, with availability.sec.edgar/2023-03-10 in coverage.missing. We hold no dissemination evidence for that day, and the acceptance receipt answers a different question.

Calls

Paid and sample, side by side

paid — 18 SEC form types, whole ingested history count 86

$ curl -s -H 'Authorization: Bearer pit_live_…' \
  "$PIT/v1/news?ticker=SIVB&source=sec.edgar&as_of=2023-03-10T23:59:59Z&visible_by=published_at"

86 SVB rows are visible on the evening of 10 March and 85 the evening before, and the row that arrived between them is the receivership 8-K. source=sec.edgar names what the answer rests on. Drop it and the cut also depends on CFTC and OFAC days this corpus does not hold. You then get a 409 naming those days, rather than a partial 200.

what became knowable between the two instants count 1

$ curl -s -H 'Authorization: Bearer pit_live_…' \
  "$PIT/v1/news/diff?ticker=SIVB&source=sec.edgar&as_of_start=2023-03-09T20:00:00Z&as_of_end=2023-03-10T23:59:59Z"

The diff endpoint answers what became knowable between the two instants, which is a smaller set than everything visible at the later one. Rows whose event_at sits in the window are a third set again.

Day resolution

Why the stamp sits at the end of the day

EDGAR’s daily index gives a date and no time, so the stamp has to pick an instant inside it.

Stamping the start would read 2023-03-10T00:00:00Z as the filing’s visibility, which is 19:00 Eastern on 9 March. Against the EDGAR receipt for the SVB 8-K, that is 22 hours and 23 minutes of lookahead. The same shift would apply to every row in every daily index.

The end-of-day stamp is an upper bound at day resolution rather than a claim that the filing appeared at 23:59:59. To replay a whole filing day, ask at or after 23:59:59Z; an intraday cut returns none of that day’s index rows. partition_date, the day a row is filed under, does not move, so coverage keys still line up with the day EDGAR assigned.

The daily index is also our dissemination evidence, which matters because EDGAR does not always list a filing on the day it was filed. Across the 204 SEC index files we hold, 197 rows carry a Date Filed earlier than the index that first listed them. The tail runs long: one 10-K filed 2007-02-27 first appears in the 2008-09-30 index, 581 days later. Those rows report the index day, because that is when the filing entered the public feed.

Payload

The rows carry no filing text yet

A PIT row holds the form type, the company name, the accession number, the CIK, five clocks, and a SHA-256 of the index bytes it was parsed from. It also holds source_locator, the SEC URL for the document. The document itself is not on the row.

Every SEC title in this corpus is built the same way: the company name from the daily index, followed by the form type. All 86 SIVB rows in the 10 March 2023 cut therefore collapse to six distinct strings. Accession 0001193125-23-064680 on 8 March, the capital raise, and accession 0001193125-23-067777 on 10 March, the receivership, both read SVB FINANCIAL GROUP 8-K.

A model reading a cut therefore writes mostly from its own memory of the period. Our four-arm run over SVB week measured that. Given only SVB FINANCIAL GROUP 8-K, the model produced a specific dollar figure for the capital raise and a description of the securities sale. Neither was in the payload. With the issuer name withheld and every date shifted forward ten years, the same model returned a neutral view on every day of that week, receivership day included. The signal was coming from training data, and training data extends past your cut instant.

Filing text is being ingested now. Until it lands, fetch the document from source_locator yourself whenever the run depends on what a filing says. Treat a model’s narrative about a PIT row as coming from the model, not from the row.

Scope

What the corpus covers, next to the claim

These come from /v1/meta and /v1/coverage on a running server.

563,594 SEC rows
204 days certified complete
99 days marked missing
18 form types in scope

Ten SEC months are in. Five of them run without a gap from 2022-11-01 to 2023-03-31: 151 days, of which 103 are certified complete and 48 are marked missing. Those 48 are the weekends plus six federal holidays. Federal Register public inspection covers the same window. Both backfills end on 2023-03-31; rows dated after 2026-08-26 arrive on the live tape instead.

complete means complete with respect to the certificate’s scope. We keep 18 form types out of everything EDGAR’s daily index lists, so 2023-03-10 certifies 3,124 rows against an index holding 5,461. Every certificate carries that form set and its scope_sha256, on complete, partial and missing alike.

Identity

The ticker has to resolve at T too

SIVB maps to CIK 719739 through SVB week; Nasdaq suspended the symbol on 2023-03-28. Once a ticker file downloaded today no longer carries SIVB, joining the 8-K against it is the wrong join. The same mechanism catches renames: ticker FB resolves to CIK 1326801 up to 2022-06-09, and META resolves to the same CIK from that date. Asking for a ticker no interval places at your instant is a coverage hole keyed identity.ticker/TICKER@YYYY-MM-DD, which is a 409 rather than an empty list.

Federal Register runs on its own rule: regular public inspection filings get available_at at 08:45 America/New_York on the filed day, and special filings stay null. That rule belongs to Federal Register and is not copied onto EDGAR.

Limits

What the corpus does not hold

  • available_at stays null on SEC rows; the acceptance receipt is a different measurement and we will not promote it.
  • The corpus does not hold every 8-K. Ten months are in, the holes are labeled, and a missing day answers 409 instead of an empty list.
  • This is filing index metadata. It is not a headline feed, and the filing text is not on the row.
  • The certified backfill ends 2023-03-31 and the live tape starts 2026-08-26, so nothing here answers a question about 2024 or 2025.

Check it

Run the cut

The demo runs both instants, diffs them, and shows the coverage behind each answer. The playground needs no account, and its responses carry sample: true.

The full policy is on clocks and coverage. Plans and what the corpus covers.