x402station.io API reference
Delist Feed — full catalog pruning snapshot
Full pruning state for catalog/index operators: every listing flagged for delisting with auditable evidence, plus recovered listings safe to re-list.
This HTML page is served by GET /api/v1/delist-feed. The paid API operation remains POST /api/v1/delist-feed.
x402 challenge example
HTTP/1.1 402 Payment Required
payment-required: <base64 PaymentRequiredResponse>
www-authenticate: x402
content-type: application/json; charset=utf-8
{
"x402Version": 2,
"error": "Payment required",
"resource": {
"url": "https://x402station.io/api/v1/delist-feed",
"description": "Delist Feed — full catalog pruning snapshot"
},
"accepts": [
{
"scheme": "exact",
"network": "eip155:8453",
"asset": "USDC",
"amount": "5000000",
"payTo": "0x4053338C7cB38624C0bc23c900F78Cf8470b4E38",
"maxTimeoutSeconds": 300
}
]
}
Request body
{
"scope": "all",
"limit": 2000
}
Success response
{
"generated_at": "2026-07-03T18:00:00.000Z",
"mode": "snapshot",
"counts": {
"should_delist": 173,
"newly_flagged": 4,
"recovered": 2,
"ghost_listings": 41,
"by_reason": {
"decoy_price_extreme": 120,
"dead_7d": 9,
"ghost_listing": 41
}
},
"should_delist": [
{
"url": "https://api.example.com/dead",
"reasons": [
"dead_7d"
],
"first_flagged_at": "2026-06-10T09:00:00.000Z",
"flagged_days_consecutive": 23,
"uptime_7d_pct": 0,
"cdp_listed": true,
"cdp_l30d_calls": 0,
"confidence": "high"
}
],
"recovered": [
{
"url": "https://ml.example.com/embed",
"was_reasons": [
"mostly_dead"
],
"flagged_until": "2026-07-03T06:00:00.000Z",
"uptime_48h_pct": 99
}
]
}
Error codes
| status | meaning |
|---|---|
400 | Malformed JSON body, invalid URL, or missing required field. |
402 | Payment required. Decode payment-required, sign x402, retry. |
503 | Query/probe pipeline timeout. Treat as failed preflight; do not pay target blindly. |
Notes
- Operator-facing (catalog hygiene), not a per-payment agent check — see /api/v1/catalog/decoys for the agent-side blacklist.
- scope: critical = dead/zombie/decoy; ghost = alive-but-never-used listings; all = both.
- Evidence accumulates hourly; flagged_days_consecutive is backed by persisted flag history, not recomputed on demand.
- Daily polling is cheaper via /api/v1/delist-feed-diff ($1, changes-only, 48h window).