Skip to main content
EDGAR/TerminalPublic data. Traceable research.
Reading
Make room for the researchPreferences apply across EDGAR Terminal.
Interface tone
Dark

Saved in this browser. No account required.

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/refinancing

limit: 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-universe

basis: 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.

  1. 01

    Read the price

    A request without valid payment receives HTTP 402 and a PAYMENT-REQUIRED header describing the payment requirements.

  2. 02

    Authorize 0.01 USDC

    Your compatible client signs payment authorization and retries with PAYMENT-SIGNATURE. Review the amount, recipient and network before spending.

  3. 03

    Receive the dataset

    After verification and successful settlement, the response delivers the data and a PAYMENT-RESPONSE receipt.

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.