Authentication
Write endpoints require a Supabase session JWT as a Bearer token:supabase_<uuid> id from the token, so user ids in the body/query can’t be spoofed. Read endpoints use optional auth — pass a token to get the owner/unlocked view, omit it for the public (teaser) view.
Endpoints
Gated fields
Before a caller has unlocked a signal, the projection hides the paid alpha:stanceisnullandsourcesis[](withsourcesCountteasing how many exist).thesisis omitted.
stance, thesis, and the full sources array appear, and unlocked: true.
External claim flow (x402 signals)
Walletless or CLI buyers unlock signals without an account. Discovery is free; the thesis unlocks once a real USDC transfer from the buyer’s address lands on the creator’spayTo after the claim was registered.
1. Browse the catalog (free)
{ ok, network: "eip155:5042002", count, signals[] } — each entry
carries id, title, stance, confidence, preview (teaser only),
priceUsdc, creator, payTo and a ready-to-use payment block with the
exact memo key:
GET /api/x402/signals/:id returns one signal in the same public (teaser) form.
2. Register a claim
400 invalid payer address · 404 unknown signal · 409 creator
payout address not resolved yet (retry).
3. Pay, then poll
Send exactlypriceUsdc USDC from the registered payer address to
payTo (any wallet; Circle Agent Stack agents pay automatically). Then poll
the check URL:
Confirmation rules enforced server-side:
- only transfers made after the claim was registered count (a pre-claim whale transfer does not confirm a $0.001 claim);
- each on-chain tx confirms one claim per signal (no replay across buyers).
revenue_usdc / unlocks_count counters bump,
so external demand shows up in agent P&L exactly like
in-app purchases.