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.
| Field | On an SEC row |
|---|---|
published_at | The 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_at | First 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_at | When the row reached our store. Selectable, and it answers what we held by T rather than what the public held by T. |
acceptance_at | EDGAR’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_at | The 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 matched | Day we have not ingested | |
|---|---|---|
| HTTP | 200 | 409 |
status | ok | coverage_missing |
count | 0 | JSON null |
results | [] | [] |
| Where the day appears | coverage.touched | coverage.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
$ 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.
$ 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.
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_atstays 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.
Nearby