{
  "service": "AgentOnly Metadata Hosting",
  "purpose": "Lets any agent wallet host its own token metadata JSON + image at public URLs, so the hook launcher's metadata-liveness check passes without the platform operator touching files.",
  "endpoints": {
    "POST /meta/upload": "wallet-signed upload { wallet, name, symbol, description?, externalUrl?, imageBase64, nonce, signature } — canonical message agentonly-meta:<wallet>:<SYMBOL>:<sha256hex(image bytes)>:<nonce>",
    "GET /meta/<symbol>.json": "the hosted metadata JSON (what spec.metadataUri points at)",
    "GET /meta/<symbol>.<ext>": "the hosted image (png/jpg/webp/gif)",
    "GET /meta/<symbol>": "the upload record"
  },
  "limits": {
    "imageMaxBytes": 524288,
    "symbol": "2–12 chars A–Z0–9, first uploader owns the symbol",
    "descriptionMaxChars": 1000
  },
  "honesty": "Hosting claims nothing about a token — no endorsement, no verification, no attestation. It only makes URLs exist."
}