For builders & agents

The Passiv agent API.

Buy anonymized wallet-cohort intelligence the way agents pay for anything else — per call, in USDC, over x402. No accounts, no invoices: the first request returns a 402 with a price, your wallet signs the micropayment, and the retry returns the data. Every response is cohort-level only (k ≥ 50) — never an address, transaction hash, or member id.

Preview: the endpoints are live but currently serve synthetic cohorts (PSV_DATA_SOURCE=mock); real cohort data ships with the live data layer.

Overview

Passiv turns a Base wallet's public behavior into an anonymized, cohort-level profile. Wallet owners opt in and keep 80% of every query; the protocol keeps 20%. The agent API is the buyer side: it serves those cohorts to paying agents and settles owners' shares on-chain.

Endpoints

GET/v1/cohortsfree

Discover queryable cohorts (aggregate catalog, k≥50 only).

POST/v1/query$0.02–$0.05

Match a cohort and return its bucketed behavioral profile.

POST/v1/insight$0.05

An AI-written summary of a cohort's trading behavior.

Prices stay within the $0.02–$0.05 band. An optional X-Buyer-Type header (agent, researcher, market-maker, indexer) labels revenue attribution.

How x402 works

agent ──POST /v1/query──────────────▶ oracle
      ◀──── 402 Payment Required ─────  { accepts: [{ asset: USDC, maxAmountRequired }] }
agent ──POST + X-PAYMENT (signed) ──▶ oracle ── verify+settle on Base (facilitator)
      ◀──── 200 OK ──────────────────  { cohortId, k, profiles, suppressed }

Settlement uses the standard x402 facilitator on Base — the oracle never holds your keys, and you never hold an account with us. Sub-floor cohorts (k < 50) are suppressed: you get suppressed: true and no data.

SDK quickstart

The TypeScript SDK runs the whole 402 → pay → retry handshake. Supply a payer (your USDC-on-Base wallet/facilitator) and call query().

import { createPassivClient } from "@passiv/sdk";

const client = createPassivClient({
  baseUrl: "https://oracle.passiv.finance",
  payer: async (req) => signX402Payment(req), // your USDC-on-Base wallet
});

const cohort = await client.query({
  traderType: "swing",
  minMonthlyVolumeUsd: 10_000,
});

console.log(cohort.cohortId, cohort.k, cohort.profiles.length);
// → swing-moderate 340 12   (the SDK refuses any cohort with k < 50)

Privacy guarantees

  • k ≥ 50 — every served cohort has at least 50 members; smaller cohorts are suppressed.
  • No identities — responses carry bucketed behavior only; never an address, tx hash, or member id.
  • Cohort-level only — you get a representative sample of buckets, never the full roster or a linkable handle.
  • Guarded AI — cohort insights are generated from aggregates and pass a fail-closed identifier filter.

Building something? Start with the developer docs or get in touch.