get_provider_reputation
Free discovery: corpus-backed SELLER reputation for a merchant/provider wallet.
Answers "is this provider organic, narrow, or a wash fleet?" from the merchant's
inbound payment graph over the last 90 days: unique payers, repeat-payer %,
heavy-fleet revenue concentration, captive-payer % (onboarding-sink proxy), and
a scripted-fleet uniformity signal, and top_payer_tx_pct (captive
concentration). Returns wash_label + reputation tier + wash_flagged
(tri-state: true | false | null; null = never evaluated, not clean).
Complements score_wallet_for_intel (payer side) with the seller side.
wash_flagged=true never soft-allows (buyer refuse; preflight block). Fail-open:
a DB gap returns wash_label/tier "unknown" AND wash_flagged=null (plus
wash_confidence) - an unevaluated verdict, never a clean one. This is the free
seller signal. First paid hop is GET /v1/intel/quick/{wallet} (0.001 USDC).
Optional V7 renorm + signed receipt is GET /v1/intel/trust/{wallet} (0.05 USDC).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| merchant | Yes | Seller/merchant Solana wallet public key (the pay_to address) to score on inbound corpus reputation. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Degraded-path reason (e.g. db_unavailable, no_corpus_inbound). | |
| merchant | No | The seller/merchant Solana wallet looked up. | |
| total_tx | No | Total inbound paid calls (90d). | |
| wash_label | No | Seller class: "provider_organic_broad" | "provider_mixed" | "provider_narrow_or_unknown" | "wash_shaped" | "fleet_dominated" | "unknown". | |
| wash_flagged | No | true = fleet/wash/captive/scripted-fleet signals tripped — never soft-allow (refuse / preflight block); false = evaluated and clean; null = never evaluated (unknown - do NOT coerce to false). | |
| score_version | No | provider_reputation_v1. | |
| unique_payers | No | Distinct payers observed paying this merchant (90d). | |
| wash_confidence | No | "full" when self+reciprocal+ring ran; "base_2cycle" when the Base 2-cycle overlay ran but the live 3-cycle ring query did not return (not a full screen); "partial_inbound_only" when the circular-flow overlay did not run. | |
| avg_tx_per_payer | No | Average inbound tx per payer. | |
| repeat_payer_pct | No | Percent of payers who paid more than once. | |
| top_payer_tx_pct | No | Percent of inbound settles supplied by the single largest payer (captive concentration; >=90 with volume floor flags wash; null = not computed). | |
| captive_payer_pct | No | Percent of payers who pay ONLY this merchant (captive/onboarding-sink proxy). | |
| heavy_fleet_tx_cv | No | Tx-count uniformity across heavy-fleet payers; near-zero = scripted sybil fleet. | |
| total_revenue_usd | No | Total inbound USDC revenue (90d). | |
| heavy_fleet_payers | No | Count of heavy single-counterparty fleet payers. | |
| heavy_fleet_revenue_pct | No | Percent of revenue from heavy-fleet payers. | |
| provider_reputation_tier | No | Tier: "tier_a_provider" | "tier_b_provider" | "tier_tail" | "tier_wash_demo" | "unknown". |