Data API
REST endpoints for ByteTrader's market data: offerings and dilution, insider intelligence, corporate filings, calendars, 13F ownership, fails-to-deliver and point-in-time fundamentals, plus the market events and trade signals. The same data is free inside the desktop app on every plan; calling it from your own code needs a PRO, Founder or Lifetime Data API key.
Authentication and plans
Every /api/v1 call needs a Data API key, passed as a Bearer token. Keys come with the PRO, Founder and Lifetime plans; create up to 10 on Account › Data API Keys. A key carries the data:read and stream:read scopes. Inside the desktop app the same data is free on every plan, with no key.
# Every call: your PRO key as a Bearer token
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/offerings?symbols=NXH&take=5"
- Base URL:
https://api.byte-trader.com/api/v1. HTTPS only. - Keep keys on your server. Don't put them in browser or mobile code, and revoke any key you think has leaked.
- A key whose plan has no Data API gets
403with "Your plan does not include Data API access. Upgrade to PRO." - Use of the data is covered by the Data API Terms: your own or your organization's internal use, no resale or redistribution.
Conventions and errors
Responses are JSON with camelCase field names. Instants are ISO-8601 UTC (2026-10-06T11:32:07Z); calendar dates are yyyy-MM-dd, and the calendar endpoints use US Eastern dates. Lists in the query string are comma-separated. Securities are identified by ticker and SEC CIK; CUSIPs are never returned.
Response envelopes
- Offerings, insiders and filings:
{ data, nextCursor, schemaVersion, source }. - Calendars:
{ data, nextCursor, schemaVersion }, withsourceon every row. - Fails-to-deliver, 13F, text changes and point-in-time fundamentals:
{ schemaVersion, source, data, nextCursor, note }. Thenoteexplains how the dataset is built. /eventsand/signalsreturn a plain JSON array, with paging in the response headers.
Errors
// 400: a parameter is invalid (the message says which)
{ "error": "dateField must be 'knownAt' or 'filedAt'." }
// 403: the key's plan has no Data API, or the key lacks the data:read scope
{ "error": "Your plan does not include Data API access. Upgrade to PRO." }
// 429: over the per-key limit (see the Retry-After header)
{ "error": "Rate limit exceeded (120 requests/minute per API key)." }
// 503: that dataset is temporarily unavailable; retry (some endpoints send Retry-After: 60)
{ "error": "This dataset is temporarily unavailable. Retry shortly." }
Pagination
Every list endpoint is cursor-paged. Ask for a page with take, then pass the returned cursor back unchanged, with the same filters, until it comes back null. Cursors are opaque: don't build or edit them.
- The body carries
nextCursor(nullon the last page)./events,/signals,/offeringsand/filingsalso sendX-Has-MoreandX-Next-Cursorheaders; for/eventsand/signalsthe headers are the only place the cursor appears. - A cursor belongs to its sort column: change
dateField(or switch/eventsbetween legacy and point-in-time mode) and the old cursor is rejected with a400. order=desc(newest first) is the default where it's offered; useorder=ascto sync forward from a date.- Page sizes: up to 1,000 rows on most endpoints, 500 on legacy
/eventsand/signals, and up to 50,000 per page on bulk export.
# Page 1
curl -s -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/insiders/transactions?symbols=ISRG&openMarketOnly=true&take=100"
# Next page: the same filters plus the nextCursor from the previous response
curl -s -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/insiders/transactions?symbols=ISRG&openMarketOnly=true&take=100&cursor=a25vd25BdHw2MzkyNTE3NzA1NjAwMDAwMDB8NzcxMjA"
Point in time (asOf and knownAt)
Every row records when its information became public, so a backtest can ask what was knowable at a given moment and never see a filing early.
knownAt(UTC) is the first instant the information was public. For an SEC filing that's its EDGAR acceptance time during EDGAR's dissemination hours (06:00 to 17:30 ET on business days, 22:00 ET for Forms 3, 4 and 5). A filing accepted after hours counts from 06:00 ET on the next business day, unless our live pipeline saw it on EDGAR sooner; thenknownAtis that moment.asOf(ISO-8601 UTC) returns only rows withknownAt≤asOf, and derived state as it stood then: a Form 144's executed shares, an offering's latest revision, what the earnings calendar said.knownAtBasison events says howknownAtwas set:acceptance,dissemination(the next 06:00 ET release),observed(our pipeline saw it before the official release time),published(an agency's publication time) ordetected(ByteTrader's own signals, from when they were emitted).- History loaded after the fact (back to 2016 for SEC filing events) carries
backfill: true. It was never pushed live, and itsknownAtis the filing's public time, not the load time. - Amendments (8-K/A, 4/A, 13D/A …) are their own rows, with
amendment: trueandrevisionOfpointing at the original.revisions=latestkeeps only the newest known version. - Other knownAt rules: SEC comment letters count from their public release, fails-to-deliver from the SEC's publication, 13F holdings from the filing date at 17:30 ET.
Rate limits
Each API key can make 120 requests a minute, with bursts up to the same number. Over the limit you get 429 with a Retry-After header. Bulk export also allows one export at a time per key.
- Page with large
takevalues (up to 1,000) instead of many small calls, and use bulk export for history. - A dataset that's briefly unavailable answers
503; retry after theRetry-Afterseconds when it's sent, or after a minute.
Sources and attribution
The data is built from US government sources, which are public domain: SEC EDGAR, the Bureau of Labor Statistics, the Bureau of Economic Analysis, the Census Bureau, the Federal Reserve (FOMC), the U.S. Treasury (FiscalData) and the Federal Register. The classifications, scores and signals are ByteTrader's own.
- Every response or row has a
sourcefield, for example"SEC EDGAR"or"U.S. Bureau of Labor Statistics". Show it where you display the data, e.g. "Source: SEC EDGAR". - Filing rows link back to the original on sec.gov (
secUrlorurl). - Parsed fields carry a
parserVersion, and offering terms aparseConfidence(high,partial,low). Values are as filed and can be wrong when the filing is; check the filing before acting on a number. - Nothing here is investment advice. Event types other than ByteTrader's trade signals are information, not signals.
Market events
Every market event ByteTrader publishes: SEC filings classified by type, and ByteTrader's own derived events. Without point-in-time parameters the endpoint behaves as it always has (windows and paging on detectedAt, no knownAt fields). Add asOf, or any other point-in-time parameter, to get the point-in-time mode: knownAt windows, history back to the backfill, linked amendments and up to 1,000 rows a page.
/api/v1/eventsPRO key| Parameter | Type | Description |
|---|---|---|
symbols |
string | Comma-separated tickers, up to 100. |
types |
string | Comma-separated event types (up to 50 in point-in-time mode), e.g. ProposedSale,LateFiling. See the event-type list. |
since / until |
ISO-8601 UTC | Time window. Legacy mode windows on detectedAt; point-in-time mode on dateField (from / to are accepted as aliases). |
take |
int | Page size. Default 100; max 500, or 1,000 in point-in-time mode. |
cursor |
string | X-Next-Cursor from the previous page, unchanged. A legacy cursor isn't accepted in point-in-time mode, and the other way round. |
order |
string | desc (default, newest first) or asc (forward sync). |
asOf |
ISO-8601 UTC | Point in time: only events with knownAt ≤ asOf. Any of the parameters below also switches to point-in-time mode. |
asOfBasis |
string | knownAt (default) or detectedAt: also require that ByteTrader had published the event by asOf, i.e. what a live subscriber could have seen. |
dateField |
string | knownAt (default in point-in-time mode) or detectedAt: the column that since, until, order and cursor use. |
cik |
string | Comma-separated issuer CIKs, up to 100. |
includeBackfill |
bool | Include history loaded after the fact (backfill: true). Default true. |
revisions |
string | all (default) or latest: drop an original filing once an amendment to it is known. |
Example request
curl -i -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/events?symbols=ISRG&types=ProposedSale,InsiderTransaction&asOf=2026-09-16T00:00:00Z&take=50"
Example response
A real Form 144 (Intuitive Surgical, filed 2026-09-15); ids and the detection time are illustrative, and payloadJson is shortened.
// Headers: X-Has-More: false, X-As-Of: 2026-09-16T00:00:00Z
[
{
"marketEventId": 191734,
"eventType": "ProposedSale",
"symbolId": 2871,
"symbol": "ISRG",
"cik": "1035267",
"source": "EDGAR",
"severity": "Info",
"title": "ISRG: FREDRIK WIDMAN (Officer) filed to sell 2,178 sh ($823.15K) (Form 144) under a 10b5-1 plan",
"summary": "Notice of proposed sale of 2,178 sh of Common ($823.15K), 0.000617% of 353,278,038 sh outstanding. Broker: Morgan Stanley Smith Barney LLC Executive Financial Services (NASDAQ). Approximate sale date 2026-09-15. Acquired via Exercise of Stock Options. Rule 10b5-1 plan adopted 2026-06-08. Pending sale until a matching Form 4 or 2026-12-14. Source: SEC EDGAR.",
"payloadJson": "{\"accession\":\"0001950047-26-009515\",\"formType\":\"144\",\"cik\":\"1035267\",\"symbol\":\"ISRG\",\"source\":\"SEC EDGAR\",\"knownAt\":\"2026-09-15T20:43:19Z\",\"knownAtBasis\":\"acceptance\",\"seller\":{\"cik\":\"1897970\",\"name\":\"FREDRIK WIDMAN\",\"relationships\":[\"Officer\"]},\"securityClass\":\"Common\",\"shares\":2178,\"aggregateMarketValue\":823153.32,\"is10b51\":true,\"planAdoptionDate\":\"2026-06-08\",\"status\":\"Pending\",\"pendingUntil\":\"2026-12-14T20:43:19Z\",\"executedShares\":0}",
"accessionNumber": "0001950047-26-009515",
"formType": "144",
"itemNumbersCsv": null,
"filedAt": "2026-09-15T20:43:19Z",
"detectedAt": "2026-09-15T20:44:02Z",
"dedupKey": "0001950047-26-009515:ProposedSale",
"knownAt": "2026-09-15T20:43:19Z",
"knownAtBasis": "acceptance",
"backfill": false,
"amendment": false,
"revisionOf": null
}
]
Event types are listed on the market data page. Structured detail for each type is in payloadJson, and every payload carries knownAt, accession, formType, cik and source. The live counterparts are the /marketevents SignalR hub and event webhooks.
Trade signals
ByteTrader's own derived long/short detections (event type TradeSignal), as a first-class endpoint. Parameters: symbols, from, to, take, cursor, order, plus the same point-in-time parameters as /events. Rows have the /events shape; direction, confidence and levels are in payloadJson.
/api/v1/signalsPRO key# Trade signals for two symbols, as known at the open of 2026-10-01
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/signals?symbols=NVDA,AMD&asOf=2026-10-01T13:30:00Z&from=2026-09-01T00:00:00Z"
With asOf, a signal counts from when it was emitted (knownAtBasis: "detected"), so a backtest sees only signals that existed at that moment. Signals are model output, not advice, and past signals don't predict future results.
Bulk export (NDJSON)
Large history pulls as newline-delimited JSON: one JSON object per line, then one _meta line with the count, hasMore and the next cursor. If a body ends without its _meta line it was cut short; fetch that page again. Bulk export works with API keys only, one export at a time per key.
/api/v1/bulkPRO keyLists the datasets:
{
"data": [
{
"name": "events",
"description": "Market events (SEC filings classified by ByteTrader, trade signals) with knownAt, 2016 onward.",
"schemaVersion": 1,
"source": "SEC EDGAR (filings); ByteTrader (classifications, signals)",
"format": "ndjson",
"path": "/api/v1/bulk/events"
}
],
"schemaVersion": 1
}
/api/v1/bulk/{dataset}PRO key| Parameter | Type | Description |
|---|---|---|
datasetrequired |
path | events (the only dataset today; GET /api/v1/bulk lists them). |
fromrequired |
ISO-8601 UTC | Start of the window on dateField. Required unless you pass cursor. |
to |
ISO-8601 UTC | End of the window. |
limit |
int | Rows per page, 1 to 50,000. Default 10,000. |
cursor |
string | nextCursor from the previous page's _meta line, with the same filters. |
types, symbols, cik |
string | Comma-separated filters, as on /events. |
asOf, asOfBasis, dateField, includeBackfill, revisions |
Point-in-time options, as on /events. Rows come oldest first (order=asc) unless you pass order=desc. |
Example request
# Every Form 4 event since 2016, 10,000 rows per page, saved to a file
curl -s -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/bulk/events?from=2016-01-01T00:00:00Z&types=InsiderTransaction&limit=10000" \
-o insider-events-page1.ndjson
# The last line says whether there's more, and the cursor for the next page
tail -n 1 insider-events-page1.ndjson
Example response (application/x-ndjson)
Each line is an /events point-in-time row (values shortened here); the last line is _meta.
{"marketEventId":1204550,"eventType":"InsiderTransaction","symbolId":118,"symbol":"XMPL","cik":"1234567","source":"EDGAR","severity":"Notable","title":"…","summary":null,"payloadJson":"{…}","accessionNumber":"…","formType":"4","itemNumbersCsv":null,"filedAt":"2016-03-02T21:05:11Z","detectedAt":"2016-03-02T21:05:11Z","dedupKey":"…","knownAt":"2016-03-02T21:05:11Z","knownAtBasis":"acceptance","backfill":true,"amendment":false,"revisionOf":null}
{"_meta":{"dataset":"events","count":10000,"hasMore":true,"nextCursor":"cDF8a3w2MzU5MjU0OTUxMTAwMDAwMDB8MTIwNDU1MQ","schemaVersion":1,"source":"SEC EDGAR (filings); ByteTrader (classifications, signals)","generatedAt":"2026-10-24T18:00:00Z"}}
Offerings and dilution
Deal terms for every offering-family filing: 424B prospectuses, S-1, S-3 and F-1/F-3 registrations, SEC effectiveness notices, ATM programs, PIPEs and convertibles disclosed in 8-Ks, Form D private placements and S-8 plan registrations. Each row has the stage, size, price, discount to the last sale, warrants, lock-up and dilution as a percent of shares outstanding, with the full parsed terms in detail. Changed terms on a re-read add a revision.
/api/v1/offeringsPRO key| Parameter | Type | Description |
|---|---|---|
symbols |
string | Comma-separated tickers, up to 100. |
cik |
string | Issuer CIK. |
from / to |
ISO-8601 UTC | Window on dateField. |
dateField |
string | knownAt (default) or filedAt. |
stages |
string | Filed, Effective, Priced, Closed. |
types |
string | Offering type: IPO, Underwritten, BestEfforts, RegisteredDirect, ATM, PIPE, ConvertibleNote, Shelf, Registration, Resale, Rights, DividendReinvestment, WarrantExercise, Debt, PrivatePlacement, EquityPlan, OtherIssuance, Unknown. |
eventTypes |
string | The event type the filing was published under: Offering, OfferingUpdate, IpoPricing, PrivatePlacement, EquityPlanRegistration, or the 8-K type for a raise disclosed in an 8-K. |
forms |
string | SEC form types, e.g. 424B5,S-3. |
minDilutionPct |
decimal | Only deals with dilutionPct at or above this value. |
asOf |
ISO-8601 UTC | Point in time: rows with knownAt ≤ asOf, each filing at its latest revision as of then. |
detail |
bool | Include the full parsed terms object (detail). Default true. |
take / cursor / order |
Page size (default 100, max 1,000), nextCursor, and desc (default) or asc. |
Example request
# Priced deals that diluted holders by 10% or more, newest first
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/offerings?stages=Priced&minDilutionPct=10&take=50"
Example response
Terms from a real registered direct offering (NXH 424B5); ids and timestamps are illustrative.
{
"data": [
{
"offeringId": 4182,
"accessionNumber": "0001140361-26-038731",
"revision": 1,
"revisionOf": null,
"marketEventId": 190455,
"eventType": "Offering",
"symbol": "NXH",
"cik": "1130713",
"formType": "424B5",
"fileNumber": "333-297978",
"stage": "Priced",
"type": "RegisteredDirect",
"security": "Common",
"isPreliminary": false,
"shares": 11243511,
"preFundedShares": 5241997,
"overallotmentShares": null,
"warrantShares": 16617754,
"price": 2.76,
"grossProceedsUsd": 45500002.08,
"offeringAmountUsd": null,
"lastSalePriceAsFiled": 2.76,
"discountPct": 0,
"atmCapacityUsd": null,
"shelfSizeUsd": null,
"shelfRemainingUsd": null,
"sharesOutstandingBefore": 98708140,
"sharesOutstandingSource": "Prospectus",
"dilutionPct": 16.7,
"dilutionPctFullyDiluted": 33.54,
"overhangPct": null,
"lockupDays": 90,
"lockupExpiresOn": "2027-01-03T00:00:00",
"proposedSymbol": null,
"exchange": null,
"investorCount": null,
"exemptions": null,
"industry": null,
"underwriters": "Rodman & Renshaw",
"effectiveAt": null,
"parseConfidence": "high",
"parserVersion": "offering-v1",
"filedAt": "2026-10-06T11:32:07Z",
"knownAt": "2026-10-06T11:32:07Z",
"backfill": false,
"detail": {
"stage": "Priced",
"type": "RegisteredDirect",
"security": "Common",
"shares": 11243511,
"preFundedShares": 5241997,
"price": 2.76,
"grossProceedsUsd": 45500002.08,
"lastSalePriceAsFiled": 2.76,
"lastSaleDate": "2026-10-02T00:00:00",
"discountPct": 0,
"warrants": [
{ "kind": "Common", "shares": 16123189, "exercisePrice": 3.45, "termYears": 5 },
{ "kind": "PlacementAgent", "shares": 494565 }
],
"underwriters": ["Rodman & Renshaw"],
"agentRole": "PlacementAgent",
"registrationFileNumber": "333-297978",
"sharesOutstandingBefore": 98708140,
"sharesOutstandingAsOf": "2026-10-04T00:00:00",
"sharesOutstandingSource": "Prospectus",
"dilutionPctOfShares": 16.7,
"dilutionPctFullyDiluted": 33.54,
"dilutionBasis": "Offered",
"lockups": [{ "days": 90, "expiresOn": "2027-01-03T00:00:00" }],
"sources": ["424B5"],
"parseConfidence": "high",
"parserVersion": "offering-v1"
},
"secUrl": "https://www.sec.gov/Archives/edgar/data/1130713/000114036126038731/0001140361-26-038731-index.htm",
"source": "SEC EDGAR"
}
],
"nextCursor": "bzE6NjM5MjY4ODMxMjcwMDAwMDAwOjQxODI",
"schemaVersion": "offerings-v1",
"source": "SEC EDGAR"
}
dilutionPct is the new shares as a percent of shares outstanding before the deal; dilutionPctFullyDiluted adds pre-funded shares and warrants. sharesOutstandingSource says where the share count came from.
Offering overhang
What a company can still sell, or has recently sold, into the market: each registration's shelf size, what's been used and what's left, ATM programs in place, live warrants from priced deals, the last raise, and the dollars and dilution raised in the last 90 days.
/api/v1/offerings/overhangPRO key| Parameter | Type | Description |
|---|---|---|
symbolsrequired |
string | Comma-separated tickers, up to 25. |
asOf |
ISO-8601 UTC | Point in time (default now): what was known then, and the 90-day window ends there. |
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/offerings/overhang?symbols=NXH"
{
"data": [
{
"symbol": "NXH",
"cik": "1130713",
"asOf": "2026-10-24T18:00:00Z",
"shelves": [
{
"fileNumber": "333-297978",
"registrationForm": null,
"registeredAt": null,
"effectiveAt": null,
"shelfSizeUsd": null,
"usedUsd": 45500002.08,
"remainingUsd": null,
"takedowns": 1
}
],
"atmPrograms": [],
"warrants": [
{
"accessionNumber": "0001140361-26-038731",
"filedAt": "2026-10-06T11:32:07Z",
"kind": "Common",
"shares": 16123189,
"exercisePrice": 3.45,
"termYears": 5,
"expiresOnApprox": "2031-10-06T06:00:00"
},
{
"accessionNumber": "0001140361-26-038731",
"filedAt": "2026-10-06T11:32:07Z",
"kind": "PlacementAgent",
"shares": 494565,
"exercisePrice": null,
"termYears": null,
"expiresOnApprox": null
}
],
"lastRaise": {
"offeringId": 4182,
"accessionNumber": "0001140361-26-038731"
// … the same row shape as /api/v1/offerings
},
"raised90dUsd": 45500002.08,
"dilution90dPct": 16.7,
"raises90d": 1,
"source": "SEC EDGAR"
}
],
"schemaVersion": "offerings-v1",
"source": "SEC EDGAR"
}
A shelf registered before our data begins has shelfSizeUsd and remainingUsd of null; only its takedowns are counted. expiresOnApprox is the filing date plus the warrant term, so treat it as approximate.
Insider transactions
Form 4 and Form 5 lines with the insider's role, the open-market and 10b5-1 flags, ownership after the trade, and a routine or opportunistic class. The class follows Cohen, Malloy and Pomorski (2012): an insider who made open-market trades in each of the three prior years is routine if those trades share a calendar month and opportunistic if they don't; anyone else is unclassified. Purchases through ESPP, DRIP, 401(k) or ESOP plans, and buys under $25,000, are flagged so you can drop them.
/api/v1/insiders/transactionsPRO keyParameters (all insider endpoints)
| Parameter | Type | Description |
|---|---|---|
symbols |
string | Comma-separated tickers, up to 100. |
cik |
string | Issuer CIK. |
from / to |
ISO-8601 | Window on dateField (a date or a UTC instant). |
asOf |
ISO-8601 UTC | Point in time: only filings known by then, with derived state (a Form 144's executed shares, plan links) as of then. A future asOf means now. |
take / cursor / order |
Page size (default 100, max 1,000), nextCursor (bound to its dateField), desc or asc. |
Transaction filters
| Parameter | Type | Description |
|---|---|---|
ownerCik |
string | The insider's (reporting owner's) CIK. |
codes |
string | Form 4 transaction codes, e.g. P,S (P purchase, S sale, A award, M option exercise, F tax withholding, G gift). |
openMarketOnly |
bool | Open-market purchases and sales only. |
opportunisticOnly |
bool | Only trades classed Opportunistic. |
traderClass |
string | Routine, Opportunistic, Unclassified, InsufficientHistory. |
exclude10b51 |
bool | Drop trades made under a Rule 10b5-1 plan. |
excludeSmallBuys |
bool | Drop purchases flagged smallBuy (plan purchases and buys under $25,000). |
excludePlanPurchases |
bool | Drop ESPP, DRIP, 401(k) and ESOP purchases. |
excludeDerivatives / excludeAmendments |
bool | Drop derivative-table lines / amended filings. |
minValue |
decimal | Minimum transaction value (USD). |
dateField |
string | knownAt (default), filedAt or tradeDate. |
Example request
# Open-market trades by officers and directors, skipping 10b5-1 plan trades
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/insiders/transactions?symbols=ISRG&openMarketOnly=true&from=2026-09-01"
Example response
A line from a real Form 4 (ISRG, filed 2026-09-16); ids are illustrative.
{
"data": [
{
"id": 77120,
"accession": "0001897970-26-000008",
"lineNumber": 2,
"formType": "4",
"isAmendment": false,
"issuerCik": "1035267",
"symbol": "ISRG",
"owner": {
"cik": "1897970",
"name": "Widman Fredrik",
"roleRank": "Officer",
"officerTitle": "VP Corporate Controller",
"isDirector": false,
"isOfficer": true,
"isTenPercentOwner": false,
"ownerCount": 1
},
"securityTitle": "Common Stock",
"isDerivative": false,
"code": "S",
"acquiredDisposed": "D",
"transactionDate": "2026-09-15",
"shares": 546,
"pricePerShare": 374.44,
"value": 204444.24,
"sharesOwnedAfter": 1026,
"directIndirect": "D",
"natureOfOwnership": null,
"openMarket": true,
"is10b51": true,
"is10b51Source": "footnote",
"planPurchase": false,
"smallBuy": false,
"smallBuyReason": null,
"pctOfHoldingsChanged": 34.7328,
"pctOfSharesOutstanding": 0.000155,
"ownershipAfterPctOfOutstanding": 0.00029,
"exercisePrice": null,
"expirationDate": null,
"underlyingShares": null,
"traderClass": "InsufficientHistory",
"traderClassYear": null,
"routineMonth": null,
"proposedSale": { "id": 3, "accession": "0001950047-26-009515", "adoptionDate": null },
"tradingPlan": null,
"filedAt": "2026-09-16T17:35:36Z",
"knownAt": "2026-09-16T17:37:36Z",
"backfill": false,
"source": "SEC EDGAR"
}
],
"nextCursor": null,
"schemaVersion": 1,
"source": "SEC EDGAR"
}
traderClass is InsufficientHistory while our insider history doesn't yet cover the three years before the trade. proposedSale links the Form 144 the sale was filed under, and tradingPlan the 10b5-1 plan it ran on, when we can match them.
Form 144 proposed sales
Notices of planned sales by insiders and affiliates. Each notice is Pending until matching Form 4 sales show up, then PartiallyExecuted or Executed; it Expires after 90 days, or is Superseded by a newer notice. Once closed, outcome says whether the shares were sold or kept.
/api/v1/insiders/proposed-salesPRO key| Parameter | Type | Description |
|---|---|---|
sellerCik |
string | The seller's CIK. |
status |
string | Pending, PartiallyExecuted, Executed, Expired, Superseded, as of asOf. |
exclude10b51 |
bool | Drop notices under a Rule 10b5-1 plan. |
minValue |
decimal | Minimum aggregate market value (USD). |
excludeAmendments |
bool | Drop 144/A amendments. |
dateField |
string | knownAt (default), filedAt or approxSaleDate. |
# What the Form 144 looked like the moment before its Form 4 was filed
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/insiders/proposed-sales?symbols=ISRG&asOf=2026-09-16T00:00:00Z"
A real Form 144, seen as of the night before its Form 4 was filed, so it's still pending; the id is illustrative.
{
"data": [
{
"id": 3,
"accession": "0001950047-26-009515",
"formType": "144",
"isAmendment": false,
"issuerCik": "1035267",
"symbol": "ISRG",
"issuerName": "Intuitive Surgical, Inc.",
"seller": { "cik": "1897970", "name": "FREDRIK WIDMAN", "relationships": ["Officer"] },
"securityClass": "Common",
"shares": 2178,
"aggregateMarketValue": 823153.32,
"sharesOutstanding": 353278038,
"pctOfSharesOutstanding": 0.000617,
"approxSaleDate": "2026-09-15",
"exchange": "NASDAQ",
"broker": "Morgan Stanley Smith Barney LLC Executive Financial Services",
"acquisitionNatures": ["Exercise of Stock Options"],
"acquiredDate": "2026-09-15",
"is10b51": true,
"planAdoptionDate": "2026-06-08",
"planAdoptionDates": ["2026-06-08"],
"soldPast3Months": { "shares": null, "grossProceeds": null },
"noticeDate": "2026-09-15",
"form4Expected": true,
"status": "Pending",
"outcome": null,
"executedShares": 0,
"executedPct": null,
"matchedTransactions": 0,
"firstExecutionDate": null,
"lastExecutionDate": null,
"pendingUntil": "2026-12-14T20:43:19Z",
"supersededBy": null,
"tradingPlanId": null,
"filedAt": "2026-09-15T20:43:19Z",
"knownAt": "2026-09-15T20:45:19Z",
"backfill": false,
"source": "SEC EDGAR"
}
],
"nextCursor": null,
"schemaVersion": 1,
"source": "SEC EDGAR"
}
10b5-1 trading plans
Rule 10b5-1 and non-Rule 10b5-1 trading arrangements that officers and directors adopted or ended, read from Item 408 of each 10-Q and 10-K, with the plan's duration and share amount where the company discloses them, and the trades later linked to the plan.
/api/v1/insiders/plansPRO key| Parameter | Type | Description |
|---|---|---|
ownerCik |
string | The insider's CIK, when the plan is linked to one. |
action |
string | Adopted or Terminated. |
planType |
string | Rule10b5-1 or NonRule10b5-1. |
minValue |
decimal | Minimum aggregate shares covered by the plan. |
dateField |
string | knownAt (default), filedAt or adoptionDate. |
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/insiders/plans?symbols=ISRG&action=Adopted"
From a real 10-Q (ISRG, Q2 2026); the id is illustrative.
{
"data": [
{
"id": 512,
"accession": "0001035267-26-000058",
"formType": "10-Q",
"issuerCik": "1035267",
"symbol": "ISRG",
"periodStart": "2026-04-01",
"periodEnd": "2026-06-30",
"individual": {
"name": "Gary S. Guthart",
"title": "the Company’s Executive Chair of the Board of Directors",
"ownerCik": null
},
"action": "Adopted",
"planType": "Rule10b5-1",
"adoptionDate": "2026-05-07",
"terminationDate": null,
"expirationDate": "2027-06-15",
"expirationText": "June 15, 2027",
"durationDays": 404,
"aggregateShares": 229906,
"linked": { "transactions": 0, "sharesSold": 0, "firstTradeDate": null, "lastTradeDate": null, "proposedSales": 0 },
"filedAt": "2026-07-21T21:25:51Z",
"knownAt": "2026-07-21T21:37:00Z",
"backfill": false,
"source": "SEC EDGAR"
}
],
"nextCursor": null,
"schemaVersion": 1,
"source": "SEC EDGAR"
}
Issuer and insider profiles
One issuer's insiders with their current holdings and class, a 90-day open-market summary, pending Form 144 sales, recent plan activity and a page of transactions; or one insider (by reporting-owner CIK) across every company they file for. The transaction filters apply to the transactions page.
/api/v1/insiders/issuer/{symbol}PRO key/api/v1/insiders/{cik}PRO key# One issuer: insiders and holdings, a 90-day summary, pending sales, plans and recent transactions
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/insiders/issuer/ISRG?openMarketOnly=true&take=25"
# One insider across every issuer they file for (reporting-owner CIK)
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/insiders/1897970"
{
"data": {
"symbol": "ISRG",
"issuerCik": "1035267",
"asOf": "2026-10-24T18:00:00Z",
"summary": {
"windowDays": 90,
"openMarket": { "buys": 0, "buyValue": 0, "sells": 1, "sellValue": 204444.24, "sells10b51": 1, "distinctBuyers": 0, "distinctSellers": 1 },
"opportunisticBuys": 0,
"pendingSales": 0,
"pendingSaleValue": 0,
"planAdoptions12Months": 5,
"planTerminations12Months": 0
},
"insiders": [
{
"ownerCik": "1897970",
"name": "Widman Fredrik",
"issuerCik": "1035267",
"symbol": "ISRG",
"roleRank": "Officer",
"officerTitle": "VP Corporate Controller",
"isDirector": false,
"isOfficer": true,
"isTenPercentOwner": false,
"firstKnownAt": "2022-03-14T20:12:09Z",
"lastFiledAt": "2026-09-16T17:35:36Z",
"lastTransactionDate": "2026-09-15",
"lastCode": "S",
"traderClass": "InsufficientHistory",
"traderClassYear": null,
"commonSharesHeld": 1026,
"pctOfSharesOutstanding": 0.00029,
"holdings": [],
"openMarket12Months": { "buys": 0, "buyValue": 0, "sells": 1, "sellValue": 204444.24, "sells10b51": 1, "distinctBuyers": 0, "distinctSellers": 1 }
}
],
"pendingSales": [],
"tradingPlans": [],
"transactions": []
// pendingSales, tradingPlans and transactions use the shapes of /proposed-sales, /plans and /transactions
},
"nextCursor": null,
"schemaVersion": 1,
"source": "SEC EDGAR"
}
Unknown symbols and CIKs answer 404.
Corporate filings
Corporate events from SEC filings, in 15 categories, each with typed kind, role and flag fields: late filings, executive changes, auditor changes, restructurings, terminated agreements, tender offers, 13D/G stake changes, delistings, deregistrations, merger votes, spin-offs, shareholder meetings, vote results, SEC comment letters and material 6-K reports.
/api/v1/filingsPRO key/api/v1/filings/{slug}PRO key/api/v1/filings/typesPRO key/api/v1/filings/{marketEventId}PRO key| Parameter | Type | Description |
|---|---|---|
types |
string | Category names or slugs, comma-separated (see /api/v1/filings/types), e.g. LateFiling,stake-changes. |
symbols / cik |
string | Up to 100 tickers / an issuer CIK. |
severity |
string | Info, Notable, Critical (comma-separated). |
minSeverity |
string | The lowest severity to include. |
kind / role |
string | The category's typed fields, e.g. kind=Departure&role=CFO for executive changes. /types lists what each means. |
flagged |
bool | Only rows the category flags (abrupt departure, auditor resignation, going dark, threshold crossing …). |
includeSections |
bool | Include 8-K item sections filed inside another event (e.g. a restructuring disclosed in an earnings 8-K). Default true. |
includeAmendments |
bool | Default true. |
dateField |
string | knownAt (default), filedAt or detectedAt. |
from / to / asOf |
ISO-8601 UTC | Window, and the point in time. A comment letter counts from its public release, not its letter date. |
take / cursor / order |
Page size (default 100, max 1,000), nextCursor, desc or asc. |
Per-category routes take the same parameters: late-filings, exec-changes, auditor-changes, restructurings, agreement-terminations, tender-offers, stake-changes, delistings, deregistrations, merger-votes, spin-offs, shareholder-meetings, vote-results, comment-letters, foreign-issuer-reports. /filings/{marketEventId} returns every category row of one event.
Example request
# Abrupt CFO departures in October
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/filings/exec-changes?role=CFO&flagged=true&from=2026-10-01T00:00:00Z"
Example response
A real 8-K Item 5.02 (FuelCell Energy); the id is illustrative.
{
"data": [
{
"id": 189377,
"type": "ExecChange",
"eventType": "ExecChange",
"symbol": "FCEL",
"cik": "886128",
"formType": "8-K",
"accession": "0001104659-26-114207",
"severity": "Notable",
"title": "FCEL: CFO departure - termination (8-K Item 5.02)",
"summary": null,
"filedAt": "2026-10-07T20:30:00Z",
"knownAt": "2026-10-07T20:30:00Z",
"detectedAt": "2026-10-07T20:32:05Z",
"kind": "Departure",
"role": "CFO",
"flag": true,
"amendment": false,
"section": false,
"url": "https://www.sec.gov/Archives/edgar/data/886128/000110465926114207/0001104659-26-114207-index.htm",
"source": "SEC EDGAR",
"details": { "parserVersion": "corp-1", "role": "CFO", "kind": "Departure", "abrupt": true, "abruptReasons": ["Termination"] }
}
],
"nextCursor": null,
"schemaVersion": 1,
"source": "SEC EDGAR"
}
The taxonomy: /api/v1/filings/types
Each category's event types, forms, and what its kind, role and flag mean:
{
"schemaVersion": 1,
"source": "SEC EDGAR",
"types": [
{
"type": "LateFiling",
"route": "/api/v1/filings/late-filings",
"eventTypes": ["LateFiling"],
"forms": ["NT 10-K", "NT 10-Q", "NT 10-K/A", "NT 10-Q/A"],
"description": "Form 12b-25 notice that a 10-K / 10-Q will be late: period, reason category, grace-period expectation.",
"kind": "reason category",
"role": "late report form",
"flag": "not expected within the grace period, or a non-routine reason",
"section": false
},
{
"type": "StakeChange",
"route": "/api/v1/filings/stake-changes",
"eventTypes": ["ActivistStake", "PassiveStake"],
"forms": ["SCHEDULE 13D", "SCHEDULE 13G", "SCHEDULE 13D/A", "SCHEDULE 13G/A"],
"description": "Schedule 13D/G (structured XML): % of class, delta vs the holder's previous filing, 5/10/20/50% crossings, passive→active switches.",
"kind": "Initial | Increase | Decrease | Unchanged | Exit | Unknown",
"role": "13D | 13G",
"flag": "switched from 13G to 13D, or crossed a threshold upward",
"section": false
}
// … 13 more categories
]
}
10-K and 10-Q text changes
How much a company's annual or quarterly report changed from the comparable prior report: cosine and Jaccard similarity of the whole document, the Item 1A risk factors and the MD&A, word counts, and the risk-factor headings that are new. Research on 'Lazy Prices' studied this kind of change; ByteTrader publishes the measurements, not a prediction.
/api/v1/filings/text-changesPRO key| Parameter | Type | Description |
|---|---|---|
symbol / cik |
string / int | One company. Without either, pass from for every company in the window. |
form |
string | 10-K or 10-Q. |
from / to |
ISO-8601 UTC | Window on knownAt. |
asOf |
ISO-8601 UTC | Only scores public by then. |
take / cursor |
Page size (default 100, max 1,000) and nextCursor. |
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/filings/text-changes?symbol=XMPL&form=10-K"
Illustrative values (XMPL is a placeholder ticker).
{
"schemaVersion": 1,
"source": "Derived from 10-K/10-Q filings (Source: SEC EDGAR)",
"data": [
{
"accession": "0001234567-26-000012",
"cik": "1234567",
"symbol": "XMPL",
"formType": "10-K",
"periodOfReport": "2025-12-31",
"acceptedAt": "2026-02-24T21:10:44Z",
"knownAt": "2026-02-24T21:10:44Z",
"priorAccession": "0001234567-25-000009",
"priorPeriodOfReport": "2024-12-31",
"simCosineFull": 0.9412,
"simJaccardFull": 0.7735,
"simCosineRisk": 0.8826,
"simJaccardRisk": 0.6512,
"simCosineMdna": 0.9104,
"simJaccardMdna": 0.7021,
"wordsFull": 61844,
"wordsRisk": 14210,
"wordsMdna": 9876,
"priorWordsFull": 58302,
"priorWordsRisk": 12655,
"priorWordsMdna": 9420,
"riskHeadings": 42,
"addedRiskHeadingCount": 3,
"removedRiskHeadingCount": 1,
"addedRiskHeadings": ["Our customer concentration has increased", "…"],
"status": "ok",
"parserVersion": "lazy-1",
"secUrl": "https://www.sec.gov/Archives/edgar/data/1234567/000123456726000012/0001234567-26-000012-index.htm"
}
],
"nextCursor": null,
"note": null
}
status is ok, or names what couldn't be compared (e.g. no-prior, risk:missing).
Calendars
Forward-looking dates: earnings (estimated from each company's filing history, then confirmed from its own announcement), IPOs and lock-up expirations, FDA target action dates and advisory committees, macro releases, shareholder meetings and ex-dividend dates. Estimated and confirmed earnings dates are told apart by status.
/api/v1/calendarPRO key/api/v1/calendar/{earnings|ipos|lockups|fda|macro|meetings|dividends}PRO key/api/v1/calendar/macro/riskPRO keyCommon parameters
| Parameter | Type | Description |
|---|---|---|
from / to |
date | US Eastern calendar dates, inclusive. Default today to +30 days; at most 400 days. |
symbols / cik |
string | Up to 100 tickers / CIKs (not on /macro). |
take / cursor |
Page size (default 100, max 1,000) and nextCursor. Rows come in date order. |
Endpoints and their own parameters
| Parameter | Type | Description |
|---|---|---|
/calendar |
types, importance | Combined calendar. types: earnings, ipos, lockups, fda, macro, meetings, dividends (default all; macro is skipped when you filter by symbol). Each row carries its type's own item in detail. |
/calendar/earnings |
status, session, asOf | status: Estimated, Confirmed, Reported, Overdue. session: BMO, AMC, DMH. asOf: what the calendar said at that UTC instant. |
/calendar/ipos |
status | Filed, Effective, Priced, Trading, Withdrawn. |
/calendar/lockups |
IPO lock-up expirations: pricing date plus the prospectus's lock-up period (180 days assumed, with lockupStated: false, when none is stated). | |
/calendar/fda |
type, status | type: PDUFA (company-disclosed target action dates) or AdComm (advisory committees, from the Federal Register). status: Upcoming, Extended, Approved, CRL. |
/calendar/macro |
importance, agency | importance: the minimum (High, Medium, Low). agency: BLS, BEA, Census, FederalReserve, Treasury, Computed (options expirations). |
/calendar/macro/risk |
at, withinMinutes, importance | blocked: true when a release of at least importance (default High) is within ±withinMinutes (default 30, max 1,440) of at (default now). |
/calendar/meetings |
kind | Shareholder meetings from DEF 14A proxies: Annual or Special. |
/calendar/dividends |
Ex-dividend dates parsed from 8-K dividend declarations. |
Earnings
# Confirmed earnings dates for the next two weeks
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/calendar/earnings?from=2026-10-26&to=2026-11-06&status=Confirmed"
Illustrative values. date is the best current date: reported, else company-confirmed, else estimated.
{
"data": [
{
"id": 5521,
"cik": "1234567",
"symbol": "XMPL",
"periodKey": "FY2026Q3",
"fiscalPeriod": "Q3 FY2026",
"periodEnd": "2026-09-30",
"date": "2026-11-06",
"session": "AMC",
"status": "Confirmed",
"estimate": {
"date": "2026-11-05",
"windowLo": "2026-11-03",
"windowHi": "2026-11-09",
"priorPatternDate": "2026-11-05",
"confidence": "High",
"method": "YoY364",
"historyCount": 12,
"meanAbsErrorDays": 0.83
},
"confirmation": {
"date": "2026-11-06",
"session": "AMC",
"sessionInferred": false,
"releaseTimeEt": "16:05",
"callDate": "2026-11-06",
"callTimeEt": "16:30",
"pattern": "ReleaseVerb",
"statedFiscalPeriod": "Q3 FY2026",
"accession": "0001234567-26-000072",
"formType": "8-K",
"confirmedAt": "2026-10-23T20:17:08Z"
},
"reported": null,
"knownAt": "2026-08-01T10:00:00Z",
"updatedAt": "2026-10-23T20:19:00Z",
"source": "SEC EDGAR"
}
],
"nextCursor": "MjAyNjExMDY6MTo1NTIx",
"schemaVersion": 1
}
Macro releases
// GET /api/v1/calendar/macro?importance=High
{
"data": [
{
"id": 3307,
"eventKey": "BLS:consumer-price-index:20261110",
"agency": "BLS",
"name": "Consumer Price Index",
"category": "Inflation",
"importance": "High",
"scheduledAt": "2026-11-10T13:30:00Z",
"period": null,
"status": "Scheduled",
"timeIsStandard": false,
"details": null,
"sourceUrl": "https://www.bls.gov/schedule/news_release/bls.ics",
"knownAt": "2026-10-24T10:00:00Z",
"source": "U.S. Bureau of Labor Statistics"
}
],
"nextCursor": null,
"schemaVersion": 1
}
Macro risk window
For a strategy rule such as "no new entries around CPI, payrolls or FOMC":
# Is a high-impact release within 30 minutes of now?
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/calendar/macro/risk?withinMinutes=30&importance=High"
{
"at": "2026-11-10T13:15:00Z",
"withinMinutes": 30,
"minImportance": "High",
"blocked": true,
"events": [
{
"eventKey": "BLS:consumer-price-index:20261110",
"name": "Consumer Price Index",
"agency": "BLS",
"importance": "High",
"scheduledAt": "2026-11-10T13:30:00Z",
"minutesFromNow": 15
}
],
"schemaVersion": 1
}
FDA
// GET /api/v1/calendar/fda?type=PDUFA&from=2026-11-01&to=2026-12-31
{
"data": [
{
"id": 214,
"kind": "PDUFA",
"cik": "1234567",
"symbol": "XMPL",
"drug": "XMP-101",
"indication": "…",
"applicationType": "NDA",
"date": "2026-11-28",
"datePrecision": "Day",
"previousDate": null,
"priorityReview": false,
"status": "Upcoming",
"outcomeDate": null,
"outcomeAccession": null,
"sourceAccession": "0001234567-26-000031",
"sourceFormType": "10-Q",
"frDocumentNumber": null,
"committee": null,
"sponsor": null,
"snippet": "… a Prescription Drug User Fee Act (PDUFA) target action date of November 28, 2026 …",
"knownAt": "2026-08-06T20:15:31Z",
"updatedAt": "2026-08-06T20:20:00Z",
"source": "SEC EDGAR"
}
],
"nextCursor": null,
"schemaVersion": 1
}
FDA dates are the ones companies disclose in their SEC filings, plus advisory committee meetings published in the Federal Register; outcomes are recorded as the company discloses them. Macro times are the agencies' published schedules; timeIsStandard: true means the time is the agency's usual time for that release, not one stated for the event.
13F institutional ownership
Holdings reported by institutional managers on Form 13F, from the SEC's 13F data sets: who holds a symbol and how that changed quarter over quarter, and each manager's portfolio. 13F reports are filed up to 45 days after quarter end, so this is a lagged view.
/api/v1/institutions/issuer/{symbol}PRO key/api/v1/institutions/holdingsPRO key/api/v1/institutions/managersPRO key/api/v1/institutions/managers/{cik}PRO key| Parameter | Type | Description |
|---|---|---|
/institutions/issuer/{symbol} |
period, asOf, top, history | A symbol's 13F holders for one report period (default the latest; with asOf, the latest whose filing deadline had passed): holders, shares, value, new/added/reduced/exited counts, institutional %, the top holders (default 25, max 100) and history quarters (default 8, max 60). |
/institutions/holdings |
cik (required), period, asOf, change, take, cursor | One manager's positions for a report period with the quarter-over-quarter change. change: new, added, reduced, unchanged, exited. Paged inside data.holdings (default 200, max 1,000). |
/institutions/managers |
search, take, cursor | Manager directory, largest latest portfolio first; search matches the name (up to 80 characters). |
/institutions/managers/{cik} |
filings | One manager and its 13F filings, newest first (filings default 20, max 200). |
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/institutions/issuer/XMPL?top=10&history=4"
Illustrative values (placeholder ticker and manager).
{
"schemaVersion": 1,
"source": "SEC Form 13F data sets (Source: SEC EDGAR)",
"data": {
"symbol": "XMPL",
"cik": "1234567",
"periodEnd": "2026-06-30",
"priorPeriodEnd": "2026-03-31",
"asOf": null,
"holders": 412,
"shares": 61250000,
"valueUsd": 2817500000,
"callHolders": 9,
"putHolders": 7,
"newHolders": 38,
"addedHolders": 151,
"reducedHolders": 143,
"exitedHolders": 29,
"unchangedHolders": 80,
"priorShares": 59900000,
"splitFactor": null,
"sharesOutstanding": 84000000,
"institutionalOwnershipPct": 72.92,
"topHolders": [
{
"managerCik": "7654321",
"managerName": "EXAMPLE CAPITAL MANAGEMENT LLC",
"shares": 6100000,
"valueUsd": 280600000,
"pctOfInstitutionalShares": 9.96,
"pctOfSharesOutstanding": 7.26,
"priorShares": 5800000,
"change": "added"
}
],
"history": [
{ "periodEnd": "2026-06-30", "holders": 412, "shares": 61250000, "valueUsd": 2817500000, "newHolders": 38, "addedHolders": 151, "reducedHolders": 143, "exitedHolders": 29 }
]
},
"note": "13F reports are filed up to 45 days after quarter end; knownAt is the filing date at 17:30 ET. Values are as reported (dollars; pre-2023 filings reported thousands and are converted). Changes are split-adjusted when a split is inferred from the holders."
}
Fails-to-deliver
The SEC's fails-to-deliver data per symbol and settlement day, with the value, the fails as a percent of shares outstanding, and a threshold-like flag. The SEC publishes it twice a month, about two to four weeks after settlement.
/api/v1/eod/fails-to-deliverPRO key| Parameter | Type | Description |
|---|---|---|
symbol |
string | One symbol's series. Either symbol or date is required. |
date |
date | Every symbol on one settlement date. |
from / to |
date | Settlement-date window. |
asOf |
ISO-8601 UTC | Only rows the SEC had published by then. |
thresholdLike |
bool | Only threshold-like days (see the note). |
take / cursor / order |
Page size (default 500, max 1,000), nextCursor, desc (default) or asc. |
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/eod/fails-to-deliver?symbol=XMPL&from=2026-08-01"
Illustrative values.
{
"schemaVersion": 1,
"source": "SEC fails-to-deliver data (Source: SEC)",
"data": [
{
"symbol": "XMPL",
"cik": "1234567",
"settlementDate": "2026-09-23",
"quantity": 408817,
"price": 4.55,
"valueUsd": 1860117.35,
"sharesOutstanding": 60000000,
"ftdPctOfShares": 0.681362,
"thresholdLike": true,
"daysOverThreshold": 5,
"knownAt": "2026-10-15T12:25:57Z"
}
],
"nextCursor": "ZTF8NzM5ODY4fFhNUEw",
"note": "Published by the SEC about two to four weeks after settlement; knownAt is the publication time. thresholdLike approximates Reg SHO Rule 203(c)(6) (>= 10,000 shares and >= 0.5% of SEC cover-page shares outstanding for five consecutive settlement days); it is not the official exchange threshold list."
}
Point-in-time fundamentals
Fundamentals as filed, from the SEC's Financial Statement Data Sets. Each row is what was public at its knownAt, so a backtest can read a company's numbers as an investor could have on any date, without later restatements leaking in. Includes TTM revenue, EBITDA, free cash flow and net debt, margins, returns and leverage.
/api/v1/fundamentals/pitPRO key| Parameter | Type | Description |
|---|---|---|
symbol / cik |
string / int | The company. One is required. |
asOf |
ISO-8601 UTC | Default now. Returns the newest filing-based row with knownAt ≤ asOf. |
history |
bool | true: page every row known by asOf, newest first, instead of one row. |
from |
ISO-8601 UTC | With history: only rows with knownAt ≥ from. |
price |
decimal | Your own share price (USD). Fills marketCap, enterpriseValue and evToEbitda from it. API keys get these market fields only from price. |
take / cursor |
With history: page size (default 100, max 1,000) and nextCursor. |
# XMPL's fundamentals as an investor could have known them on 2025-03-03, valued at $41.20
curl -H "Authorization: Bearer btk_..." \
"https://api.byte-trader.com/api/v1/fundamentals/pit?symbol=XMPL&asOf=2025-03-03T14:30:00Z&price=41.20"
Illustrative values. With history=true the response is a page of these rows (data is an array, with nextCursor).
{
"schemaVersion": 1,
"source": "SEC Financial Statement Data Sets (Source: SEC EDGAR)",
"data": {
"cik": "1234567",
"symbol": "XMPL",
"knownAt": "2025-02-25T21:04:12Z",
"accession": "0001234567-25-000009",
"formType": "10-K",
"periodEnd": "2024-12-31",
"fiscalYear": 2024,
"fiscalPeriod": "FY",
"filedDate": "2025-02-25",
"acceptedAt": "2025-02-25T21:04:12Z",
"currency": "USD",
"latestFactPeriodEnd": "2024-12-31",
"revenueTtm": 1284000000,
"grossProfitTtm": 642000000,
"operatingIncomeTtm": 171000000,
"netIncomeTtm": 118000000,
"depreciationAmortizationTtm": 64000000,
"ebitdaTtm": 235000000,
"operatingCashFlowTtm": 204000000,
"capexTtm": 71000000,
"freeCashFlowTtm": 133000000,
"totalDebt": 420000000,
"cashAndEquivalents": 188000000,
"netDebt": 232000000,
"stockholdersEquity": 910000000,
"totalAssets": 1960000000,
"sharesOutstanding": 84000000,
"eps": 1.41,
"epsTtm": 1.41,
"bookValuePerShare": 10.83,
"grossMarginTtm": 50.0,
"operatingMarginTtm": 13.32,
"netProfitMarginTtm": 9.19,
"grossMarginMrq": 50.8,
"operatingMarginMrq": 14.1,
"netProfitMarginMrq": 9.7,
"returnOnEquity": 12.97,
"returnOnAssets": 6.02,
"returnOnInvestment": 8.9,
"currentRatio": 1.84,
"quickRatio": 1.22,
"interestCoverage": 9.5,
"ltDebtToEquity": 41.76,
"totalDebtToEquity": 46.15,
"totalDebtToCapital": 31.58,
"revChangeYear": 8.4,
"revChangeTtm": 8.4,
"revChangeIn": 6.1,
"epsChange": 12.0,
"epsChangeYear": 12.0,
"epsChangePercentTtm": 12.0,
"dividendAmount": 0.48,
"divGrowthRate3Year": 6.3,
"marketCap": 3460800000,
"marketCapSource": "caller-price",
"marketCapDate": null,
"enterpriseValue": 3692800000,
"evToEbitda": 15.7140,
"pipelineVersion": "pit-1|1.0"
},
"note": "As filed: each row is what was public at knownAt (EDGAR dissemination time). TTM figures sum the latest four quarters; free cash flow = operating cash flow - capex; EBITDA = operating income + D&A; net debt = total debt - cash and equivalents. Amounts are in the filer's reporting currency."
}
For the latest daily snapshot of computed fundamentals, use GET /api/v1/fundamentals?symbols=AAPL,MSFT (add from/to for a daily series).