{
  "type": "https://eips.ethereum.org/EIPS/eip-8004#registration-v1",
  "name": "Tellr",
  "description": "A pre-spend policy engine sold to agents over x402. Six paid endpoints that answer one question before money moves: should this agent be allowed to spend this, and is this asset liquid, growth, or reserved? Decisions are pure, deterministic and fail closed. An unrecognised value is a refusal, not a default. Tellr holds no keys, reads no wallet, and moves nothing - it returns a verdict with the inputs it used so the caller can audit it.",
  "image": "https://tellrmachine.com/og.png",
  "active": true,
  "services": [
    {
      "name": "x402",
      "version": "1.0",
      "endpoint": "https://x402.bankr.bot/0xcdc493fb6f0fa17b213ac2195bc454b39c1228ec/tellr-check",
      "description": "Pre-spend gate. amountUsd + dailySpentUsd + pool -> deny | confirm_required | allow. Per-transaction ceiling and daily cap, both enforced. A confirm flag is a strict boolean: the string \"false\" does not confirm anything."
    },
    {
      "name": "x402",
      "version": "1.0",
      "endpoint": "https://x402.bankr.bot/0xcdc493fb6f0fa17b213ac2195bc454b39c1228ec/tellr-classify",
      "description": "Classify a holding as liquidity, growth or reserved. Untagged holdings fail closed to growth, the pool that requires human confirmation, so missing information never becomes a permissive default."
    },
    {
      "name": "x402",
      "version": "1.0",
      "endpoint": "https://x402.bankr.bot/0xcdc493fb6f0fa17b213ac2195bc454b39c1228ec/tellr-sell-plan",
      "description": "Build a sell plan from a portfolio snapshot. Liquidity sells automatically under a 75% per-bag cap; growth only with an explicit human confirm; reserved is structurally unreachable by the sell waterfall. Returns legs, shortfall and realised P&L, or nothing executable."
    },
    {
      "name": "x402",
      "version": "1.0",
      "endpoint": "https://x402.bankr.bot/0xcdc493fb6f0fa17b213ac2195bc454b39c1228ec/tellr-fund-checkout",
      "description": "Turn a sell plan into a funding instruction. Decides fund | confirm_required | deny | skip and names the source wallet and amount. It plans; it does not move money."
    },
    {
      "name": "x402",
      "version": "1.0",
      "endpoint": "https://x402.bankr.bot/0xcdc493fb6f0fa17b213ac2195bc454b39c1228ec/tellr-top-off",
      "description": "Decide whether a stablecoin card needs topping up. Returns a plan with a derived amount. The enabled flag is a strict boolean so a non-boolean cannot switch money movement on."
    },
    {
      "name": "x402",
      "version": "1.0",
      "endpoint": "https://x402.bankr.bot/0xcdc493fb6f0fa17b213ac2195bc454b39c1228ec/tellr-privilege-audit",
      "description": "Audit a proposed privilege change before it is granted. Returns allowed with the specific rule that permitted it, so escalation cannot arrive unlabelled."
    },
    {
      "name": "agentWallet",
      "endpoint": "eip155:8453:0x8AEE621035D93Deb3C0C1177fac252dC2dd501a0",
      "description": "Settlement address on Base, USDC. This is the payTo in every live 402 challenge from the six endpoints above."
    },
    {
      "name": "web",
      "endpoint": "https://tellrmachine.com/skills/tellr/SKILL.md"
    }
  ],
  "x402Support": true,
  "supportedTrust": [
    "reputation"
  ],
  "registrations": [],
  "attributes": {
    "settlementNetwork": "base",
    "settlementAsset": "USDC",
    "settlementAddress": "0x8AEE621035D93Deb3C0C1177fac252dC2dd501a0",
    "requestPriceUsd": "0.05",
    "skillsIndex": "https://tellrmachine.com/skills.md",
    "machineReadableIndex": "https://tellrmachine.com/llms.txt",
    "humanEntryPoint": "https://tellrmachine.com/",
    "_status.registrations": "EMPTY ON PURPOSE. This file is not yet minted as an ERC-721 on an Identity Registry, so there is no agentId and no agentRegistry to cite. Populate this after minting: [{ agentId, agentRegistry: 'eip155:{chainId}:{0xRegistry}' }]. A fabricated agentId would be worse than an honest gap, because it would be a claim we cannot back.",
    "_status.supportedTrust": "reputation is declared, not yet published. We emit an auditable receipt for every verdict, which is the raw material for a reputation feed, but no on-chain feedback is posted today. Do not read this as an existing reputation signal.",
    "_status.x402Support": "true because the six services above are genuinely x402-paid and reachable. A 402 challenge is returned on an unpaid request and settled through Bankr's facilitator. Note the two limits a caller should know: our endpoints currently return bazaarExtension:null, so the Coinbase Bazaar cannot index them, and all six are discoverable:false in the Bankr marketplace. Direct URL or skills.md is the working discovery path today.",
    "_status.pools": "Three pools: liquidity (spendable, 75% per-bag cap), growth (sellable only with explicit human confirm), reserved (never reachable by the sell waterfall).",
    "_design.failClosed": "Ambiguity never permits. An unrecognised pool, a non-numeric amount, or a non-boolean confirm flag yields deny or confirm_required. A missing or malformed required field returns {ok:false, error:'missing_field:X'} with NO decision field, so callers must handle the error shape as well as the verdict shape. Nothing returns allow on ambiguous input.",
    "_design.noCustody": "No keys, no wallet reads, no execution. Every endpoint is pure decision logic priced per request. The worst outcome of a bad call is a wrong verdict, never a moved fund.",
    "_status.image": "Points at the site's own og:image, verified live 2026-09-29: HTTP 200, PNG 1200x630, 18,528 bytes. An earlier draft of this file pointed at /assets/og-tellr.png, which 404s - a path that was invented rather than checked. Same failure class as a wrong payTo: a plausible claim in a file designed to be believed."
  }
}