Late EditionNight Edition · Docs

QUARTERQUILL


DocsAPI reference

The docs

One HTTP call returns a company’s latest earnings as JSON. Every number comes with the line it was read from and a link to the SEC document.

Quick start

No key, no wallet, no account:

curl https://quarterquill.xyz/v1/free/earnings/NFLX

You get the latest earnings release the company filed (8-K Item 2.02, Exhibit 99.1, or the 10-Q / 10-K), read into fields such as revenue, operating income, net income, diluted EPS and cash flow. Each figure has a quote (the exact text or table row) and a source (the sec.gov URL of that document). A number that cannot be found verbatim in the source is dropped.

Extraction is deterministic (table rows and sentence parsing). There are no analyst estimates and no “beat” or “miss” labels.

Free vs paid

RoutePriceNotes
GET /v1/free/earnings/:tickerfree3 reads a day per IP. Same body as the paid route.
GET /v1/earnings/:ticker$0.05 USDGx402 exact, Robinhood Chain (4663). Latest report, with a signed receipt.
GET /v1/earnings/:ticker/:period$0.05 USDGA specific quarter, e.g. 2026Q3.

Paid reads settle only when the read succeeds (the handler answers below 400). A filing that cannot be read is not charged.

  1. Ask. GET /v1/earnings/NFLX without payment answers 402 Payment Required. The terms are in the PAYMENT-REQUIRED header (x402 v2): scheme exact, network eip155:4663, asset USDG, amount 0.05 (50000 in 6-decimal units), and the payTo address.
  2. Sign. The client signs an EIP-3009 TransferWithAuthorization for that amount on USDG (0x5fc5360d0400a0fd4f2af552add042d716f1d168). It is a signature, not a transaction: the buyer needs USDG, not ETH.
  3. Retry. The same request is sent again with the signed payload in the PAYMENT-SIGNATURE header.
  4. Read. The server verifies the authorization, then reads the filing from SEC EDGAR.
  5. Settle and receipt. If the read succeeded, the facilitator submits the authorization on Robinhood Chain and the response carries a PAYMENT-RESPONSE header with the transaction hash, plus a receipt object signed by the server (EIP-712). If it failed, nothing is submitted and nothing is charged.

Every settled read is listed on /proof with its Blockscout link.

Any x402 v2 client that supports the exact EVM scheme on eip155:4663 can pay. The exact terms are always the ones in the 402 answer; /openapi.json describes every route.

From an agent

Generic: @x402/fetch (Node)

// npm i @x402/fetch @x402/core @x402/evm viem
import { x402Client } from "@x402/core/client";
import { ExactEvmScheme } from "@x402/evm/exact/client";
import { toClientEvmSigner } from "@x402/evm";
import { wrapFetchWithPayment } from "@x402/fetch";
import { createPublicClient, http } from "viem";
import { privateKeyToAccount } from "viem/accounts";

// A wallet that holds a little USDG on Robinhood Chain (no ETH needed).
const account = privateKeyToAccount(process.env.BUYER_KEY);
const rpc = createPublicClient({ transport: http("https://robinhood-rpc.publicnode.com") });
const client = new x402Client().register("eip155:4663", new ExactEvmScheme(toClientEvmSigner(account, rpc)));

const payFetch = wrapFetchWithPayment(fetch, client);
const res = await payFetch("https://quarterquill.xyz/v1/earnings/NFLX");
const report = await res.json();
for (const it of report.items) console.log(it.label, it.value, "←", it.quote, it.source);

Keep the key in a file or secret store your agent cannot print, and cap what it may spend per call (0.05 USDG is the price of one read).

MCP clients (Claude Code, Cursor, others)

The API is agent-callable as is:

A prompt that works well: “Get NFLX earnings from quarterquill.xyz and list each number with its footnote and source link.”

Response fields

FieldTypeMeaning
ticker, company, cikstringThe company as the SEC lists it.
periodstringFiscal quarter of the report, e.g. 2026Q3.
formstring8-K (earnings release), 10-Q or 10-K.
filedAt, readAtISO timeWhen EDGAR accepted the filing, and when it was read.
secondsnumberHow long this read took, in seconds. Filing-to-read time on report days is seconds in /v1/watch.
documentURLThe filing document on sec.gov.
items[]arraykey, label, value (number, full units), unit (e.g. USD, USD/share), period, quote (exact source text), source (sec.gov URL).
compare[]arrayPrior period for the same key: prior, priorPeriod, changePct, source (SEC XBRL companyfacts). Present only where XBRL has the figure.
guidance[]arrayOutlook sentences quoted exactly: quote, source.
rcobject | nullFor tickers with a stock token on Robinhood Chain: token, feed (Chainlink), price, roundId, updatedAt. Otherwise null.
receiptobjectPaid reads: EIP-712 receipt signed by the server.

Other routes (free)

RouteReturns
GET /v1/watchThis week’s reports: ticker, company, date (with its source URL), status waiting or read, and filedAt, readAt, seconds once read.
GET /v1/statspaidReads, usdgSettled, freeReads, lastSettlements[] (tx, ticker, amount, at), from the ledger.
GET /openapi.jsonOpenAPI description.
GET /.well-known/agent.jsonAgent manifest.
GET /healthLiveness.
curl https://quarterquill.xyz/v1/watch

Limits

Error codes

Errors are JSON with a reason you can show to a person.

StatusMeaningCharged?
400Ticker or period is not valid.No
402Payment required (paid routes). Read the terms in PAYMENT-REQUIRED, sign, retry.No
404Unknown ticker, or no earnings filing found for it or for that period.No
429Free limit reached (3 a day per IP). Use the paid route or try tomorrow.No
5xxSEC EDGAR unreachable, or the filing could not be read.No

Disclaimer

Not investment advice. Quarterquill quotes public SEC filings and links each number to its source; check the source before relying on any figure. It does not forecast, rate or recommend anything.

Quarterquill is not affiliated with the SEC, Robinhood, Chainlink or any company it reads.

The token has no claim on revenue, fees or profits, and holding it is not required to use the API.