# Parallax — facts from the x402 settlement graph

Call Parallax for a number only the settlement graph can produce: whether a
transaction was an x402 settlement and who submitted it, what a payer wallet is,
what a seller's funnel looks like after infrastructure callers are excluded, or
what a window of settlement looks like per facilitator with a coverage ratio
attached. Every fact is read from both sides of the settlement — the buyer that
paid and the seller that was paid.

Do not use it to lint a 402 envelope or check indexing conformance. That is the
sibling property, https://10x402.com.

## Read the free surfaces first

```bash
curl -s https://parallax402.com/v1/stats -H 'Accept: application/json'
curl -s https://parallax402.com/v1/settlers -H 'Accept: application/json'
curl -s https://parallax402.com/readings/index.json
```

One object per route, rendered by `Accept`: `text/html` gets the page, JSON or
a wildcard gets the data. Neither rendering can drift from the other.

## Paid routes

Each answers `402` first with an x402 envelope. Priced in USDC on Base or Solana — same price on either rail. The envelope's
`accepts[]` carries one entry per rail — pay on either and retry the same
request. No account, no key. Prices are unique on the sheet, so a settlement
attributes to its endpoint by amount alone.

### Base buyer setup with a $0.05 ceiling

Install the versions used by Parallax's own buyer drill, then provide a funded
Base private key through the environment. The policy below refuses any single
quote above 50,000 atomic USDC ($0.05) before signing.

```bash
npm install @x402/fetch@2.23.0 @x402/evm@2.23.0 viem@2.55.18
export BUYER_PRIVATE_KEY=0x...
```

```js
import { privateKeyToAccount } from "viem/accounts";
import { createPublicClient, http } from "viem";
import { base } from "viem/chains";
import { x402Client, wrapFetchWithPayment } from "@x402/fetch";
import { toClientEvmSigner } from "@x402/evm";
import { registerExactEvmScheme } from "@x402/evm/exact/client";

const account = privateKeyToAccount(process.env.BUYER_PRIVATE_KEY);
const signer = toClientEvmSigner(account,
  createPublicClient({ chain: base, transport: http() }));
const withinCeiling = a =>
  BigInt(a.maxAmountRequired ?? a.amount ?? 0) <= 50000n;
const client = new x402Client((_version, requirements) =>
  requirements.filter(withinCeiling)[0]
).registerPolicy((_version, requirements) =>
  requirements.filter(withinCeiling));
registerExactEvmScheme(client, { signer, networks: ["eip155:8453"] });
const paidFetch = wrapFetchWithPayment(fetch, client);

const seller = process.argv[2];
if (!seller) throw new Error("usage: node seller-workflow.mjs <payTo-or-hostname>");
async function paidJson(path) {
  const response = await paidFetch(`https://parallax402.com${path}`,
    { headers: { accept: "application/json" } });
  if (!response.ok) throw new Error(`${path} returned ${response.status}: ${await response.text()}`);
  return response.json();
}
const sellerFact = await paidJson(`/v1/seller?seller=${encodeURIComponent(seller)}`);
const basketFact = await paidJson(`/v1/basket?seller=${encodeURIComponent(seller)}`);
console.log(JSON.stringify({
  recurring_buyers: sellerFact.fact.recurring_buyers,
  buyers: sellerFact.fact.buyers,
  multi_seller_share: basketFact.fact.multi_seller_share,
  co_sellers: basketFact.fact.co_sellers,
}, null, 2));
```

Save that block as `seller-workflow.mjs`, then run:

```bash
node seller-workflow.mjs api.example.com
```

Replace the example hostname with your registered hostname or payTo. Keep the
key out of source control. A seller call costs 30,000 atomic USDC and a basket
call costs 50,000: the complete two-call workflow costs $0.08. Each call is
independently checked against the $0.05 ceiling; the ceiling is per call, not a
claim that the whole workflow costs $0.05.

`/v1/settlement/{txHash}` — $0.005 (sample):

```bash
curl -s https://parallax402.com/v1/settlement/0x2f7f6dd9b6ca726228111a0b444bdb06a0d6539c91451a47f4a6a3f59aa5af51 -H 'Accept: application/json'
```

Unpaid, it answers:

```json
{
  "x402Version": 1,
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "maxAmountRequired": "5000",
      "resource": "https://parallax402.com/v1/settlement/0x2f7f6dd9b6ca726228111a0b444bdb06a0d6539c91451a47f4a6a3f59aa5af51",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "0x790fE337b89900028E16fE63Cc087112F7a2BA49",
      "outputSchema": {
        "input": {
          "discoverable": true
        }
      }
    }
  ],
  "preview": {
    "as_of": "2026-09-01",
    "frame": "settler-eip3009-base",
    "tier": "preview",
    "fact": {
      "is_x402": true,
      "facilitator": "coinbase",
      "amount_usdc": 10.0,
      "block": 50481532
    }
  }
}
```
Abbreviated to accepts[0] and preview.fact. Whole body: https://parallax402.com/samples/settlement.preview.json

`/v1/window` — $0.01 (live):

```bash
curl -s 'https://parallax402.com/v1/window?from=2026-08-25&to=2026-09-01' -H 'Accept: application/json'
```

Unpaid, it answers:

```json
{
  "x402Version": 1,
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "maxAmountRequired": "10000",
      "resource": "https://parallax402.com/v1/window?from=2026-08-25&to=2026-09-01",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "0x790fE337b89900028E16fE63Cc087112F7a2BA49",
      "outputSchema": {
        "input": {
          "discoverable": true
        }
      }
    }
  ],
  "preview": {
    "as_of": "2026-08-31",
    "frame": "settler-eip3009-base",
    "tier": "preview",
    "fact": {
      "totals": {
        "txs": 99837,
        "purchases": 104159,
        "usdc": 1392820.311574,
        "fees": 2608.475556,
        "buyers": 4382,
        "sellers": 2272
      },
      "attributed_share": {
        "txs": 0.873844,
        "usdc": 0.022407
      }
    }
  }
}
```
Abbreviated to accepts[0] and preview.fact. Whole body: https://parallax402.com/samples/window.preview.json

`/v1/edge/parallax402` — $0.015 (live):

```bash
curl -s 'https://parallax402.com/v1/edge/parallax402?day=2026-09-03' -H 'Accept: application/json'
```

Unpaid, it answers:

```json
{
  "x402Version": 1,
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "maxAmountRequired": "15000",
      "resource": "https://parallax402.com/v1/edge/parallax402",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "0x790fE337b89900028E16fE63Cc087112F7a2BA49",
      "outputSchema": {
        "input": {
          "discoverable": true
        }
      }
    }
  ],
  "preview": {
    "as_of": null,
    "frame": "parallax402-edge",
    "tier": "preview",
    "fact": {}
  }
}
```
Abbreviated to accepts[0] and preview.fact. Whole body: https://parallax402.com/samples/edge.preview.json

`/v1/wallet` — $0.02 (live):

```bash
curl -s 'https://parallax402.com/v1/wallet?address=0x908ee74710870b12ea873185d4828c52778b8d2e' -H 'Accept: application/json'
```

Unpaid, it answers:

```json
{
  "x402Version": 1,
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "maxAmountRequired": "20000",
      "resource": "https://parallax402.com/v1/wallet",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "0x790fE337b89900028E16fE63Cc087112F7a2BA49",
      "outputSchema": {
        "input": {
          "discoverable": true
        }
      }
    }
  ],
  "preview": {
    "as_of": "2026-09-01T17:14:00Z",
    "frame": "bazaar-payto",
    "tier": "preview",
    "fact": {
      "usdc": 164.081,
      "purchases": 27350,
      "sellers_paid": 1
    }
  }
}
```
Abbreviated to accepts[0] and preview.fact. Whole body: https://parallax402.com/samples/wallet.preview.json

`/v1/seller` — $0.03 (live):

```bash
curl -s 'https://parallax402.com/v1/seller?seller=api.onesource.io' -H 'Accept: application/json'
```

Unpaid, it answers:

```json
{
  "x402Version": 1,
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "maxAmountRequired": "30000",
      "resource": "https://parallax402.com/v1/seller",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "0x790fE337b89900028E16fE63Cc087112F7a2BA49",
      "outputSchema": {
        "input": {
          "discoverable": true
        }
      }
    }
  ],
  "preview": {
    "as_of": "2026-09-01T17:14:00Z",
    "frame": "bazaar-payto",
    "tier": "preview",
    "fact": {
      "usdc": 15.09,
      "purchases": 3740,
      "buyers": 444
    }
  }
}
```
Abbreviated to accepts[0] and preview.fact. Whole body: https://parallax402.com/samples/seller.preview.json

`/v1/basket` — $0.05 (live):

```bash
curl -s 'https://parallax402.com/v1/basket?seller=api.onesource.io' -H 'Accept: application/json'
```

Unpaid, it answers:

```json
{
  "x402Version": 1,
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:8453",
      "maxAmountRequired": "50000",
      "resource": "https://parallax402.com/v1/basket",
      "asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
      "payTo": "0x790fE337b89900028E16fE63Cc087112F7a2BA49",
      "outputSchema": {
        "input": {
          "discoverable": true
        }
      }
    }
  ],
  "preview": {
    "as_of": "2026-09-01T17:14:00Z",
    "frame": "bazaar-payto",
    "tier": "preview",
    "fact": {}
  }
}
```
Abbreviated to accepts[0] and preview.fact. Whole body: https://parallax402.com/samples/basket.preview.json

## Two tiers

Unpaid GET returns the preview inside the 402; pay to get full. A preview is at
least a week old and holds the endpoint's headline aggregates only. Numbers are
exact in both tiers — nothing is rounded and no address is truncated. What you
pay for is granularity and recency: per-entity rows, full lists, cohorts and
derived stats, from yesterday's scan, over any UTC window.

- `/v1/settlement/{txHash}` — full https://parallax402.com/samples/settlement.json · 402 body https://parallax402.com/samples/settlement.preview.json
- `/v1/window` — full https://parallax402.com/samples/window.json · 402 body https://parallax402.com/samples/window.preview.json
- `/v1/edge/parallax402` — full https://parallax402.com/samples/edge.json · 402 body https://parallax402.com/samples/edge.preview.json
- `/v1/wallet` — full https://parallax402.com/samples/wallet.json · 402 body https://parallax402.com/samples/wallet.preview.json
- `/v1/seller` — full https://parallax402.com/samples/seller.json · 402 body https://parallax402.com/samples/seller.preview.json
- `/v1/basket` — full https://parallax402.com/samples/basket.json · 402 body https://parallax402.com/samples/basket.preview.json

## Read the envelope before you read the fact

```json
{
  "as_of": "ISO-8601 of the reading or scan the fact was computed from",
  "frame": "bazaar-payto | settler-eip3009-base",
  "coverage": "{ok, failed, ratio} from the scan manifest",
  "method": "path to the METHOD.md the numbers follow",
  "attribution": "[strings] — x402-list CC BY 4.0 wherever its lists or figures are used",
  "fact": "the endpoint's fact_fields",
  "tier": "preview | full"
}
```

`frame` is not decoration. A `bazaar-payto` number counts settlements to
wallets listed at capture time and misses mid-window delistings. A
`settler-eip3009-base` number counts what known facilitator settler addresses
submitted and misses everything else. Neither is "the x402 economy". A
`coverage.ratio` below 1 forbids an "all" or "every" claim over that number. A
null ratio means the reading predates the persisted scan manifest — it does not
mean full coverage. `tier` is `preview` or `full`. A preview also carries
`stale_by`. Its numbers are exact but partial and stale. Never quote a preview
as the fact.

## Rules

- A number never ships without frame and coverage.
- Every envelope says tier: preview or full. A preview is never served as the fact.
- 'unseen' is a served fact and is charged; malformed input is not served and not charged.
- No 'all' or 'every' over data with coverage ratio below 1.
- Prices are unique on the sheet so a settlement attributes to its endpoint by amount alone.
- An endpoint goes live when a published reading produces an inbound request for that fact, not before.

## Status today

- `/v1/settlement/{txHash}`: sample
- `/v1/window`: live
- `/v1/edge/parallax402`: live
- `/v1/wallet`: live
- `/v1/seller`: live
- `/v1/basket`: live

`sample` means a build-computed sample response is published at
https://parallax402.com/samples/<id>.json and the 402 is not live. A route goes live when a
published reading draws a request for that fact.

## Readings (free, dated, stable URLs)

- PLX-003 2026-08-31 — Settler-frame day census, 2026-08-31 UTC (settler-eip3009-base · 2026-08-31 UTC · blocks 50,672,527–50,715,726) — https://parallax402.com/readings/2026-08-31-settler-frame/
- PLX-002 2026-09-01 — x402 Buyer Census (Bazaar payTo frame, 168h) — https://parallax402.com/readings/2026-09-01-buyer-census/
- PLX-001 2026-08-30 — What paying agents actually do (provider wallet map (Bazaar 2026-08-27 + x402scan 2026-08-24 captures)) — https://parallax402.com/readings/2026-08-30-what-paying-agents-do/

## Related

- 10x402 — sibling: x402 conformance lint + monitor. Parallax is the evidence layer (https://10x402.com)

## Attribution

- x402-list.com facilitator settler lists and daily figures (CC BY 4.0)
- CDP Bazaar discovery API (public)

Contact: hello@parallax402.com
