Instructions to use Priceman614/x402-demand with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Priceman614/x402-demand with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-classification", model="Priceman614/x402-demand")# Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("Priceman614/x402-demand", device_map="auto") - Notebooks
- Google Colab
- Kaggle
x402-demand (listing-only)
Will anyone pay for this x402 endpoint? Give it an x402 listing — resource URL, description, price, network — and it returns a calibrated probability that the endpoint receives at least one paid call in the next 7 days (and 14 days), in one forward pass.
It is a fine-tune of convaiinnovations/laya
(ModernBERT-large + decision head, 421M), trained on 31 days of daily snapshots of the
Coinbase CDP x402 discovery index (the "Bazaar"). It loads with laya.load() and needs
no listing history, so it works on a brand-new listing — or on one you have not published yet.
Demo: https://sentedge.ai/x402-demand/ (free) · Hosted telemetry scoring: $0.01 per call over x402 (see below)
Why this exists
Only about a quarter of listed x402 services get paid even once in a given week, and 59% of the listings present on 2026-08-24 were gone 30 days later. An agent choosing which endpoint to pay, or a builder deciding what to list, is working against that base rate.
Use
pip install laya torch
import json, laya
agent = laya.load("Priceman614/x402-demand") # CPU is fine
QUESTIONS = { # use this exact wording - it is what the checkpoint was trained on
"paid_7d": {"type": "noul", "instructions": "Will this x402 pay-per-call API receive at least one paid call in the next 7 days?"},
"paid_14d": {"type": "noul", "instructions": "Will this x402 pay-per-call API receive at least one paid call in the next 14 days?"},
}
state = {
"resource": "https://api.example.dev/v1/forecast",
"description": "Hourly 7-day weather forecast for any lat/lon, JSON.",
"price_usd": "0.001", # USD per call, as a string
"network": "eip155:8453", # as it appears in the listing
}
out = agent.predict(json.dumps(state), QUESTIONS)["answers"]
print(out["paid_7d"]["noul"], out["paid_14d"]["noul"])
The state keys and their order matter: resource, description, price_usd, network,
serialised as JSON. Pass only the first 200 characters of the description. The
training snapshots stored descriptions cut to 200 characters, so the model has never
seen more.
Results
Held-out test: later dates × hosts never seen in training (13,644 listing-days across 442 unseen hosts; details under Training below). ROC AUC for paid within 7 days:
| Model | All test hosts | New listings | Hosts with ≤ 20 listings |
|---|---|---|---|
| Recency rule (days since last paid call) | 0.635 | 0.416 | 0.696 |
| Logistic regression, telemetry | 0.678 | 0.500 | 0.731 |
| LightGBM, telemetry | 0.672 | 0.514 | 0.737 |
| x402-demand · listing only (this model) | 0.639 | 0.575 | 0.668 |
| x402-demand · listing + telemetry (not released) | 0.732 | 0.581 | 0.754 |
How to read this honestly:
- On its own, this model is weaker than models that see a listing's call history. It only reads the listing text, so it cannot see that a service was paid yesterday.
- It is the only model above chance on brand-new listings (AUC 0.575 vs 0.50-0.51), where telemetry does not exist yet.
- Its score adds to a telemetry model. A LightGBM given this score as one more feature gains +0.027 AUC overall (95% CI −0.008 to +0.073, host-resampled bootstrap) and +0.08 on new listings (95% CI −0.002 to +0.153). The gain is consistent but not conclusive with 442 test hosts.
- The listing + telemetry variant beats the LightGBM baseline by +0.058 AUC (95% CI +0.010 to +0.110). It is not released as weights; see Hosted scoring.
Calibration. The checkpoint ships one fitted temperature (applied automatically by
laya.Agent). On the test set its expected calibration error is 0.116. It is
over-confident above ~0.5: treat 0.7 as "roughly 45%". If you need
decision-grade probabilities, refit calibration on your own traffic.
Full numbers, including paid_14d, Brier, ECE and segment breakdowns: results/metrics.json.
Training
- Label:
paid_Hd= 1 if the listing'squality.lastCalledAtadvances within H days of the snapshot, i.e. it received at least one paid call. It is not "still listed". The index evicts a listing exactly 30 days after its last paid call, so survival is mostly arithmetic on a known timestamp; paid demand is the real signal. - Data: 31 daily snapshots (2026-08-24 → 2026-09-23), ~15k listings per day, 23.9k distinct resources, 2,464 hosts. The dataset is not released.
- Splits: a host wall (sha256 buckets; 20% of hosts reserved for test) and a time wall (training label windows end before the first test day). A further 10% of hosts is held out from training for model selection and temperature fitting.
- Target: the text is identical across a listing's snapshots, so each listing is one example whose soft target is the share of its training days that were paid.
- Recipe: a single-GPU port of Laya's upstream RLCD fine-tuning. REINFORCE on a
strictly proper scoring rule (log + spherical) with a group baseline, plus soft
cross-entropy. 3 epochs, best by held-out-host AUC, bf16, one DGX Spark GB10. Full
procedure:
docs/PROCESS.md.
Limitations
- 31 days of history. One month, one clean 14-day window. The x402 market is weeks old and moving fast; expect drift. Retrained monthly.
- Paid ≠legitimate. A keep-alive self-call or scripted traffic counts as a paid call. This predicts demand, not quality or honesty.
- One index. Trained on the CDP Bazaar only.
- Over-confident at the top (see calibration). Do not use the raw probability as a hard gate without recalibrating.
- Mass-listing hosts. Some hosts publish hundreds of near-identical endpoints. The test excludes their training hosts, but the model has learned what such listings look like.
Hosted scoring (live)
The listing + telemetry variant (AUC 0.73; isotonic-recalibrated, test ECE 0.079) runs against today's Bazaar catalog as a pay-per-call x402 endpoint. It costs $0.01 in USDC on Base:
POST https://sentedge.ai/api/x402-demand/score
{"resource": "<a resource URL listed in the CDP x402 Bazaar>"}
-> 402 Payment Required -> pay -> {"paid_7d": 0.62, "listing": {...live telemetry, days until eviction...}}
Resources that aren't in the current catalog are refused before payment, and a failed score is never settled. Spec: https://sentedge.ai/api/x402-demand. There's also a free demo of this listing-only model: https://sentedge.ai/x402-demand/
Citation
@misc{x402demand2026,
title = {x402-demand: calibrated paid-demand prediction for x402 endpoints},
author = {Price, Ryan},
year = {2026},
note = {Fine-tuned from convaiinnovations/laya on CDP Bazaar snapshots}
}
Base model © Convai Innovations, Apache-2.0.
Model tree for Priceman614/x402-demand
Base model
convaiinnovations/laya

