An affectionate roast of the wallet that paid, written from its PUBLIC Base state read at
An affectionate roast of the wallet that paid, written from its PUBLIC Base state read at request time: the USDC balance, the native balance, and whether there is code at the address. Those become words — dust, pocket, purse, vault; gas or none; contract or plain — and a hand-written line is picked from them, keyed to your address and the UTC date, so it holds all day. EXACT AMOUNTS ARE NEVER RETURNED OR STORED. Chain unreadable, generic roast: you paid for one either way.
2500 (raw units)
price
6
calls / 30d
2
unique payers
2026-09-11
updated
Provider
penny402.fun · discovered, not yet claimed by its owner
Payment (x402 accepts[])
[
{
"scheme": "exact",
"network": "eip155:8453",
"payTo": "0x9d0bb5dA24cADe855DeE8d1231A1c416e0bB2FFe",
"asset": "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913",
"amount": "2500",
"maxTimeoutSeconds": 60
},
{
"scheme": "exact",
"network": "solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp",
"payTo": "HiQDSev6m8QwangqGFpfHZtKGFRYkAiqi24aF6BFKJrw",
"asset": "EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v",
"amount": "2500",
"maxTimeoutSeconds": 60
}
]Output schema
{
"bazaar": {
"info": {
"input": {
"body": {},
"bodyType": "json",
"method": "POST",
"type": "http"
},
"output": {
"example": {
"date": "2026-09-11",
"mechanic": "your public Base balances are read at request time (USDC, native, and whether there is code at the address), bucketed into the words in `read`, and a hand-written line is picked from the bucket by the `payer` and `date` above — so the same wallet gets the same roast until midnight UTC. Exact amounts are never returned, never stored, and never used for anything but choosing the joke. If nothing could be read, `read` is null and the generic roast is served: you paid, so you get a roast either way.",
"note": "reads your balances, not your soul",
"payer": "0x0000000000000000000000000000000000000000",
"read": {
"eth_bucket": "some",
"kind": "eoa",
"usdc_bucket": "pocket"
},
"roast": "One or two affectionate lines about the shape of your wallet, drawn for your address and this date."
},
"format": "application/json",
"type": "text"
}
},
"schema": {
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"input": {
"additionalProperties": false,
"properties": {
"body": {
"description": "a JSON body, up to 4 KB. This attraction takes no parameters — POST {} . Every attraction on penny402 is a flat $0.0025; the unpaid 402 carries those exact terms.",
"type": "object"
},
"bodyType": {
"const": "json",
"type": "string"
},
"method": {
"const": "POST",
"type": "string"
},
"type": {
"const": "http",
"type": "string"
}
},
"required": [
"type",
"method",
"bodyType",
"body"
],
"type": "object"
},
"output": {
"additionalProperties": false,
"properties": {
"example": {
"description": "a sample response from the real code path"
},
"format": {
"const": "application/json",
"description": "the attraction, as JSON, in the response body",
"type": "string"
},
"type": {
"const": "text",
"type": "string"
}
},
"required": [
"type",
"format"
],
"type": "object"
}
},
"required": [
"input"
],
"type": "object"
}
}
}Use it
curl
curl "https://penny402.fun/roast-my-wallet" # -> 402 Payment Required, accepts[] lists how to pay # retry with a PAYMENT-SIGNATURE (or PAYMENT header) once paid
JavaScript
const res = await fetch("https://penny402.fun/roast-my-wallet");
if (res.status === 402) {
const { accepts } = await res.json();
// pay one of accepts[] via an x402 client, then retry with the payment header
}Python
import httpx
res = httpx.get("https://penny402.fun/roast-my-wallet")
if res.status_code == 402:
accepts = res.json()["accepts"]
# pay one of accepts[] via an x402 client, then retry with the payment headerMachine-readable
Everything on this page is also available as clean JSON at /resources/7307.json, and this resource appears in /discovery/resources and /discovery/search.