Data access for crawlers & agents
Financial research.
One request at a time.
Retrieve prepared financial data with source evidence through paid x402 endpoints. Public research pages and existing public summaries stay free.
Resource catalog
Choose a prepared dataset.
The same price applies to each listed paid GET, including each page of a dataset. Coverage and source dates travel with the data.
Company financials
Prepared company financial history with reporting periods, units and SEC source evidence.
Available prepared coverage only. No historical filing-cutoff guarantee or new SEC acquisition.
GET /api/x402/v1/financials/{ticker}basis: annual | quarter | ytd | ttm (default annual)
Refinancing snapshot
A page of the prepared corporate debt-maturity snapshot with company coverage, liquidity context and filing evidence.
Each successful page is a paid request. Pin the returned snapshot token on later pages; a changed snapshot returns 409 without settlement.
GET /api/x402/v1/refinancinglimit: 1–100 (default 100); offset: 0–9999 (default 0); snapshot: Exact snapshot token returned by the first page (default current)
SEC fundamental universe
A page of filing-based company and sector fundamentals with equal-issuer-weight breadth and explicit coverage.
Retained snapshots only; unavailable snapshots return 503 without settlement. Each successful page is paid. Pin the snapshot token on later pages. Accounting fundamentals are not security prices or returns.
GET /api/x402/v1/factor-universebasis: ttm | annual (default ttm); limit: 1–100 (default 100); offset: 0–9999 (default 0); snapshot: Exact snapshot token returned by the first page (default current)
x402 · Protocol version 2
Request, authorize, receive.
- 01
Read the price
A request without valid payment receives HTTP 402 and a
PAYMENT-REQUIREDheader describing the payment requirements. - 02
Authorize 0.01 USDC
Your compatible client signs payment authorization and retries with
PAYMENT-SIGNATURE. Review the amount, recipient and network before spending. - 03
Receive the dataset
After verification and successful settlement, the response delivers the data and a
PAYMENT-RESPONSEreceipt.
Payment is required on these endpoints regardless of browser or crawler identity. Existing crawlers must support x402 and authorize spending to participate.
Start here
Inspect first. Then connect your client.
This curl request inspects the response and does not authorize payment. Inactive payments return HTTP 503. When active, inspect the HTTP 402 requirements before signing. Unavailable resources are not settled.
curl -i 'https://secedgarterminal.com/api/x402/v1/factor-universe?basis=ttm&limit=100&offset=0'Node.js client example using the official x402 SDK
Install @x402/fetch, @x402/svm and @solana/kit. This local Node.js example uses a funded development wallet and a private keypair file on your own computer. Confirm the public recipient in the catalog before running it. Production agents should use a constrained signing service with a total spending limit. This example checks the exact 0.01 USDC amount, mint, recipient and network before signing.
A pending or unknown settlement needs reconciliation before another authorization. HTTP 409 may indicate an already-used payment. Keep the payment receipt and transaction information; do not automatically sign a replacement payment after an error.
import { x402Client, wrapFetchWithPayment } from '@x402/fetch';
import { ExactSvmScheme } from '@x402/svm/exact/client';
import { createKeyPairSignerFromBytes } from '@solana/kit';
import { readFileSync } from 'node:fs';
// Local development wallet only; never upload its keypair to this site.
const file = process.env.PAYER_KEYPAIR_FILE;
if (!file) throw new Error('Choose your local wallet keypair file');
const bytes = JSON.parse(readFileSync(file, 'utf8'));
if (!Array.isArray(bytes) || bytes.length !== 64
|| bytes.some(value => !Number.isInteger(value) || value < 0 || value > 255)) {
throw new Error('Expected a Solana CLI 64-byte keypair JSON file');
}
const signer = await createKeyPairSignerFromBytes(Uint8Array.from(bytes));
const expectedRecipient = 'H6VfqLdNwYfFmA54TQeL28sx2LyWE1E5FLX6XGEN3pmb';
const url = 'https://secedgarterminal.com/api/x402/v1/factor-universe?basis=ttm&limit=100&offset=0';
const usdc = 'EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v';
const network = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp';
const client = new x402Client({
spendControls: { maxAmountPerPayment: '$0.01' },
});
client.register(network, new ExactSvmScheme(signer));
client.onBeforePaymentCreation(async ({ paymentRequired, selectedRequirements: offer }) => {
if (offer.network !== network
|| offer.asset !== usdc
|| BigInt(offer.amount) !== 10000n
|| offer.payTo !== expectedRecipient
|| paymentRequired.resource.url !== url) {
return { abort: true, reason: 'Unexpected payment offer' };
}
});
const paidFetch = wrapFetchWithPayment(fetch, client);
const response = await paidFetch(url);
if (!response.ok) throw new Error(`Request failed: ${response.status}`);
const data = await response.json();Official buyer guide Solana x402 guide Current payment recipient
Network: Solana mainnet (solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp). Asset: native USDC, mint EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v. Confirm this payout wallet before authorizing a payment: H6VfqLdNwYfFmA54TQeL28sx2LyWE1E5FLX6XGEN3pmb. The signed challenge is the source of the offer for your exact request.
How do I retrieve multiple pages?
Refinancing and factor-universe responses include snapshot metadata, the requested company rows and pagination with offset, limit, total, nextOffset and snapshot. Use nextOffset for the next request and pass the returned snapshot token on every later page. A changed snapshot returns HTTP 409 without settlement; restart from the first page to keep one consistent dataset. Each successfully settled page costs 0.01 USDC.
What counts as a paid crawl?
One successfully settled GET to a listed paid endpoint costs 0.01 USDC. A new retrieval requires a new payment authorization. Public pages, discovery documents and public API previews are free. Invalid requests and unavailable datasets are not settled. Payment alone does not guarantee complete source coverage.
Dates, coverage and shared public data
These endpoints deliver prepared research and do not start bulk source collection. Some research also appears on public pages or public APIs. The fee is for this paid machine-access service, not ownership of government records. Preserve reporting periods, retrieval times, nulls, stale status and source links when using the data.
Receipts and payment support
Keep the response receipt and transaction identifier. Wallet addresses and settled transfers can be visible on the public blockchain. If a settled request fails to deliver, contact project support with the transaction identifier and requested resource. Do not post private keys or signed payment headers. See the terms and privacy notice.