1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <!-- Google Analytics -->
vendor: 66 bytes, lines 4-5
4 5 <script async src="https://www.googletagmanager.com/gtag/js?id=
5G-38V5QSNJ8Y
vendor: 14 bytes, lines 5-6
5"></script> 6
6<script src="/js/analytics.js?v=2be847fbe7"></script>
6 7 <meta charset="UTF-8"> 8 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 9 <title>Name Whisper â Developer Documentation</title> 10
10<script>
vendor: 117 bytes, line 10
10window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag('js',new Date());gtag('config','
10G-38V5QSNJ8Y
vendor: 31 bytes, line 10
10',{page_title:document.title});
10</script>
10 11 <meta name="description" content="Complete developer docs for Name Whisper. 44 MCP tools and 120+ REST API endpoints for ENS name search, valuation, Seaport marketplace trading, swaps, agent identity, and management."> 12 <link rel="canonical" href="https://namewhisper.ai/docs"> 13 <meta property="og:type" content="website"> 14 <meta property="og:url" content="https://namewhisper.ai/docs"> 15 <meta property="og:title" content="Name Whisper â Developer Documentation"> 16 <meta property="og:image" content="https://namewhisper.ai/api/og/page/docs.png"> 17 <meta property="og:description" content="Complete developer docs for Name Whisper. 44 MCP tools and 120+ REST API endpoints for ENS name search, valuation, Seaport marketplace trading, swaps, agent identity, and management."> 18 <meta name="twitter:card" content="summary_large_image"> 19 <meta name="twitter:image" content="https://namewhisper.ai/api/og/page/docs.png"> 20 <meta name="twitter:title" content="Name Whisper â Developer Documentation"> 21 <meta name="twitter:description" content="Complete developer docs for Name Whisper. 44 MCP tools and 120+ REST API endpoints for ENS name search, valuation, Seaport marketplace trading, swaps, agent identity, and management."> 22
22<script type="application/ld+json"> 23 { 24 "@context": "https://schema.org", 25 "@type": "TechArticle", 26 "headline": "Name Whisper Developer Documentation", 27 "description": "Complete API reference for the Name Whisper ENS intelligence platform. 44 MCP tools and 120+ REST API endpoints.", 28 "url": "https://namewhisper.ai/docs", 29 "about": { "@type": "SoftwareApplication", "name": "Name Whisper", "applicationCategory": "DeveloperApplication" } 30 } 31 </script>
31 32 <link rel="preconnect" href="https://fonts.googleapis.com"> 33 <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> 34 <link href="https://fonts.googleapis.com/css2?family=Space+Grotesk:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500;600;700&family=DM+Sans:ital,opsz,wght@0,9..40,300;0,9..40,400;0,9..40,500;1,9..40,300&display=swap" rel="stylesheet"> 35 <style> 36 *, *::before, *::after { margin: 0; padding: 0; box-sizing: border-box; } 37 38 :root { 39 --bg: #08080a; 40 --bg-elevated: #0e0e12; 41 --surface: #131318; 42 --surface2: #1a1a22; 43 --surface3: #222230; 44 --border: #252530; 45 --border-subtle: #1c1c26; 46 --text: #eae8e4; 47 --text-secondary: #9b99a8; 48 --text-dim: #918ea2; 49 --accent: #d4a853; 50 --accent-bright: #f0c96e; 51 --accent-dim: #b08a35; 52 --accent-glow: rgba(212, 168, 83, 0.12); 53 --accent-glow-strong: rgba(212, 168, 83, 0.25); 54 --green: #5ee6a0; 55 --green-dim: rgba(94, 230, 160, 0.12); 56 --red: #f07070; 57 --blue: #6cacf0; 58 --blue-dim: rgba(108, 172, 240, 0.12); 59 --purple: #b08cf0; 60 --purple-dim: rgba(176, 140, 240, 0.12); 61 --cyan: #5ec6e6; 62 --cyan-dim: rgba(94, 198, 230, 0.12); 63 --font-display: 'Space Grotesk', -apple-system, sans-serif; 64 --font-body: 'DM Sans', -apple-system, sans-serif; 65 --font-mono: 'JetBrains Mono', 'SF Mono', monospace; 66 --radius: 12px; 67 --radius-sm: 8px; 68 --radius-xs: 6px; 69 --ease-out: cubic-bezier(0.16, 1, 0.3, 1); 70 } 71 72 body { 73 font-family: var(--font-body); 74 font-size: 16px; 75 background: var(--bg); 76 color: var(--text); 77 min-height: 100vh; 78 overflow-x: hidden; 79 -webkit-font-smoothing: antialiased; 80 } 81 82 body::before { 83 content: ''; 84 position: fixed; 85 inset: 0; 86 opacity: 0.02; 87 background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 256 256' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E"); 88 pointer-events: none; 89 z-index: 9999; 90 } 91 92 .ambient { 93 position: fixed; 94 top: -30vh; 95 left: 50%; 96 transform: translateX(-50%); 97 width: 90vw; 98 height: 60vh; 99 background: radial-gradient(ellipse 70% 55% at 50% 40%, rgba(108,172,240,0.12) 0%, transparent 70%); 100 pointer-events: none; 101 z-index: 0; 102 } 103 104 /* ââ Layout ââââââââââââââââââââââââââââââââââââââââ */ 105 .page { 106 position: relative; 107 z-index: 1; 108 max-width: 1060px; 109 margin: 0 auto; 110 padding: 0 24px; 111 } 112 113 /* ââ Header ââââââââââââââââââââââââââââââââââââââââ */ 114 .header { 115 display: flex; 116 align-items: center; 117 justify-content: space-between; 118 padding: 18px 0; 119 border-bottom: 1px solid var(--border-subtle); 120 animation: fadeIn 0.5s var(--ease-out); 121 } 122 .header-right { display: flex; align-items: center; gap: 8px; } 123 .logo { display: flex; align-items: baseline; gap: 6px; text-decoration: none; } 124 .logo-name { 125 font-family: var(--font-display); font-size: 24px; font-weight: 700; 126 background: linear-gradient(135deg, #f5d98a, var(--accent-bright), var(--accent), var(--accent-dim)); 127 -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; 128 } 129 .logo-whisper { 130 font-family: var(--font-display); font-size: 24px; font-weight: 300; letter-spacing: 2px; 131 background: linear-gradient(135deg, #999, #bbb, #888, #777); 132 -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; 133 } 134 .nav-link { 135 color: var(--text-secondary); font-family: var(--font-body); font-size: 13px; 136 text-decoration: none; padding: 6px 12px; border-radius: 100px; 137 transition: all 0.2s var(--ease-out); 138 } 139 .nav-link:hover { color: var(--accent); background: var(--accent-glow); } 140 .nav-link.active { color: var(--accent); } 141 142 /* ââ Hero âââââââââââââââââââââââââââââââââââââââââââ */ 143 .hero { 144 padding: 60px 0 48px; 145 text-align: center; 146 animation: fadeUp 0.6s var(--ease-out); 147 } 148 .hero-label { 149 font-family: var(--font-mono); font-size: 11px; font-weight: 500; 150 letter-spacing: 2px; text-transform: uppercase; color: var(--accent); 151 margin-bottom: 20px; 152 display: flex; align-items: center; justify-content: center; gap: 8px; 153 } 154 .hero-label::before, .hero-label::after { 155 content: ''; width: 24px; height: 1px; background: var(--accent-dim); 156 } 157 .hero h1 { 158 font-family: var(--font-display); font-size: 44px; font-weight: 700; 159 line-height: 1.1; letter-spacing: -1.5px; margin-bottom: 16px; 160 } 161 .hero h1 em { 162 font-style: normal; 163 background: linear-gradient(135deg, #f5d98a, var(--accent-bright), var(--accent)); 164 -webkit-background-clip: text; -webkit-text-fill-color: transparent; background-clip: text; 165 } 166 .hero-sub { 167 font-size: 17px; color: var(--text-secondary); line-height: 1.6; 168 max-width: 600px; margin: 0 auto 28px; 169 } 170 .hero-endpoints { 171 display: flex; justify-content: center; gap: 12px; flex-wrap: wrap; 172 } 173 .hero-endpoint { 174 display: inline-flex; align-items: center; justify-content: center; gap: 10px; 175 background: var(--surface); border: 1px solid var(--border); 176 border-radius: var(--radius-sm); padding: 12px 18px; 177 font-family: var(--font-mono); font-size: 12px; 178 /* The URL is one unbreakable token â let the chip wrap and the URL 179 break so it can never exceed the viewport. */ 180 flex-wrap: wrap; max-width: 100%;
180 overflow-wrap: anywhere; 181 } 182 .hero-endpoint .method { color: var(--green); font-weight: 600; } 183 .hero-endpoint .url { color: var(--accent-bright); } 184 .hero-endpoint .label { color: var(--text-dim); font-size: 10px; margin-right: 4px; } 185 .copy-btn { 186 background: var(--surface2); border: 1px solid var(--border); 187 color: var(--text-dim); font-family: var(--font-mono); font-size: 10px; 188 padding: 3px 7px; border-radius: var(--radius-xs); cursor: pointer; 189 transition: all 0.15s ease; 190 } 191 .code-block .copy-btn { 192 position: absolute; top: 8px; right: 8px; margin: 0; 193 } 194 .copy-btn:hover { color: var(--text-secondary); border-color: var(--accent-dim); } 195 196 /* ââ Docs Layout âââââââââââââââââââââââââââââââââââ */ 197 .docs-layout { 198 display: grid; 199 grid-template-columns: 200px 1fr; 200 gap: 48px; 201 padding: 48px 0; 202 } 203 204 /* ââ Sidebar âââââââââââââââââââââââââââââââââââââââ */ 205 .sidebar { 206 position: sticky; 207 top: 24px; 208 max-height: calc(100vh - 48px); 209 overflow-y: auto; 210 padding-right: 16px; 211 } 212 .sidebar::-webkit-scrollbar { width: 3px; } 213 .sidebar::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; } 214 .sidebar-section { margin-bottom: 20px; } 215 .sidebar-label { 216 font-family: var(--font-mono); font-size: 9px; font-weight: 600; 217 letter-spacing: 2px; text-transform: uppercase; 218 color: var(--text-dim); margin-bottom: 8px; padding-left: 10px; 219 } 220 .sidebar-link { 221 display: block; color: var(--text-dim); font-size: 12px; 222 text-decoration: none; padding: 5px 10px; border-radius: var(--radius-xs); 223 border-left: 2px solid transparent; 224 transition: all 0.15s ease; 225 } 226 .sidebar-link:hover { color: var(--text-secondary); background: var(--surface); } 227 .sidebar-link.active { color: var(--accent); border-left-color: var(--accent); background: var(--accent-glow); } 228 .sidebar-tool-link { 229 display: block; color: var(--text-dim); font-family: var(--font-mono); font-size: 10px; 230 text-decoration: none; padding: 3px 10px 3px 18px; 231 transition: color 0.15s ease; 232 } 233 .sidebar-tool-link:hover { color: var(--text-secondary); } 234 235 /* ââ Content ââââââââââââââââââââââââââââââââââââââââ */ 236 .content { min-width: 0; } 237 238 .doc-section { padding-bottom: 48px; margin-bottom: 48px; border-bottom: 1px solid var(--border-subtle); } 239 .doc-section:last-child { border-bottom: none; } 240 241 .section-label { 242 font-family: var(--font-mono); font-size: 10px; font-weight: 600; 243 letter-spacing: 2.5px; text-transform: uppercase; 244 color: var(--text-dim); margin-bottom: 10px; 245 } 246 .section-title { 247 font-family: var(--font-display); font-size: 26px; font-weight: 600; 248 letter-spacing: -0.5px; margin-bottom: 20px; 249 } 250 .section-desc { 251 font-size: 14px; color: var(--text-secondary); line-height: 1.7; margin-bottom: 24px; 252 max-width: 680px; 253 } 254 255 /* ââ Code Blocks âââââââââââââââââââââââââââââââââââ */ 256 .code-block { 257 background: var(--bg); border: 1px solid var(--border); 258 border-radius: var(--radius-xs); padding: 16px 50px 16px 18px; 259 font-family: var(--font-mono); font-size: 12px; line-height: 1.7; 260 color: var(--text-secondary); overflow-x: auto; position: relative; 261 white-space: pre; margin-bottom: 16px; 262 } 263 .code-block .kw { color: var(--purple); } 264 .code-block .fn { color: var(--blue); } 265 .code-block .str { color: var(--green); } 266 .code-block .cmt { color: var(--text-dim); } 267 .code-block .num { color: var(--accent-bright); } 268 269 /* ââ Connect Cards âââââââââââââââââââââââââââââââââ */ 270 .connect-grid { display: grid; grid-template-columns: 1fr; gap: 2px; margin-bottom: 24px; } 271 .connect-card { 272 background: var(--surface); border: 1px solid var(--border-subtle); padding: 28px 24px; 273 /* Grid items default to min-width:auto, which lets the pre-formatted 274 .code-block inside set the card's width and push the page sideways. 275 Pin it to 0 so the code block scrolls inside its own box instead. */ 276 min-width: 0; 277 } 278 .connect-card:first-child { border-radius: var(--radius) var(--radius) 0 0; } 279 .connect-card:last-child { border-radius: 0 0 var(--radius) var(--radius); } 280 .connect-card-label { 281 font-family: var(--font-mono); font-size: 10px; font-weight: 600; 282 letter-spacing: 2px; text-transform: uppercase; color: var(--text-dim); margin-bottom: 6px; 283 } 284 .connect-card-title { 285 font-family: var(--font-display); font-size: 17px; font-weight: 600; margin-bottom: 16px; 286 } 287 .connect-primary .connect-card-title { color: var(--accent-bright); } 288 .connect-note { 289 font-size: 12px; color: var(--text-dim); margin-top: 12px; line-height: 1.5; 290 } 291 292 /* ââ Tool Reference ââââââââââââââââââââââââââââââââ */ 293 .tool-category { margin-bottom: 36px; } 294 .tool-category-header { 295 display: flex; align-items: center; gap: 10px; 296 margin-bottom: 16px; padding-bottom: 10px; 297 border-bottom: 1px solid var(--border-subtle); 298 } 299 .tool-category-name { font-family: var(--font-display); font-size: 18px; font-weight: 600; } 300 .tool-badge { 301 font-family: var(--font-mono); font-size: 10px; font-weight: 600; 302 letter-spacing: 1px; text-transform: uppercase; padding: 3px 8px; border-radius: 4px; 303 } 304 .badge-free { color: var(--green); background: var(--green-dim); } 305 .badge-tx { color: var(--accent); background: var(--accent-glow); } 306 .badge-internal { color: var(--text-dim); background: rgba(92,90,106,0.15); } 307 .tool-count { 308 font-family: var(--font-mono); font-size: 11px; color: var(--text-dim); margin-left: auto; 309 } 310 311 /* ââ Tool Card ââââââââââââââââââââââââââââââââââââââ */ 312 .tool-card { 313 background: var(--surface); border: 1px solid var(--border-subtle); 314 border-radius: var(--radius-sm); margin-bottom: 8px; 315 transition: border-color 0.2s ease; 316 } 317 .tool-card:hover { border-color: var(--border); } 318 .tool-card-header { 319 display: flex; align-items: center; gap: 12px; 320 padding: 14px 20px; cursor: pointer; user-select: none; 321 } 322 .tool-card-header::after { 323 content: '+'; font-family: var(--font-mono); font-size: 14px; color: var(--text-dim); 324 margin-left: auto; transition: transform 0.2s ease; 325 } 326 .tool-card.open .tool-card-header::after { content: '\2212'; color: var(--accent); } 327 /* Endpoint paths are single unbreakable tokens â allow them to break so 328 the longest one cannot set the card width on very narrow screens. */ 329 .tool-card-name { font-family: var(--font-mono); font-size: 13px; font-weight: 500; color: var(--accent-bright); min-width: 0;
329 overflow-wrap: anywhere; } 330 .tool-card-summary { font-size: 12.5px; color: var(--text-secondary); } 331 .tool-card-body { 332 display: none; padding: 0 20px 20px; 333 border-top: 1px solid var(--border-subtle); 334 } 335 .tool-card.open .tool-card-body { display: block; padding-top: 16px; } 336 .tool-card-desc { 337 font-size: 13px; color: var(--text-secondary); line-height: 1.6; margin-bottom: 16px; 338 } 339 340 /* ââ Parameter Table âââââââââââââââââââââââââââââââ */ 341 .param-table { width: 100%; border-collapse: collapse; margin-bottom: 16px; } 342 .param-table th { 343 font-family: var(--font-mono); font-size: 10px; font-weight: 600; 344 letter-spacing: 1.5px; text-transform: uppercase; color: var(--text-dim); 345 text-align: left; padding: 8px 12px; border-bottom: 1px solid var(--border); 346 } 347 .param-table td { 348 font-size: 12px; padding: 8px 12px; border-bottom: 1px solid var(--border-subtle); 349 color: var(--text-secondary); vertical-align: top; 350 } 351 .param-table td:first-child { 352 font-family: var(--font-mono); font-size: 12px; color: var(--text); white-space: nowrap; 353 } 354 .param-table .type { color: var(--purple); font-family: var(--font-mono); font-size: 11px; } 355 .param-table .required { color: var(--accent); font-family: var(--font-mono); font-size: 10px; } 356 .param-table .optional { color: var(--text-dim); font-family: var(--font-mono); font-size: 10px; } 357 358 .example-label { 359 font-family: var(--font-mono); font-size: 10px; font-weight: 600; 360 letter-spacing: 1.5px; text-transform: uppercase; color: var(--text-dim); 361 margin-bottom: 8px; 362 } 363 364 /* ââ Workflow Cards âââââââââââââââââââââââââââââââââ */ 365 .workflow-grid { display: grid; grid-template-columns: 1fr; gap: 16px; } 366 .workflow-card { 367 background: var(--surface); border: 1px solid var(--border-subtle); 368 border-radius: var(--radius-sm); padding: 24px; 369 } 370 .workflow-title { 371 font-family: var(--font-display); font-size: 16px; font-weight: 600; margin-bottom: 12px; 372 } 373 .workflow-steps { list-style: none; } 374 .workflow-steps li { 375 font-size: 13px; color: var(--text-secondary); line-height: 1.6; 376 padding: 6px 0; padding-left: 24px; position: relative; 377 } 378 .workflow-steps li::before { 379 content: attr(data-step); position: absolute; left: 0; 380 font-family: var(--font-mono); font-size: 11px; font-weight: 600; color: var(--accent); 381 } 382 .workflow-steps code { 383 font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright); 384 background: var(--accent-glow); padding: 1px 6px; border-radius: 3px; 385 } 386 387 /* ââ Standards ââââââââââââââââââââââââââââââââââââââ */ 388 .standards-grid { display: grid; grid-template-columns: 1fr 1fr; gap: 2px; } 389 .standard-card { 390 background: var(--surface); border: 1px solid var(--border-subtle); padding: 24px; 391 } 392 .standard-card:first-child { border-radius: var(--radius) 0 0 var(--radius); } 393 .standard-card:last-child { border-radius: 0 var(--radius) var(--radius) 0; } 394 .standard-name { 395 font-family: var(--font-mono); font-size: 14px; font-weight: 600; margin-bottom: 8px; 396 } 397 .standard-desc { font-size: 13px; color: var(--text-secondary); line-height: 1.5; } 398 .standard-status { 399 font-family: var(--font-mono); font-size: 10px; letter-spacing: 1px; 400 text-transform: uppercase; margin-top: 8px; 401 } 402 .status-live { color: var(--green); } 403 .status-partial { color: var(--accent); } 404 405 /* ââ Footer ââââââââââââââââââââââââââââââââââââââââââ */ 406 .footer { 407 padding: 40px 0; border-top: 1px solid var(--border-subtle); 408 display: flex; align-items: center; justify-content: space-between; margin-top: 20px; 409 } 410 .footer-brand { 411 font-family: var(--font-display); font-size: 13px; color: var(--text-dim); 412 } 413 .footer-links { display: flex; gap: 20px; flex-wrap: wrap; } 414 .footer-links a { font-family: var(--font-mono); font-size: 11px; color: var(--text-dim); text-decoration: none; letter-spacing: 0.3px; transition: color 0.2s; } 415 .footer-links a:hover { color: var(--accent); } 416 417 /* ââ Animation ââââââââââââââââââââââââââââââââââââââââ */
418 @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } 419 @keyframes fadeUp { from { opacity: 0; transform: translateY(16px); } to { opacity: 1; transform: translateY(0); } } 420 421 /* ââ Responsive âââââââââââââââââââââââââââââââââââââââ */ 422 @media (max-width: 900px) { 423 .docs-layout { grid-template-columns: 1fr; gap: 0; } 424 .sidebar { 425 position: relative; top: 0; max-height: none; 426 display: flex; flex-wrap: wrap; gap: 4px; 427 padding: 16px 0; border-bottom: 1px solid var(--border-subtle); 428 margin-bottom: 24px; 429 } 430 .sidebar-section { margin-bottom: 8px; } 431 .sidebar-label { display: none; } 432 .sidebar-tool-link { display: none; } 433 .sidebar-link { font-size: 11px; padding: 4px 10px; } 434 } 435 @media (max-width: 768px) { 436 .page { padding: 0 16px; } 437 .logo-name, .logo-whisper { font-size: 20px; } 438 /* Nav pills wrap onto their own row under the logo rather than 439 widening the page. Sized to match the mobile sidebar pills. */ 440 .header { padding: 14px 0; flex-wrap: wrap; gap: 8px 12px; } 441 .logo { flex-shrink: 0; } 442 .header-right { flex-wrap: wrap; min-width: 0; row-gap: 6px; } 443 .nav-link { flex-shrink: 0; font-size: 11px; padding: 4px 10px; } 444 .hero { padding: 40px 0 32px; } 445 .hero h1 { font-size: 28px; letter-spacing: -0.5px; } 446 .hero-sub { font-size: 15px; } 447 .hero-endpoints { flex-direction: column; align-items: center; } 448 .hero-endpoint { font-size: 11px; padding: 10px 14px; } 449 .connect-grid { grid-template-columns: 1fr; } 450 .connect-card { border-radius: 0 !important; } 451 .connect-card:first-child { border-radius: var(--radius) var(--radius) 0 0 !important; } 452 .connect-card:last-child { border-radius: 0 0 var(--radius) var(--radius) !important; } 453 .standards-grid { grid-template-columns: 1fr; } 454 .standard-card { border-radius: 0 !important; } 455 .standard-card:first-child { border-radius: var(--radius) var(--radius) 0 0 !important; } 456 .standard-card:last-child { border-radius: 0 0 var(--radius) var(--radius) !important; } 457 .section-title { font-size: 22px; } 458 .footer { flex-direction: column; gap: 16px; text-align: center; } 459 .tool-card-header { flex-wrap: wrap; } 460 .tool-card-summary { flex-basis: 100%; margin-top: 4px; } 461 } 462 </style> 463</head> 464<body> 465 <div class="ambient"></div> 466 467 <div class="page"> 468 469 <!-- Header --> 470 <header class="header"> 471 <a class="logo" href="/" title="Home"> 472 <span class="logo-name">Name</span> 473 <span class="logo-whisper">Whisper</span> 474 </a> 475 <div class="header-right"> 476 <a href="/terminal" class="nav-link">Terminal</a> 477 <a href="/guide" class="nav-link">Guide</a> 478 <a href="/docs" class="nav-link active">Docs</a> 479 <a href="/agents" class="nav-link">Agents</a> 480 <a href="/launch" class="nav-link">Launch</a> 481 </div> 482 </header> 483 484 <!-- Hero --> 485 <section class="hero"> 486 <div class="hero-label">Developer Documentation</div> 487 <h1><em>44 MCP tools</em> for ENS</h1> 488 <p class="hero-sub">Search, value, trade, swap, and manage ENS names programmatically — and provision agent identities. 120+ REST API endpoints. Dual transport — connect via HTTP or stdio.</p> 489 <div class="hero-endpoints"> 490 <div class="hero-endpoint"> 491 <span class="label">HTTP</span> 492 <span class="method">POST</span> 493 <span class="url">https://namewhisper.ai/mcp</span> 494 <button class="copy-btn" onclick="copyText('https://namewhisper.ai/mcp', this)">copy</button> 495 </div> 496 <div class="hero-endpoint"> 497 <span class="label">stdio</span> 498 <span class="method">RUN</span> 499 <span class="url">node mcp-server.js</span> 500 <button class="copy-btn" onclick="copyText('node mcp-server.js', this)">copy</button> 501 </div> 502 </div> 503 </section> 504 505 <!-- Docs Layout --> 506 <div class="docs-layout"> 507 508 <!-- Sidebar --> 509 <nav class="sidebar"> 510 <div class="sidebar-section"> 511 <div class="sidebar-label">Getting Started</div> 512 <a href="#quickstart" class="sidebar-link active">Quick Start</a> 513 <a href="#workflows" class="sidebar-link">Workflows</a> 514 <a href="#standards" class="sidebar-link">Standards</a> 515 <a href="#payments" class="sidebar-link">Payments</a> 516 </div> 517 <div class="sidebar-section"> 518 <div class="sidebar-label">MCP Tools</div> 519 <a href="#cat-discovery" class="sidebar-link">Discovery (9)</a> 520 <a href="#cat-intelligence" class="sidebar-link">Intelligence (3)</a> 521 <a href="#cat-commerce" class="sidebar-link">Commerce (10)</a> 522 <a href="#cat-management" class="sidebar-link">Management (8)</a> 523 <a href="#cat-namewrapper" class="sidebar-link">NameWrapper (5)</a> 524 <a href="#cat-access" class="sidebar-link">Access (2)</a> 525 <a href="#cat-agent" class="sidebar-link">Agent Identity (4)</a> 526 <a href="#cat-auth" class="sidebar-link">Authentication (1)</a> 527 <a href="#cat-knowledge" class="sidebar-link">Knowledge (1)</a> 528 <a href="#cat-internal" class="sidebar-link">Internal (1)</a> 529 </div> 530 <div class="sidebar-section"> 531 <div class="sidebar-label">REST API</div> 532 <a href="#rest-auth" class="sidebar-link">Authentication</a> 533 <a href="#rest-search" class="sidebar-link">Search (2)</a> 534 <a href="#rest-profiles" class="sidebar-link">Name Profiles (5)</a> 535 <a href="#rest-market" class="sidebar-link">Market Intel (4)</a> 536 <a href="#rest-categories" class="sidebar-link">Categories (4)</a> 537 <a href="#rest-expiry" class="sidebar-link">Expiry (2)</a> 538 <a href="#rest-whales" class="sidebar-link">Whales (4)</a> 539 <a href="#rest-catstats" class="sidebar-link">Category Stats (2)</a> 540 <a href="#rest-marketplace" class="sidebar-link">Marketplace (5)</a> 541 <a href="#rest-trading" class="sidebar-link">Trading (26)</a> 542 <a href="#rest-orderbook" class="sidebar-link">Orderbook (14)</a> 543 <a href="#rest-user" class="sidebar-link">User (17)</a> 544 <a href="#rest-portfolio" class="sidebar-link">Portfolio (4)</a> 545 <a href="#rest-terminal" class="sidebar-link">Terminal (5)</a> 546 <a href="#rest-knowledge" class="sidebar-link">Knowledge (1)</a> 547 <a href="#rest-media" class="sidebar-link">Media (1)</a> 548 <a href="#rest-agents" class="sidebar-link">Agents & Hosting (6)</a> 549 <a href="#rest-guardian" class="sidebar-link">Renewal Guardian (3)</a> 550 </div> 551 </nav> 552 553 <!-- Content --> 554 <main class="content"> 555 556 <!-- Quick Start --> 557 <section id="quickstart" class="doc-section"> 558 <div class="section-label">Getting Started</div> 559 <div class="section-title">Quick Start</div> 560 <div class="section-desc">Connect to the Name Whisper MCP server in under a minute. Choose HTTP for remote agents or stdio for local development.</div> 561 562 <div class="connect-grid"> 563 <div class="connect-card connect-primary"> 564 <div class="connect-card-label">Remote</div> 565 <div class="connect-card-title">
565HTTP Transport</div> 566 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button><span class="kw">import</span> { Client } <span class="kw">from</span> <span class="str">"@modelcontextprotocol/sdk/client/index.js"</span>; 567<span class="kw">import</span> { StreamableHTTPClientTransport } <span class="kw">from</span> 568 <span class="str">"@modelcontextprotocol/sdk/client/streamableHttp.js"</span>; 569 570<span class="kw">const</span> transport = <span class="kw">new</span> <span class="fn">StreamableHTTPClientTransport</span>({ 571 url: <span class="str">"https://namewhisper.ai/mcp"</span>, 572}); 573 574<span class="kw">const</span> client = <span class="kw">new</span> <span class="fn">Client</span>({ 575 name: <span class="str">"my-agent"</span>, 576 version: <span class="str">"1.0.0"</span>, 577}); 578 579<span class="kw">await</span> client.<span class="fn">connect</span>(transport); 580 581<span class="cmt">// Call a tool</span> 582<span class="kw">const</span> result = <span class="kw">await</span> client.<span class="fn">callTool</span>({ 583 name: <span class="str">"search_ens_names"</span>, 584 arguments: { query: <span class="str">"3-letter words under 0.1 ETH"</span> }, 585});</div> 586 <div class="connect-note">Stateful sessions with 30-minute idle timeout. No API key required.</div> 587 </div> 588 <div class="connect-card"> 589 <div class="connect-card-label">Local</div> 590 <div class="connect-card-title">stdio Transport</div> 591 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button><span class="cmt">// Claude Desktop / Cursor config</span> 592{ 593 <span class="str">"mcpServers"</span>: { 594 <span class="str">"name-whisper"</span>: { 595 <span class="str">"command"</span>: <span class="str">"node"</span>, 596 <span class="str">"args"</span>: [<span class="str">"mcp-server.js"</span>], 597 <span class="str">"cwd"</span>: <span class="str">"/path/to/nw-terminal"</span>, 598 <span class="str">"env"</span>: { 599 <span class="str">"SUPABASE_URL"</span>: <span class="str">"..."</span>, 600 <span class="str">"SUPABASE_KEY"</span>: <span class="str">"..."</span> 601 } 602 } 603 } 604}</div> 605 <div class="connect-note">Requires the repository cloned with <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">npm install</code> and environment variables configured.</div> 606 </div> 607 </div> 608 </section> 609 610 <!-- Tool Reference --> 611 <section id="tools" class="doc-section"> 612 <div class="section-label">Tool Reference</div> 613 <div class="section-title">All 44 tools</div> 614 <div class="section-desc">Each tool accepts JSON parameters and returns <code style="font-family: var(--font-mono); font-size: 12px; color: var(--accent-bright);">{ content: [{ type: "text", text: "..." }] }</code>. Click a tool to see parameters and examples. Trading tools build standard <strong>Seaport</strong> orders, so listings and fills share the same on-chain liquidity as the wider market (including OpenSea); they return unsigned transactions for the caller to sign — Name Whisper never holds keys.</div> 615 616 <!-- Discovery --> 617 <div id="cat-discovery" class="tool-category"> 618 <div class="tool-category-header"> 619 <span class="tool-category-name">Discovery</span> 620 <span class="tool-badge badge-free">Read-Only</span> 621 <span class="tool-count">8 tools</span> 622 </div> 623 624 <div class="tool-card" data-tool="search_ens_names"> 625 <div class="tool-card-header" onclick="toggleTool(this)"> 626 <span class="tool-card-name">search_ens_names</span> 627 <span class="tool-card-summary">Natural language search across 3.5M indexed ENS names</span> 628 </div> 629 <div class="tool-card-body"> 630 <div class="tool-card-desc">Automatic intent detection routes to filtered DB search, semantic vector search, creative AI generation, or bulk availability check.</div> 631 <table class="param-table"> 632 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 633 <tr><td>query</td><td>
633<span class="type">string</span></td><td><span class="required">required</span></td><td>Natural language query</td></tr> 634 </table> 635 <div class="example-label">Example</div> 636 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"query"</span>: <span class="str">"ocean themed names under 0.5 ETH"</span> }</div> 637 </div> 638 </div> 639 640 <div class="tool-card" data-tool="enumerate_entities"> 641 <div class="tool-card-header" onclick="toggleTool(this)"> 642 <span class="tool-card-name">enumerate_entities</span> 643 <span class="tool-card-summary">List a real-world category as ENS labels + availability</span> 644 </div> 645 <div class="tool-card-body"> 646 <div class="tool-card-desc">Give a finite real-world category ("NBA hall of fame players", "Pixar feature films", "F1 world champions") and get back verified, correctly-spelled ENS labels grouped by status (available vs registered). Use this instead of generating entity names yourself and calling check_availability — it eliminates misspellings and invented entries.</div> 647 <table class="param-table"> 648 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 649 <tr><td>category</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>A specific real-world entity category (no price/quality qualifiers)</td></tr> 650 <tr><td>filter</td><td><span class="type">enum</span></td><td><span class="optional">default: all</span></td><td>all, available, or registered</td></tr> 651 </table> 652 <div class="example-label">Example</div> 653 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"category"</span>: <span class="str">"F1 world champions"</span>, <span class="str">"filter"</span>: <span class="str">"available"</span> }</div> 654 </div> 655 </div> 656 657 <div class="tool-card" data-tool="get_name_details"> 658 <div class="tool-card-header" onclick="toggleTool(this)"> 659 <span class="tool-card-name">get_name_details</span> 660 <span class="tool-card-summary">Full metadata + listings + ENSIP-25 agent bindings</span> 661 </div> 662 <div class="tool-card-body"> 663 <div class="tool-card-desc">Owner, expiry, tags, active listings with prices, active offers, and agent identity text records.<
663/div> 664 <table class="param-table"> 665 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 666 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name or label (e.g. "vitalik.eth")</td></tr> 667 </table> 668 <div class="example-label">Example</div> 669 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"name"</span>: <span class="str">"vitalik.eth"</span> }</div> 670 </div> 671 </div> 672 673 <div class="tool-card" data-tool="check_availability"> 674 <div class="tool-card-header" onclick="toggleTool(this)"> 675 <span class="tool-card-name">check_availability</span> 676 <span class="tool-card-summary">Bulk verify registration status</span> 677 </div> 678 <div class="tool-card-body"> 679 <div class="tool-card-desc">Returns status (AVAILABLE, REGISTERED, EXPIRED, INVALID), owner, expiry, and registration cost for each name.</div> 680 <table class="param-table"> 681 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 682 <tr><td>names</td><td><span class="type">string[]</span></td><td><span class="required">required</span></td><td>Array of ENS names or labels</td></tr> 683 </table> 684 <div class="example-label">Example</div> 685 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"names"</span>: [<span class="str">"coffee.eth"</span>, <span class="str">"tea.eth"</span>, <span class="str">"pixel.eth"</span>] }</div> 686 </div> 687 </div> 688 689 <div class="tool-card" data-tool="get_similar_names"> 690 <div class="tool-card-header" onclick="toggleTool(this)"> 691 <span class="tool-card-name">get_similar_names</span> 692 <span class="tool-card-summary">Semantic vector search for related names</span> 693 </div> 694 <div class="tool-card-body"> 695 <div class="tool-card-desc">256-dimensional vector embeddings across 3.5M indexed ENS names. Returns similarity scores and live marketplace data.</div> 696 <table class="param-table"> 697 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 698 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name or label</td></tr> 699 <tr><td>limit</td><td><span class="type">number</span></td><td><span class="optional">default: 20</span></td><td>Max results (max 50)</td></tr> 700 </table> 701 <div class="example-label">Example</div> 702 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"name"</span>: <span class="str">"coffee"</span>, <span class="str">"limit"</span>: <span class="num">10</span> }</div> 703 </div> 704 </div> 705 706 <div class="tool-card" data-tool="get_primary_name"> 707 <div class="tool-card-header" onclick="toggleTool(this)"> 708 <span class="tool-card-name">get_primary_name</span> 709 <span class="tool-card-summary">Reverse ENS resolution (address → name)</span> 710 </div> 711 <div class="tool-card-body"> 712 <div class="tool-card-desc">Check what primary ENS name is set for a wallet address. Verifies both directions (reverse: address → name, forward: name → address).</div> 713 <table class="param-table"> 714 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 715 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Ethereum wallet address (0x...)</td></tr> 716 </table> 717 <div class="example-label">Example</div> 718 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"walletAddress"</span>: <span class="str">"0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045"</span> }</div> 719 </div> 720 </div> 721 722 <div class="tool-card" data-tool="wash_check"> 723 <div class="tool-card-header" onclick="toggleTool(this)">
724 <span class="tool-card-name">wash_check</span> 725 <span class="tool-card-summary">Detect wash trading with confidence scoring</span> 726 </div> 727 <div class="tool-card-body"> 728 <div class="tool-card-desc">Analyse an ENS sale for wash trading signals. Returns confidence score (0–1), label (clean/suspicious/likely_wash), detected signals, and summary. Provide tx_hash for pre-computed score, or label + buyer + seller + price for live analysis.</div> 729 <table class="param-table"> 730 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 731 <tr><td>tx_hash</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>Transaction hash for pre-computed lookup</td></tr> 732 <tr><td>label</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>ENS label for live analysis</td></tr> 733 <tr><td>buyer</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>Buyer wallet address</td></tr> 734 <tr><td>seller</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>Seller wallet address</td></tr> 735 <tr><td>price_eth</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Sale price in ETH</td></tr> 736 </table> 737 <div class="example-label">Example</div> 738 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"tx_hash"</span>: <span class="str">"0xabc123..."</span> }</div> 739 </div> 740 </div> 741 742 <div class="tool-card" data-tool="get_market_activity"> 743 <div class="tool-card-header" onclick="toggleTool(this)"> 744 <span class="tool-card-name">get_market_activity</span> 745 <span class="tool-card-summary">Recent sales, premium registrations, swaps</span> 746 </div> 747 <div class="tool-card-body"> 748 <table class="param-table"> 749 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 750 <tr><td>eventTypes</td><td><span class="type">string[]</span></td><td><span class="optional">default: all</span></td><td>SALE, PREMIUM_REGISTRATION, SWAP (the only three values)</td></tr> 751 <tr><td>limit</td><td><span class="type">number</span></td><td><span class="optional">default: 25</span></td><td>Max results (max 100)</td></tr> 752 <tr><td>offset</td><td><span class="type">number</span></td><td><span class="optional">default: 0</span></td><td>Pagination offset</td></tr> 753 </table> 754 <div class="example-label">Example</div> 755 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"eventTypes"</span>: [<span class="str">"SALE"</span>], <span class="str">"limit"</span>: <span class="num">10</span> }</div> 756 </div> 757 </div> 758 759 <div class="tool-card" data-tool="get_expiring_names"> 760 <div class="tool-card-header" onclick="toggleTool(this)"> 761 <span class="tool-card-name">get_expiring_names</span> 762 <span class="tool-card-summary">Names expiring, in grace, or in premium auction</span> 763 </div> 764 <div class="tool-card-body"> 765 <div class="tool-card-desc">List ENS names by lifecycle window: expiring soon, in grace (0&n
765dash;90d past expiry, renewable only), or in the 21-day premium Dutch auction (registerable at a decaying premium). Grace and premium rows are validated against on-chain state, and premium rows carry live pricing.</div> 766 <table class="param-table"> 767 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 768 <tr><td>status</td><td><span class="type">string</span></td><td><span class="optional">default: premium</span></td><td>premium, grace, active, all</td></tr> 769 <tr><td>days</td><td><span class="type">number</span></td><td><span class="optional">default: 30</span></td><td>Look-ahead window for status active/all</td></tr> 770 <tr><td>minLength</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Minimum label length in characters</td></tr> 771 <tr><td>maxLength</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Maximum label length in characters</td></tr> 772 <tr><td>charType</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>letters, numbers, emoji, mixed</td></tr> 773 <tr><td>category</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>Collection slug (e.g. 999-club)</td></tr> 774 <tr><td>dictionaryOnly</td><td><span class="type">boolean</span></td><td><span class="optional">optional</span></td><td>Only dictionary words</td></tr> 775 <tr><td>sortBy</td><td><span class="type">string</span></td><td><span class="optional">default: expires</span></td><td>expires, length, social</td></tr> 776 <tr><td>limit</td><td><span class="type">number</span></td><td><span class="optional">default: 25</span></td><td>Max results (max 100)</td></tr> 777 </table> 778 <div class="example-label">Example</div> 779 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"status"</span>: <span class="str">"premium"</span>, <span class="str">"charType"</span>: <span class="str">"numbers"</span>, <span class="str">"limit"</span>: <span class="num">10</span> }</div> 780 </div> 781 </div> 782 </div> 783 784 <!-- Intelligence --> 785 <div id="cat-intelligence" class="tool-category"> 786 <div class="tool-category-header"> 787 <span class="tool-category-name">Intelligence</span> 788 <span class="tool-badge badge-free">Read-Only</span> 789 <span class="tool-count">3 tools</span> 790 </div> 791 792 <div class="tool-card" data-tool="get_valuation"> 793 <div class="tool-card-header" onclick="toggleTool(this)"> 794 <span class="tool-card-name">get_valuation</span> 795 <span class="tool-card-summary">Three-track valuation with confidence rating</span> 796 </div> 797 <div class="tool-card-body"> 798 <div class="tool-card-desc">Track A: comparable sales with IQR outlier removal. Track B: quality-reference from word frequency + entity fame + search interest. Track C: self-history. The three tracks are combined into a weighted blend (re-weighted by how much data each track has), then adjusted by category floors and a market-trend multiplier. Returns low/mid/high with a confidence score.</div> 799 <table class="param-table"> 800 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 801 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name or label to value</td></tr> 802 </table> 803 <div class="example-label">Example</div> 804 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"name"</span>: <span class="str">"bitcoin.eth"</span> }</div> 805 </div> 806 </div> 807 808 <div class="tool-card" data-tool="get_wallet_portfolio"> 809 <div class="tool-card-header" onclick="toggleTool(this)">
810 <span class="tool-card-name">get_wallet_portfolio</span> 811 <span class="tool-card-summary">All ENS names owned by a wallet</span> 812 </div> 813 <div class="tool-card-body"> 814 <table class="param-table"> 815 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 816 <tr><td>wallet</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Wallet address (0x...) or ENS name</td></tr> 817 <tr><td>limit</td><td><span class="type">number</span></td><td><span class="optional">default: 100</span></td><td>Max results (max 200)</td></tr> 818 <tr><td>offset</td><td><span class="type">number</span></td><td><span class="optional">default: 0</span></td><td>Pagination offset</td></tr> 819 </table> 820 <div class="example-label">Example</div> 821 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"wallet"</span>: <span class="str">"vitalik.eth"</span> }</div> 822 </div> 823 </div> 824 825 <div class="tool-card" data-tool="find_alpha"> 826 <div class="tool-card-header" onclick="toggleTool(this)"> 827 <span class="tool-card-name">find_alpha</span> 828 <span class="tool-card-summary">Discover underpriced listings</span> 829 </div> 830 <div class="tool-card-body"> 831 <div class="tool-card-desc">Scan for names listed below their comparable-sales valuation. Returns ranked opportunities with discount percentage and confidence.</div> 832 <table class="param-table"> 833 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 834 <tr><td>maxPriceEth</td><td><span class="type">number</span></td><td><span class="optional">no cap</span></td><td>Max listing price in ETH</td></tr> 835 <tr><td>minDiscountPct</td><td><span class="type">number</span></td><td><span class="optional">default: 20</span></td><td>Min discount vs estimated value (1-99)</td></tr> 836 <tr><td>minLength</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Min label length</td></tr> 837 <tr><td>maxLength</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Max label length</td></tr> 838 <tr><td>tags</td><td><span class="type">string[]</span></td><td><span class="optional">optional</span></td><td>LETTERS_ONLY, NUMBERS_ONLY, EMOJI, PALINDROME</td></tr> 839 <tr><td>minConfidence</td><td><span class="type">enum</span></td><td><span class="optional">default: LOW</span></td><td>HIGH (20+ sales), MEDIUM (10+), LOW (3+)</td></tr> 840 <tr><td>limit</td><td><span class="type">number</span></td><td><span class="optional">default: 25</span></td><td>Max results (max 100)</td></tr> 841 </table> 842 <div class="example-label">Example</div> 843 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"maxPriceEth"</span>: <span class="num">0.5</span>, <span class="str">"minDiscountPct"</span>: <span class="num">30</span>, <span class="str">"limit"</span>: <span class="num">10</span> }</div> 844 </div> 845 </div> 846 </div> 847 848 <!-- Commerce --> 849 <div id="cat-commerce" class="tool-category"> 850 <div class="tool-category-header"> 851 <span class="tool-category-name">Commerce</span> 852 <span class="tool-badge badge-tx">Transaction</span> 853 <span class="tool-count">10 tools</span> 854 </div> 855 856 <div class="tool-card" data-tool="purchase_name"> 857 <div class="tool-card-header" onclick="toggleTool(this)"> 858 <span class="tool-card-name">purchase_name</span> 859 <span class="tool-card-summary">Register available or buy listed names</span> 860 </div> 861 <div class="tool-card-body"> 862 <div class="tool-card-desc">Auto-detects available vs listed. Available: returns registration recipe (commit → wait 60s → register). Listed: searches all marketplaces for best price, returns Seaport order data.</div> 863 <table class="param-table"> 864 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 865 <tr><td>name</td><td>
865<span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name to purchase</td></tr> 866 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Buyer wallet address</td></tr> 867 <tr><td>maxPriceEth</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Max price (for listed names)</td></tr> 868 <tr><td>durationYears</td><td><span class="type">number</span></td><td><span class="optional">default: 1</span></td><td>Registration duration</td></tr> 869 <tr><td>action</td><td><span class="type">enum</span></td><td><span class="optional">default: auto</span></td><td>buy_listing, register, or auto</td></tr> 870 </table> 871 </div> 872 </div> 873 874 <div class="tool-card" data-tool="make_offer"> 875 <div class="tool-card-header" onclick="toggleTool(this)"> 876 <span class="tool-card-name">make_offer</span> 877 <span class="tool-card-summary">Submit a bid on a registered name</span> 878 </div> 879 <div class="tool-card-body"> 880 <table class="param-table"> 881 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 882 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name to bid on</td></tr> 883 <tr><td>amountEth</td><td><span class="type">number</span></td><td><span class="required">required</span></td><td>Offer amount in ETH</td></tr> 884 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Your wallet address</td></tr> 885 <tr><td>currency</td><td><span class="type">enum</span></td><td><span class="optional">default: WETH</span></td><td>WETH, USDC, or DAI</td></tr> 886 <tr><td>expiryHours</td><td><span class="type">number</span></td><td><span class="optional">default: 72</span></td><td>Offer expiry in hours</td></tr> 887 </table> 888 </div> 889 </div> 890 891 <div class="tool-card" data-tool="bulk_register"> 892 <div class="tool-card-header" onclick="toggleTool(this)"> 893 <span class="tool-card-name">bulk_register</span> 894 <span class="tool-card-summary">Batch register up to 20 names in 2 txns</span> 895 </div> 896 <div class="tool-card-body"> 897 <div class="tool-card-desc">All names batched into a single batchCommit + batchRegister via Multicall3. Each name gets its own front-running protection secret. A 1% NameWhisper interface fee is charged on top of the ENS price and returned broken out as <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">totalCost.feeEth</code>.</div> 898 <table class="param-table"> 899 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 900 <tr><td>names</td><td><span class="type">string[]</span></td><td><span class="required">required</span></td><td>Array of ENS names (max 20)</td></tr> 901 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Owner wallet address</td></tr> 902 <tr><td>durationYears</td><td><span class="type">number</span></td><td><span class="optional">default: 1</span></td><td>Duration (same for all)</td></tr> 903 </table> 904 </div> 905 </div> 906 907 <div class="tool-card" data-tool="batch_purchase"> 908 <div class="tool-card-header" onclick="toggleTool(this)"> 909 <span class="tool-card-name">batch_purchase</span> 910 <span class="tool-card-summary">Buy up to 20 specific listed names in one Seaport tx</span> 911 </div> 912 <div class="tool-card-body"> 913 <div class="tool-card-desc">Picks the cheapest batchable listing per name from the shared Seaport orderbook (NameWhisper + OpenSea liquidity), loads each full Seaport order, and encodes one fulfillAvailableAdvancedOrders call. NFTs go directly to your wallet. Seaport skips stale orders and refunds excess ETH â partial success is safe. To buy the cheapest N in a category instead of named names, use sweep.</div> 914 <table class="param-table"> 915 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 916 <tr><td>names</td><td>
916<span class="type">string[]</span></td><td><span class="required">required</span></td><td>ENS names to buy (max 20)</td></tr> 917 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Buyer wallet (receives all names)</td></tr> 918 </table> 919 </div> 920 </div> 921 922 <div class="tool-card" data-tool="sweep"> 923 <div class="tool-card-header" onclick="toggleTool(this)"> 924 <span class="tool-card-name">sweep</span> 925 <span class="tool-card-summary">Floor-sweep the cheapest N in a category in one tx</span> 926 </div> 927 <div class="tool-card-body"> 928 <div class="tool-card-desc">Buys the cheapest N listed names in a category/collection (or matching a filter) in a single Seaport transaction. Same engine as batch_purchase, but selects names cheapest-first across the shared Seaport orderbook (NameWhisper + OpenSea liquidity). Bound it by count and/or total budget, with an optional per-name cap. Capped at 20 names per tx.</div> 929 <table class="param-table"> 930 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 931 <tr><td>category</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>Collection slug(s), comma-separated (e.g. 999-club)</td></tr> 932 <tr><td>q / charType / minLength / maxLength</td><td><span class="type">mixed</span></td><td><span class="optional">optional</span></td><td>Additional cohort filters</td></tr> 933 <tr><td>count</td><td><span class="type">number</span></td><td><span class="optional">default: 10</span></td><td>How many to sweep, cheapest-first (max 20)</td></tr> 934 <tr><td>maxBudgetEth</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Total ETH budget</td></tr> 935 <tr><td>maxPriceEth</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Per-name price cap</td></tr> 936 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Buyer wallet (receives all swept names)</td></tr> 937 </table> 938 </div> 939 </div> 940 941 <div class="tool-card" data-tool="create_listing"> 942 <div class="tool-card-header" onclick="toggleTool(this)"> 943 <span class="tool-card-name">create_listing</span> 944 <span class="tool-card-summary">List a name for sale on NameWhisper</span> 945 </div> 946 <div class="tool-card-body"> 947 <div class="tool-card-desc">Builds an unsigned Seaport OrderComponents payload for wallet signing. After signing, POST the signature to /api/orderbook/submit. 1% seller-paid fee embedded. Requires setApprovalForAll on NameWrapper or BaseRegistrar.</div> 948 <table class="param-table"> 949 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 950 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name to list</td></tr> 951 <tr><td>priceEth</td><td><span class="type">number</span></td><td><span class="required">required</span></td><td>Listing price in ETH</td></tr> 952 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Seller wallet (must own the name)</td></tr> 953 <tr><td>durationSeconds</td><td><span class="type">number</span></td><td><span class="optional">default: 2592000</span></td><td>Listing duration (default: 30 days)</td></tr> 954 </table> 955 </div> 956 </div> 957 958 <div class="tool-card" data-tool="batch_create_listings"> 959 <div class="tool-card-header" onclick="toggleTool(this)"> 960 <span class="tool-card-name">batch_create_listings</span>
961 <span class="tool-card-summary">Bulk-list up to 10 names with one signature</span> 962 </div> 963 <div class="tool-card-body"> 964 <div class="tool-card-desc">Returns an array of unsigned Seaport orders. Wallet bulk-signs (EIP-712 SIP-6) in one popup, then each signature is POSTed to /api/orderbook/submit. Per-name errors collected instead of aborting the batch.</div> 965 <table class="param-table"> 966 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 967 <tr><td>listings</td><td><span class="type">object[]</span></td><td><span class="required">required</span></td><td>Array of { name, priceEth } (max 10)</td></tr> 968 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Seller wallet (must own all names)</td></tr> 969 <tr><td>durationSeconds</td><td><span class="type">number</span></td><td><span class="optional">default: 2592000</span></td><td>Duration applied to every listing</td></tr> 970 </table> 971 </div> 972 </div> 973 974 <div class="tool-card" data-tool="cancel_listing"> 975 <div class="tool-card-header" onclick="toggleTool(this)"> 976 <span class="tool-card-name">cancel_listing</span> 977 <span class="tool-card-summary">Cancel a listing via Seaport.cancel()</span> 978 </div> 979 <div class="tool-card-body"> 980 <div class="tool-card-desc">Returns unsigned Seaport.cancel() calldata. Once mined, the order is invalidated everywhere it lives on the shared Seaport orderbook (NameWhisper + OpenSea). Only the original seller can cancel. Use alsoCancel to kill sibling variants atomically.</div> 981 <table class="param-table"> 982 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 983 <tr><td>orderHash</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Seaport order hash of the listing</td></tr> 984 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Seller wallet (must be the offerer)</td></tr> 985 <tr><td>alsoCancel</td><td><span class="type">string[]</span></td><td><span class="optional">optional</span></td><td>Sibling order hashes to cancel in same tx</td></tr> 986 </table> 987 </div> 988 </div> 989 990 <div class="tool-card" data-tool="accept_offer"> 991 <div class="tool-card-header" onclick="toggleTool(this)"> 992 <span class="tool-card-name">accept_offer</span> 993 <span class="tool-card-summary">Seller-side acceptance of a standing offer</span> 994 </div> 995 <div class="tool-card-body"> 996 <div class="tool-card-desc">Returns unsigned Seaport.fulfillOrder() calldata. Atomically: pulls buyer's WETH, transfers name to buyer, pays 1% fee. Seller receives offerAmount - 1%. Requires approval for Seaport on NameWrapper / BaseRegistrar.</div> 997 <table class="param-table"> 998 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 999 <tr><td>orderHash</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Seaport order hash of the buyer's offer</td></tr> 1000 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Seller wallet (must own the ENS name)</td></tr> 1001 </table> 1002 </div> 1003 </div> 1004 1005 <div class="tool-card" data-tool="cancel_offer"> 1006 <div class="tool-card-header" onclick="toggleTool(this)"> 1007 <span class="tool-card-name">cancel_offer</span> 1008 <span class="tool-card-summary">Cancel an offer you made</span> 1009 </div> 1010 <div class="tool-card-body"> 1011 <div class="tool-card-desc">Returns unsigned Seaport.cancel() calldata for the bidder. Once mined, the offer is invali
1011dated across all venues. Only the original bidder can cancel.</div> 1012 <table class="param-table"> 1013 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1014 <tr><td>orderHash</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Seaport order hash of the offer</td></tr> 1015 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Bidder wallet (must be the offerer)</td></tr> 1016 <tr><td>alsoCancel</td><td><span class="type">string[]</span></td><td><span class="optional">optional</span></td><td>Sibling order hashes to cancel in same tx</td></tr> 1017 </table> 1018 </div> 1019 </div> 1020 </div> 1021 1022 <!-- Management --> 1023 <div id="cat-management" class="tool-category"> 1024 <div class="tool-category-header"> 1025 <span class="tool-category-name">Management</span> 1026 <span class="tool-badge badge-tx">Transaction</span> 1027 <span class="tool-count">8 tools</span> 1028 </div> 1029 1030 <div class="tool-card" data-tool="set_ens_records"> 1031 <div class="tool-card-header" onclick="toggleTool(this)"> 1032 <span class="tool-card-name">set_ens_records</span> 1033 <span class="tool-card-summary">Set resolver records (addresses, texts, content hash)</span> 1034 </div> 1035 <div class="tool-card-body"> 1036 <div class="tool-card-desc">Multiple records batched into a single multicall transaction. Supports ENSIP-25 agent-registration via agentRegistration shorthand.</div> 1037 <table class="param-table"> 1038 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1039 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name to configure</td></tr> 1040 <tr><td>records</td><td><span class="type">object</span></td><td><span class="required">required</span></td><td>{ addresses, texts, contentHash, agentRegistration }</td></tr> 1041 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Owner wallet address</td></tr> 1042 </table> 1043 <div class="example-label">Example</div> 1044 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ 1045 <span class="str">"name"</span>: <span class="str">"myagent.eth"</span>, 1046 <span class="str">"records"</span>: { 1047 <span class="str">"texts"</span>: { <span class="str">"ai.agent"</span>: <span class="str">"true"</span>, <span class="str">"ai.capabilities"</span>: <span class="str">"trading"</span> }, 1048 <span class="str">"agentRegistration"</span>: { <span class="str">"registryAddress"</span>: <span class="str">"0xABC..."</span>, <span class="str">"agentId"</span>: <span class="str">"42"</span> } 1049 }, 1050 <span class="str">"walletAddress"</span>: <span class="str">"0x1234..."</span> 1051}</div> 1052 </div> 1053 </div> 1054 1055 <div class="tool-card" data-tool="bulk_set_records"> 1056 <div class="tool-card-header" onclick="toggleTool(this)"> 1057 <span class="tool-card-name">bulk_set_records</span> 1058 <span class="tool-card-summary">Batch set records across up to 50 names</span> 1059 </div> 1060 <div class="tool-card-body"> 1061 <div class="tool-card-desc">All record updates batched into one resolver.multicall() call. Supports addresses, texts, contentHash, and ENSIP-25 agent-registration.</div> 1062 <table class="param-table"> 1063 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1064 <tr><td>nameRecords</td><td><span class="type">object[]</span></td><td><span class="required">required</span></td><td>Array of { name, records } pairs (max 50)</td></tr> 1065 <tr><td>walletAddress</td><td>
1065<span class="type">string</span></td><td><span class="required">required</span></td><td>Owner wallet address</td></tr> 1066 </table> 1067 </div> 1068 </div> 1069 1070 <div class="tool-card" data-tool="renew_ens_name"> 1071 <div class="tool-card-header" onclick="toggleTool(this)"> 1072 <span class="tool-card-name">renew_ens_name</span> 1073 <span class="tool-card-summary">Renew single or batch names (Multicall3)</span> 1074 </div> 1075 <div class="tool-card-body"> 1076 <div class="tool-card-desc">No commit/reveal needed. Any duration (no minimum). Anyone can renew any name. Batch renewals bundled into a single Multicall3 transaction. A 1% NameWhisper interface fee is charged on top of the ENS price and returned broken out as <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">feeEth</code> alongside <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">ensCostEth</code>.</div> 1077 <table class="param-table"> 1078 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1079 <tr><td>names</td><td><span class="type">string | string[]</span></td><td><span class="required">required</span></td><td>Name or array of names</td></tr> 1080 <tr><td>duration</td><td><span class="type">number</span></td><td><span class="optional">default: 365</span></td><td>Duration in days</td></tr> 1081 </table> 1082 </div> 1083 </div> 1084 1085 <div class="tool-card" data-tool="transfer_ens_name"> 1086 <div class="tool-card-header" onclick="toggleTool(this)"> 1087 <span class="tool-card-name">transfer_ens_name</span> 1088 <span class="tool-card-summary">Transfer ownership (wrapped + unwrapped)</span> 1089 </div> 1090 <div class="tool-card-body"> 1091 <div class="tool-card-desc">Auto-detects wrapped (ERC-1155) vs unwrapped (ERC-721). Resolver records are NOT affected by transfer.</div> 1092 <table class="param-table"> 1093 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1094 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name to transfer</td></tr> 1095 <tr><td>fromAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Current owner (must sign)</td></tr> 1096 <tr><td>toAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Recipient wallet</td></tr> 1097 </table> 1098 </div> 1099 </div> 1100 1101 <div class="tool-card" data-tool="bulk_transfer_ens_names"> 1102 <div class="tool-card-header" onclick="toggleTool(this)"> 1103 <span class="tool-card-name">bulk_transfer_ens_names</span> 1104 <span class="tool-card-summary">Batch transfer up to 20 names in 1 txn</span> 1105 </div> 1106 <div class="tool-card-body"> 1107 <div class="tool-card-desc">Transfer multiple ENS names in a single Multicall3 transaction. Each name can go to a different recipient. Auto-detects wrapped (ERC-1155) vs unwrapped (ERC-721) per name.</div> 1108 <table class="param-table"> 1109 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1110 <tr><td>transfers</td><td><span class="type">array</span></td><td><span class="required">required</span></td><td>Array of { name, toAddress } pairs. Max 20.</td></tr> 1111 <tr><td>fromAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Current owner of all names (must sign)</td></tr> 1112 </table> 1113 </div> 1114 </div> 1115 1116 <div class="tool-card" data-tool="set_primary_name"> 1117 <div class="tool-card-header" onclick="toggleTool(this)">
1118 <span class="tool-card-name">set_primary_name</span> 1119 <span class="tool-card-summary">Set reverse resolution (primary name)</span> 1120 </div> 1121 <div class="tool-card-body"> 1122 <div class="tool-card-desc">Controls what name displays when someone looks up your address. Name's ETH record must point to the wallet. One primary per address.</div> 1123 <table class="param-table"> 1124 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1125 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name to set as primary</td></tr> 1126 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Wallet address (must sign)</td></tr> 1127 </table> 1128 </div> 1129 </div> 1130 1131 <div class="tool-card" data-tool="set_resolver"> 1132 <div class="tool-card-header" onclick="toggleTool(this)"> 1133 <span class="tool-card-name">set_resolver</span> 1134 <span class="tool-card-summary">Change resolver contract</span> 1135 </div> 1136 <div class="tool-card-body"> 1137 <div class="tool-card-desc">Pass "public" to use the ENS Public Resolver. Records on the old resolver won't be visible after switching.</div> 1138 <table class="param-table"> 1139 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1140 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name</td></tr> 1141 <tr><td>resolver</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Resolver address or "public"</td></tr> 1142 </table> 1143 </div> 1144 </div> 1145 1146 <div class="tool-card" data-tool="manage_ens_name"> 1147 <div class="tool-card-header" onclick="toggleTool(this)"> 1148 <span class="tool-card-name">manage_ens_name</span> 1149 <span class="tool-card-summary">Status check with recommendations</span> 1150 </div> 1151 <div class="tool-card-body"> 1152 <div class="tool-card-desc">Returns registration status, expiry, wrapper state, owner, renewal pricing, and recommended actions. Use before any management operation.</div> 1153 <table class="param-table"> 1154 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1155 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name to check</td></tr> 1156 <tr><td>includeRenewalPricing</td><td><span class="type">boolean</span></td><td><span class="optional">default: true</span></td><td>Include on-chain pricing</td></tr> 1157 </table> 1158 </div> 1159 </div> 1160 </div> 1161 1162 <!-- NameWrapper --> 1163 <div id="cat-namewrapper" class="tool-category"> 1164 <div class="tool-category-header"> 1165 <span class="tool-category-name">NameWrapper</span> 1166 <span class="tool-badge badge-tx">Transaction</span> 1167 <span class="tool-count">5 tools</span> 1168 </div> 1169 1170 <div class="tool-card" data-tool="wrap_name"> 1171 <div class="tool-card-header" onclick="toggleTool(this)"> 1172 <span class="tool-card-name">wrap_name</span> 1173 <span class="tool-card-summary">Wrap name into NameWrapper (ERC-1155)</span> 1174 </div> 1175 <div class="tool-card-body"> 1176 <div class="tool-card-desc">ERC-721 → ERC-1155. Enables fuse permissions and protected subnames. Returns two-step recipe: approve + wrap.</div> 1177 <table class="param-table"> 1178 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1179 <tr><td>name</td><td><span class="type">string</span></td><td>
1179<span class="required">required</span></td><td>ENS name to wrap</td></tr> 1180 <tr><td>owner</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Current owner address</td></tr> 1181 <tr><td>fuses</td><td><span class="type">string[]</span></td><td><span class="optional">optional</span></td><td>Fuses to burn on wrap (irreversible)</td></tr> 1182 </table> 1183 </div> 1184 </div> 1185 1186 <div class="tool-card" data-tool="unwrap_name"> 1187 <div class="tool-card-header" onclick="toggleTool(this)"> 1188 <span class="tool-card-name">unwrap_name</span> 1189 <span class="tool-card-summary">Unwrap back to BaseRegistrar (ERC-721)</span> 1190 </div> 1191 <div class="tool-card-body"> 1192 <div class="tool-card-desc">Clears all fuses. Fails if CANNOT_UNWRAP has been burned.</div> 1193 <table class="param-table"> 1194 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1195 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name to unwrap</td></tr> 1196 <tr><td>owner</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Current wrapped owner</td></tr> 1197 </table> 1198 </div> 1199 </div> 1200 1201 <div class="tool-card" data-tool="manage_fuses"> 1202 <div class="tool-card-header" onclick="toggleTool(this)"> 1203 <span class="tool-card-name">manage_fuses</span> 1204 <span class="tool-card-summary">Read/burn fuses on wrapped names</span> 1205 </div> 1206 <div class="tool-card-body"> 1207 <div class="tool-card-desc">Three modes: read (check current), burn_owner_fuses, burn_child_fuses. All burning is irreversible. Fuses expire when the name expires.</div> 1208 <table class="param-table"> 1209 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1210 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name</td></tr> 1211 <tr><td>action</td><td><span class="type">enum</span></td><td><span class="optional">default: read</span></td><td>read, burn_owner_fuses, burn_child_fuses</td></tr> 1212 <tr><td>fuses</td><td><span class="type">string[]</span></td><td><span class="optional">conditional</span></td><td>Required for burn actions</td></tr> 1213 <tr><td>expiry</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Unix timestamp (burn_child_fuses only)</td></tr> 1214 </table> 1215 </div> 1216 </div> 1217 1218 <div class="tool-card" data-tool="mint_subnames"> 1219 <div class="tool-card-header" onclick="toggleTool(this)"> 1220 <span class="tool-card-name">mint_subnames</span> 1221 <span class="tool-card-summary">Bulk create subnames for agent fleets</span> 1222 </div> 1223 <div class="tool-card-body"> 1224 <div class="tool-card-desc">Each subname gets its own owner and records. Free to create — only gas costs. Designed for agent001.company.eth style fleet deployment.</div> 1225 <table class="param-table"> 1226 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1227 <tr><td>parentName</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Parent ENS name</td></tr> 1228 <tr><td>subnames</td><td><span class="type">object[]</span></td><td><span class="required">required</span></td><td>Array of { label, owner?, records? }</td></tr> 1229 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Parent name owner</td></tr> 1230 </table> 1231 </div> 1232 </div> 1233 1234 <div class="tool-card" data-tool="extend_subname_expiry"> 1235 <div class="tool-card-header" onclick="toggleTool(this)">
1236 <span class="tool-card-name">extend_subname_expiry</span> 1237 <span class="tool-card-summary">Extend subname expiry</span> 1238 </div> 1239 <div class="tool-card-body"> 1240 <div class="tool-card-desc">Cannot exceed parent expiry. Parent owner can always extend; subname owner can only if CAN_EXTEND_EXPIRY fuse is burned.</div> 1241 <table class="param-table"> 1242 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1243 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Full subname (e.g. "sub.coffee.eth")</td></tr> 1244 <tr><td>years</td><td><span class="type">number</span></td><td><span class="optional">default: 1</span></td><td>Years to extend (1-10)</td></tr> 1245 </table> 1246 </div> 1247 </div> 1248 </div> 1249 1250 <!-- Access & Recovery --> 1251 <div id="cat-access" class="tool-category"> 1252 <div class="tool-category-header"> 1253 <span class="tool-category-name">Access & Recovery</span> 1254 <span class="tool-badge badge-tx">Transaction</span> 1255 <span class="tool-count">2 tools</span> 1256 </div> 1257 1258 <div class="tool-card" data-tool="approve_operator"> 1259 <div class="tool-card-header" onclick="toggleTool(this)"> 1260 <span class="tool-card-name">approve_operator</span> 1261 <span class="tool-card-summary">Approve/revoke operator for ENS contracts</span> 1262 </div> 1263 <div class="tool-card-body"> 1264 <div class="tool-card-desc">setApprovalForAll — covers ALL tokens on the specified contract. Use before wrapping, marketplace trading, or batch operations.</div> 1265 <table class="param-table"> 1266 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1267 <tr><td>owner</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Address granting approval</td></tr> 1268 <tr><td>operator</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Address being approved</td></tr> 1269 <tr><td>contract</td><td><span class="type">enum</span></td><td><span class="required">required</span></td><td>base_registrar, name_wrapper, or ens_registry</td></tr> 1270 <tr><td>approved</td><td><span class="type">boolean</span></td><td><span class="optional">default: true</span></td><td>true to approve, false to revoke</td></tr> 1271 </table> 1272 </div> 1273 </div> 1274 1275 <div class="tool-card" data-tool="reclaim_name"> 1276 <div class="tool-card-header" onclick="toggleTool(this)"> 1277 <span class="tool-card-name">reclaim_name</span> 1278 <span class="tool-card-summary">Reclaim ENS Registry ownership</span> 1279 </div> 1280 <div class="tool-card-body"> 1281 <div class="tool-card-desc">Syncs the ENS Registry owner to match the BaseRegistrar token owner. Used when ownership is out of sync after direct token transfers.</div> 1282 <table class="param-table"> 1283 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1284 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name to reclaim</td></tr> 1285 <tr><td>owner</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Address (must own BaseRegistrar token)</td></tr> 1286 </table> 1287 </div> 1288 </div> 1289 </div> 1290 1291 <!-- Agent Identity --> 1292 <div id="cat-agent" class="tool-category"> 1293 <div class="tool-category-header"> 1294 <span class="tool-category-name">Agent Identity</span> 1295 <span class="tool-badge badge-free">Read + Write</span> 1296 <span class="tool-count">4 tools</span> 1297 </div> 1298 1299 <div class="tool-card" data-tool="provision_agent_identity"> 1300 <div class="tool-card-header" onclick="toggleTool(this)">
1301 <span class="tool-card-name">provision_agent_identity</span> 1302 <span class="tool-card-summary">One-call agent identity setup with ENSIP-25</span> 1303 </div> 1304 <div class="tool-card-body"> 1305 <div class="tool-card-desc">Describe your agent's purpose and budget → get name recommendations with registration recipes, suggested ENS records, and ENSIP-25 agent-registration binding.</div> 1306 <table class="param-table"> 1307 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1308 <tr><td>purpose</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>What the agent does</td></tr> 1309 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Agent wallet address</td></tr> 1310 <tr><td>budgetEth</td><td><span class="type">number</span></td><td><span class="optional">default: 0.1</span></td><td>Max budget in ETH</td></tr> 1311 <tr><td>preferences</td><td><span class="type">object</span></td><td><span class="optional">optional</span></td><td>{ maxLength, style, mustInclude }</td></tr> 1312 <tr><td>agentRegistry</td><td><span class="type">object</span></td><td><span class="optional">optional</span></td><td>ENSIP-25: { registryAddress, agentId, chainId? }</td></tr> 1313 </table> 1314 <div class="example-label">Example</div> 1315 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ 1316 <span class="str">"purpose"</span>: <span class="str">"DeFi trading bot"</span>, 1317 <span class="str">"walletAddress"</span>: <span class="str">"0x1234..."</span>, 1318 <span class="str">"budgetEth"</span>: <span class="num">5.0</span>, 1319 <span class="str">"preferences"</span>: { <span class="str">"style"</span>: <span class="str">"technical"</span> } 1320}</div> 1321 </div> 1322 </div> 1323 1324 <div class="tool-card" data-tool="register_agent"> 1325 <div class="tool-card-header" onclick="toggleTool(this)"> 1326 <span class="tool-card-name">register_agent</span> 1327 <span class="tool-card-summary">Register an ENS name as an ERC-8004 agent identity</span> 1328 </div> 1329 <div class="tool-card-body"> 1330 <div class="tool-card-desc">Builds a ready-to-sign registration for the canonical ERC-8004 IdentityRegistry on mainnet. The default "adapter" route binds the agent to the name via ERC-8217 — control and marketplace visibility follow the name, and the agent transfers when the name is sold. After it confirms, write the ENSIP-25 binding record with set_ens_records to make the identity verifiable.</div> 1331 <table class="param-table"> 1332 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1333 <tr><td>name</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name to register (you must own it)</td></tr> 1334 <tr><td>walletAddress</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>Signing wallet; auto-filled from ERC-8128 auth</td></tr> 1335 <tr><td>route</td><td><span class="type">enum</span></td><td><span class="optional">default: adapter</span></td><td>adapter (ERC-8217-bound to the name) or direct (minted to wallet)</td></tr> 1336 <tr><td>agentURI</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>Override the hosted agent registration file URI</td></tr> 1337 </table> 1338 <div class="example-label">Example</div> 1339 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"name"</span>: <span class="str">"myagent.eth"</span>, <span class="str">"route"</span>: <span class="str">"adapter"</span> }</div> 1340 </div> 1341 </div> 1342 1343 <div class="tool-card" data-tool="get_agent_reputation"> 1344 <div class="tool-card-header" onclick="toggleTool(this)">
1345 <span class="tool-card-name">get_agent_reputation</span> 1346 <span class="tool-card-summary">Check agent credentials via ENSIP-25 + ERC-8004</span> 1347 </div> 1348 <div class="tool-card-body"> 1349 <div class="tool-card-desc">ENSIP-25 verification is live: reads agent-registration text records. ERC-8004 reputation data is live on mainnet via the IdentityRegistry contract. <a href="/agents" style="color: var(--accent);">Browse the agent registry →</a></div> 1350 <table class="param-table"> 1351 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1352 <tr><td>nameOrWallet</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>ENS name or wallet address</td></tr> 1353 </table> 1354 </div> 1355 </div> 1356 1357 <div class="tool-card" data-tool="search_agent_directory"> 1358 <div class="tool-card-header" onclick="toggleTool(this)"> 1359 <span class="tool-card-name">search_agent_directory</span> 1360 <span class="tool-card-summary">Search registered AI agents via ERC-8004 registry</span> 1361 </div> 1362 <div class="tool-card-body"> 1363 <div class="tool-card-desc">Queries the ERC-8004 IdentityRegistry on mainnet via 8004scan. Search by keyword, filter by capabilities or minimum reputation score. Returns on-chain agent profiles with ENS names and metadata.</div> 1364 <table class="param-table"> 1365 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1366 <tr><td>query</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>Search query</td></tr> 1367 <tr><td>capabilities</td><td><span class="type">string[]</span></td><td><span class="optional">optional</span></td><td>Filter by capabilities</td></tr> 1368 <tr><td>minReputation</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Minimum score (0-100)</td></tr> 1369 <tr><td>limit</td><td><span class="type">number</span></td><td><span class="optional">default: 25</span></td><td>Max results</td></tr> 1370 </table> 1371 </div> 1372 </div> 1373 1374 </div> 1375 1376 <!-- Authentication --> 1377 <div id="cat-auth" class="tool-category"> 1378 <div class="tool-category-header"> 1379 <span class="tool-category-name">Authentication</span> 1380 <span class="tool-badge badge-free">ERC-8128</span> 1381 <span class="tool-count">1 tool</span> 1382 </div> 1383 1384 <div class="tool-card" data-tool="get_caller_identity"> 1385 <div class="tool-card-header" onclick="toggleTool(this)"> 1386 <span class="tool-card-name">get_caller_identity</span> 1387 <span class="tool-card-summary">Resolve your authenticated identity via ERC-8128</span> 1388 </div> 1389 <div class="tool-card-body"> 1390 <div class="tool-card-desc">Returns the identity of an ERC-8128 authenticated caller: wallet address, primary ENS name, text records, ENSIP-25 status, and portfolio summary. Call this first to confirm your signed identity is recognised. Unsigned callers get an anonymous result.</div> 1391 <table class="param-table"> 1392 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1393 <tr><td colspan="4"><em>No parameters — identity is derived from the ERC-8128 signed request</em></td></tr> 1394 </table> 1395 </div> 1396 </div> 1397 </div> 1398 1399 <!-- Knowledge --> 1400 <div id="cat-knowledge" class="tool-category"> 1401 <div class="tool-category-header"> 1402 <span class="tool-category-name">Knowledge</span> 1403 <span class="tool-badge badge-free">Read-Only</span> 1404 <span class="tool-count">1 tool</span> 1405 </div> 1406 1407 <div class="tool-card" data-tool="search_knowledge"> 1408 <div class="tool-card-header" onclick="toggleTool(this)">
1409 <span class="tool-card-name">search_knowledge</span> 1410 <span class="tool-card-summary">Search ENS governance + protocol knowledge base</span> 1411 </div> 1412 <div class="tool-card-body"> 1413 <div class="tool-card-desc">Governance proposals, protocol docs, developer insights, blog posts, forum discussions, and Farcaster casts from key ENS figures.</div> 1414 <table class="param-table"> 1415 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1416 <tr><td>query</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>What you want to know about ENS</td></tr> 1417 <tr><td>source</td><td><span class="type">enum</span></td><td><span class="optional">default: all</span></td><td>ens-forum, vitalik-blog, ens-blog, ens-docs, farcaster</td></tr> 1418 <tr><td>limit</td><td><span class="type">number</span></td><td><span class="optional">default: 6</span></td><td>Number of results</td></tr> 1419 </table> 1420 </div> 1421 </div> 1422 </div> 1423 1424 <!-- Internal --> 1425 <div id="cat-internal" class="tool-category"> 1426 <div class="tool-category-header"> 1427 <span class="tool-category-name">Internal</span> 1428 <span class="tool-badge badge-internal">Session</span> 1429 <span class="tool-count">1 tool</span> 1430 </div> 1431 1432 <div class="tool-card" data-tool="get_usage_stats"> 1433 <div class="tool-card-header" onclick="toggleTool(this)"> 1434 <span class="tool-card-name">get_usage_stats</span> 1435 <span class="tool-card-summary">Session tool call counts, success rates, latency</span> 1436 </div> 1437 <div class="tool-card-body"> 1438 <div class="tool-card-desc">No parameters. Returns per-tool call counts, success rates, and average latency for the current MCP session.</div> 1439 </div> 1440 </div> 1441 </div> 1442 </section> 1443 1444 <!-- REST API --> 1445 <section id="rest-api" class="doc-section"> 1446 <div class="section-label">REST API</div> 1447 <div class="section-title">120+ HTTP endpoints</div> 1448 <div class="section-desc">In addition to MCP tools, Name Whisper exposes a full REST API at <code style="font-family: var(--font-mono); font-size: 12px; color: var(--accent-bright);">https://namewhisper.ai/api/</code>. All responses are JSON. Authenticated routes require a Bearer token from <code style="font-family: var(--font-mono); font-size: 12px; color: var(--accent-bright);">/api/auth/connect</code>.</div> 1449 1450 <!-- Auth --> 1451 <div id="rest-auth" class="tool-category"> 1452 <div class="tool-category-header"> 1453 <span class="tool-category-name">Authentication</span> 1454 <span class="tool-badge badge-free">Public</span> 1455 <span class="tool-count">3 endpoints</span> 1456 </div> 1457 1458 <div class="tool-card"> 1459 <div class="tool-card-header" onclick="toggleTool(this)"> 1460 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/auth/connect</span> 1461 <span class="tool-card-summary">Wallet connection (returns JWT)</span> 1462 </div> 1463 <div class="tool-card-body"> 1464 <div class="tool-card-desc">Simple address-based authentication. Send a wallet address, receive a JWT token for authenticated routes. No signature required.</div> 1465 <div class="example-label">Request</div> 1466 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ <span class="str">"address"</span>: <span class="str">"0x1234..."</span> }</div> 1467 <div class="example-label">Response</div> 1468 <div class="code-block">{ <span class="str">"token"</span>: <span class="str">"eyJ..."</span>, <span class="str">"user"</span>: { <span class="str">"address"</span>: <span class="str">"0x1234..."</span> } }</div> 1469 <div class="tool-card-desc" style="margin-top:12px">Use the token in subsequent requests:<br><code style="font-family:var(--font-mono);font-size:11px;color:var(--accent-bright)">Authorization: Bearer <token></code></div> 1470 </div> 1471 </div> 1472 1473 <div class="tool-card"> 1474 <div class="tool-card-header" onclick="toggleTool(this)">
1475 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/auth/nonce</span> 1476 <span class="tool-card-summary">Generate SIWE nonce</span> 1477 </div> 1478 <div class="tool-card-body"> 1479 <div class="tool-card-desc">Generate a nonce for Sign-In with Ethereum (EIP-4361) authentication flow.</div> 1480 </div> 1481 </div> 1482 1483 <div class="tool-card"> 1484 <div class="tool-card-header" onclick="toggleTool(this)"> 1485 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/auth/signin</span> 1486 <span class="tool-card-summary">SIWE signature verification</span> 1487 </div> 1488 <div class="tool-card-body"> 1489 <div class="tool-card-desc">Verify a SIWE message + signature. Returns JWT token on success.</div> 1490 <table class="param-table"> 1491 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1492 <tr><td>message</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>SIWE message string</td></tr> 1493 <tr><td>signature</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Wallet signature of the message</td></tr> 1494 </table> 1495 </div> 1496 </div> 1497 </div> 1498 1499 <!-- Search & Discovery --> 1500 <div id="rest-search" class="tool-category"> 1501 <div class="tool-category-header"> 1502 <span class="tool-category-name">Search & Discovery</span> 1503 <span class="tool-badge badge-free">Public</span> 1504 <span class="tool-count">2 endpoints</span> 1505 </div> 1506 1507 <div class="tool-card"> 1508 <div class="tool-card-header" onclick="toggleTool(this)"> 1509 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/search</span> 1510 <span class="tool-card-summary">LLM-powered semantic search</span> 1511 </div> 1512 <div class="tool-card-body"> 1513 <div class="tool-card-desc">Natural language search with automatic intent detection. Routes to filtered DB search, semantic vector search, creative AI generation, or bulk availability check. Returns a searchId for async summary retrieval.</div> 1514 <table class="param-table"> 1515 <tr><th>Param</th><th>Type</th><th></th><th>Description</th></tr> 1516 <tr><td>query</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Natural language search query</td></tr> 1517 <tr><td>mode</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>"create" for creative name generation</td></tr> 1518 </table> 1519 <div class="example-label">Example</div> 1520 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button><span class="fn">POST</span> /api/search 1521{ <span class="str">"query"</span>: <span class="str">"3-letter words under 0.1 ETH"</span> }</div> 1522 </div> 1523 </div> 1524 1525 <div class="tool-card"> 1526 <div class="tool-card-header" onclick="toggleTool(this)"> 1527 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/summary/:searchId</span> 1528 <span class="tool-card-summary">Async AI search summary</span> 1529 </div> 1530 <div class="tool-card-body"> 1531 <div class="tool-card-desc">Retrieve the AI-generated summary for a previous search. Generated asynchronously after search completes.</div> 1532 </div> 1533 </div> 1534 </div> 1535 1536 <!-- Name Profiles --> 1537 <div id="rest-profiles" class="tool-category"> 1538 <div class="tool-category-header"> 1539 <span class="tool-category-name">Name Profiles</span> 1540 <span class="tool-badge badge-free">Public</span>
1541 <span class="tool-count">5 endpoints</span> 1542 </div> 1543 1544 <div class="tool-card"> 1545 <div class="tool-card-header" onclick="toggleTool(this)"> 1546 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/name-profile/:label</span> 1547 <span class="tool-card-summary">Comprehensive name profile</span> 1548 </div> 1549 <div class="tool-card-body"> 1550 <div class="tool-card-desc">Registration info, transfer history, sales history, ownership, social scores, avatar, website, ENS records, holder intelligence (ETH balance, wallet age, ENS count). Aggregates data from ENS Subgraph, Etherscan, Web3.bio, and Alchemy.</div> 1551 </div> 1552 </div> 1553 1554 <div class="tool-card"> 1555 <div class="tool-card-header" onclick="toggleTool(this)"> 1556 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/name-profile/:label/market</span> 1557 <span class="tool-card-summary">Live marketplace data for a name</span> 1558 </div> 1559 <div class="tool-card-body"> 1560 <div class="tool-card-desc">Current listings and offers across all marketplaces, aggregated and filtered by current owner.</div> 1561 </div> 1562 </div> 1563 1564 <div class="tool-card"> 1565 <div class="tool-card-header" onclick="toggleTool(this)"> 1566 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/name/:label/records</span> 1567 <span class="tool-card-summary">On-chain resolver records</span> 1568 </div> 1569 <div class="tool-card-body"> 1570 <div class="tool-card-desc">Address records, text records (avatar, description, socials, AI metadata), and contenthash read directly from the on-chain resolver.</div> 1571 </div> 1572 </div> 1573 1574 <div class="tool-card"> 1575 <div class="tool-card-header" onclick="toggleTool(this)"> 1576 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/name/:label/build-record-tx</span> 1577 <span class="tool-card-summary">Build record update transaction</span> 1578 </div> 1579 <div class="tool-card-body"> 1580 <div class="tool-card-desc">Returns encoded transaction calldata to update resolver records. Sign and broadcast with your wallet.</div> 1581 </div> 1582 </div> 1583 1584 <div class="tool-card"> 1585 <div class="tool-card-header" onclick="toggleTool(this)"> 1586 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/wallet/:address/names</span> 1587 <span class="tool-card-summary">All names owned by an address</span> 1588 </div> 1589 <div class="tool-card-body"> 1590 <div class="tool-card-desc">Deduplicated list of ENS names owned or registered by a wallet address.</div> 1591 </div> 1592 </div> 1593 </div> 1594 1595 <!-- Market Intelligence --> 1596 <div id="rest-market" class="tool-category"> 1597 <div class="tool-category-header"> 1598 <span class="tool-category-name">Market Intelligence</span> 1599 <span class="tool-badge badge-free">Public</span> 1600 <span class="tool-count">4 endpoints</span> 1601 </div> 1602 1603 <div class="tool-card"> 1604 <div class="tool-card-header" onclick="toggleTool(this)"> 1605 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/market-stats</span> 1606 <span class="tool-card-summary">Global market overview</span> 1607 </div> 1608 <div class="tool-card-body"> 1609 <div class="tool-card-desc">Sales counts, volume (24h & 7d), floor prices by category (3L, 4L, 5L, 999, 100K), top sale, trending categories, 24h floor deltas. Cached 5 minutes.</div> 1610 </div> 1611 </div> 1612 1613 <div class="tool-card"> 1614 <div class="tool-card-header" onclick="toggleTool(this)">
1615 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/recent-sales</span> 1616 <span class="tool-card-summary">Recent name sales</span> 1617 </div> 1618 <div class="tool-card-body"> 1619 <div class="tool-card-desc">Filterable by category, price, and event type.</div> 1620 <table class="param-table"> 1621 <tr><th>Query Param</th><th>Type</th><th></th><th>Description</th></tr> 1622 <tr><td>days</td><td><span class="type">number</span></td><td><span class="optional">default: 7</span></td><td>Lookback period (max 90)</td></tr> 1623 <tr><td>minPrice</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Minimum sale price in ETH</td></tr> 1624 <tr><td>category</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>Filter by category</td></tr> 1625 </table> 1626 </div> 1627 </div> 1628 1629 <div class="tool-card"> 1630 <div class="tool-card-header" onclick="toggleTool(this)"> 1631 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/recent-sales/:label</span> 1632 <span class="tool-card-summary">Sales history for a specific name</span> 1633 </div> 1634 <div class="tool-card-body"> 1635 <div class="tool-card-desc">Last 20 sales for a specific ENS name.</div> 1636 </div> 1637 </div> 1638 </div> 1639 1640 <!-- Categories --> 1641 <div id="rest-categories" class="tool-category"> 1642 <div class="tool-category-header"> 1643 <span class="tool-category-name">Categories & Collections</span> 1644 <span class="tool-badge badge-free">Public</span> 1645 <span class="tool-count">4 endpoints</span> 1646 </div> 1647 1648 <div class="tool-card"> 1649 <div class="tool-card-header" onclick="toggleTool(this)"> 1650 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/categories</span> 1651 <span class="tool-card-summary">All categories with 7-day stats</span> 1652 </div> 1653 <div class="tool-card-body"> 1654 <div class="tool-card-desc">Sales, volume, avg price, floor, ceiling per category. Includes club and collection mappings. Cached 5 minutes.</div> 1655 </div> 1656 </div> 1657 1658 <div class="tool-card"> 1659 <div class="tool-card-header" onclick="toggleTool(this)"> 1660 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/categories/:slug</span> 1661 <span class="tool-card-summary">Category detail with trends</span> 1662 </div> 1663 <div class="tool-card-body"> 1664 <div class="tool-card-desc">Member list, market data, 7d/30d trends, badges.</div> 1665 </div> 1666 </div> 1667 1668 <div class="tool-card"> 1669 <div class="tool-card-header" onclick="toggleTool(this)"> 1670 <span class="tool-card-name"><span style="color:var(--blue)">GET</span>
1670 /api/categories/:slug/ai-report</span> 1671 <span class="tool-card-summary">AI-generated category analysis</span> 1672 </div> 1673 <div class="tool-card-body"> 1674 <div class="tool-card-desc">AI analysis of category trends, market health, and opportunities.</div> 1675 </div> 1676 </div> 1677 1678 <div class="tool-card"> 1679 <div class="tool-card-header" onclick="toggleTool(this)"> 1680 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/collections</span> 1681 <span class="tool-card-summary">All collections</span> 1682 </div> 1683 <div class="tool-card-body"> 1684 <div class="tool-card-desc">Complete list of ENS name collections with metadata.</div> 1685 </div> 1686 </div> 1687 </div> 1688 1689 <!-- Expiry --> 1690 <div id="rest-expiry" class="tool-category"> 1691 <div class="tool-category-header"> 1692 <span class="tool-category-name">Expiry Calendar</span> 1693 <span class="tool-badge badge-free">Public</span> 1694 <span class="tool-count">2 endpoints</span> 1695 </div> 1696 1697 <div class="tool-card"> 1698 <div class="tool-card-header" onclick="toggleTool(this)"> 1699 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/expiry-calendar</span> 1700 <span class="tool-card-summary">Upcoming name expirations</span> 1701 </div> 1702 <div class="tool-card-body"> 1703 <table class="param-table"> 1704 <tr><th>Query Param</th><th>Type</th><th></th><th>Description</th></tr> 1705 <tr><td>days</td><td><span class="type">number</span></td><td><span class="optional">default: 30</span></td><td>Days ahead (max 90)</td></tr> 1706 <tr><td>minLength</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Minimum label length</td></tr> 1707 <tr><td>maxLength</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Maximum label length</td></tr> 1708 <tr><td>charType</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>Character type filter</td></tr> 1709 <tr><td>dictionary</td><td><span class="type">boolean</span></td><td><span class="optional">optional</span></td><td>Dictionary words only</td></tr> 1710 <tr><td>status</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>active, grace, premium</td></tr> 1711 <tr><td>sort</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>expiry, value, length</td></tr> 1712 <tr><td>limit</td><td><span class="type">number</span></td><td><span class="optional">default: 50</span></td><td>Max results (max 500)</td></tr> 1713 </table> 1714 </div> 1715 </div> 1716 1717 <div class="tool-card"> 1718 <div class="tool-card-header" onclick="toggleTool(this)"> 1719 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/expiry-summary</span> 1720 <span class="tool-card-summary">Expiry rollup by date range</span> 1721 </div> 1722 <div class="tool-card-body"> 1723 <div class="tool-card-desc">High-level summary of upcoming expirations grouped by date range.</div> 1724 </div> 1725 </div> 1726 </div> 1727 1728 <!-- Whales --> 1729 <div id="rest-whales" class="tool-category"> 1730 <div class="tool-category-header"> 1731 <span class="tool-category-name">Whale Analytics</span> 1732 <span class="tool-badge badge-free">Public</span> 1733 <span class="tool-count">4 endpoints</span> 1734 </div> 1735 1736 <div class="tool-card"> 1737 <div class="tool-card-header" onclick="toggleTool(this)"> 1738 <span class="tool-card-name"><span style="color:var(--blue)">
1738GET</span> /api/whales/addresses</span> 1739 <span class="tool-card-summary">Top whale addresses</span> 1740 </div> 1741 <div class="tool-card-body"> 1742 <table class="param-table"> 1743 <tr><th>Query Param</th><th>Type</th><th></th><th>Description</th></tr> 1744 <tr><td>days</td><td><span class="type">number</span></td><td><span class="optional">default: 7</span></td><td>Lookback period (max 90)</td></tr> 1745 </table> 1746 </div> 1747 </div> 1748 1749 <div class="tool-card"> 1750 <div class="tool-card-header" onclick="toggleTool(this)"> 1751 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/whales</span> 1752 <span class="tool-card-summary">Whale leaderboard</span> 1753 </div> 1754 <div class="tool-card-body"> 1755 <div class="tool-card-desc">Ranking, purchase count, total spent, average price. Includes ENS name resolution.</div> 1756 </div> 1757 </div> 1758 1759 <div class="tool-card"> 1760 <div class="tool-card-header" onclick="toggleTool(this)"> 1761 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/whale/:address</span> 1762 <span class="tool-card-summary">Individual whale detail</span> 1763 </div> 1764 <div class="tool-card-body"> 1765 <div class="tool-card-desc">Purchase history, portfolio size, ENS names owned, total spent.</div> 1766 </div> 1767 </div> 1768 1769 <div class="tool-card"> 1770 <div class="tool-card-header" onclick="toggleTool(this)"> 1771 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/sellers</span> 1772 <span class="tool-card-summary">Top sellers in a period</span> 1773 </div> 1774 <div class="tool-card-body"> 1775 <table class="param-table"> 1776 <tr><th>Query Param</th><th>Type</th><th></th><th>Description</th></tr> 1777 <tr><td>days</td><td><span class="type">number</span></td><td><span class="optional">default: 7</span></td><td>Lookback period (max 90)</td></tr> 1778 <tr><td>limit</td><td><span class="type">number</span></td><td><span class="optional">default: 20</span></td><td>Max results (max 50)</td></tr> 1779 </table> 1780 </div> 1781 </div> 1782 </div> 1783 1784 <!-- Category Stats --> 1785 <div id="rest-catstats" class="tool-category"> 1786 <div class="tool-category-header"> 1787 <span class="tool-category-name">Category Statistics</span> 1788 <span class="tool-badge badge-free">Public</span> 1789 <span class="tool-count">2 endpoints</span> 1790 </div> 1791 1792 <div class="tool-card"> 1793 <div class="tool-card-header" onclick="toggleTool(this)"> 1794 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/category-stats</span> 1795 <span class="tool-card-summary">Sales stats by name length</span> 1796 </div> 1797 <div class="tool-card-body"> 1798 <div class="tool-card-desc">Sale count, volume, avg/median/floor/ceiling prices for 3L, 4L, 5L, etc. Cached 5 minutes.</div> 1799 </div> 1800 </div> 1801 1802 <div class="tool-card"> 1803 <div class="tool-card-header" onclick="toggleTool(this)"> 1804 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/category-trends</span> 1805 <span class="tool-card-summary">Time-series category trends</span> 1806 </div> 1807 <div class="tool-card-body"> 1808 <div class="tool-card-desc">Daily breakdown of sales trends per category. Cached 10 minutes.</div> 1809 <table class="param-table"> 1810 <tr><th>Query Param</th><th>Type</th><th></th><th>Description</th></tr> 1811 <tr><td>days</td><td><span class="type">number</span></td><td>
1811<span class="optional">default: 7</span></td><td>Lookback period (max 90)</td></tr> 1812 <tr><td>length</td><td><span class="type">number</span></td><td><span class="optional">optional</span></td><td>Filter to specific label length</td></tr> 1813 </table> 1814 </div> 1815 </div> 1816 </div> 1817 1818 <!-- Marketplace --> 1819 <div id="rest-marketplace" class="tool-category"> 1820 <div class="tool-category-header"> 1821 <span class="tool-category-name">Marketplace</span> 1822 <span class="tool-badge badge-free">Public</span> 1823 <span class="tool-count">5 endpoints</span> 1824 </div> 1825 1826 <div class="tool-card"> 1827 <div class="tool-card-header" onclick="toggleTool(this)"> 1828 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/marketplace/browse</span> 1829 <span class="tool-card-summary">Browse marketplace listings</span> 1830 </div> 1831 <div class="tool-card-body"><div class="tool-card-desc">Paginated listings aggregated from the shared Seaport orderbook (NameWhisper + OpenSea) plus ENS Vision market data. Supports filters for price range, name length, category, source, and sort order.</div></div> 1832 </div> 1833 <div class="tool-card"> 1834 <div class="tool-card-header" onclick="toggleTool(this)"> 1835 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/marketplace/panel/:label</span> 1836 <span class="tool-card-summary">Marketplace data for a name</span> 1837 </div> 1838 <div class="tool-card-body"><div class="tool-card-desc">All active listings, offers, and last sale for a specific name across all marketplaces.</div></div> 1839 </div> 1840 <div class="tool-card"> 1841 <div class="tool-card-header" onclick="toggleTool(this)"> 1842 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/marketplace/trending</span> 1843 <span class="tool-card-summary">Trending names</span> 1844 </div> 1845 <div class="tool-card-body"><div class="tool-card-desc">Names with unusual marketplace activity: new listings, price drops, or incoming offers.</div></div> 1846 </div> 1847 <div class="tool-card"> 1848 <div class="tool-card-header" onclick="toggleTool(this)"> 1849 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/marketplace/dynamic-categories</span> 1850 <span class="tool-card-summary">Dynamic category suggestions</span> 1851 </div> 1852 <div class="tool-card-body"><div class="tool-card-desc">Auto-generated categories based on current marketplace patterns and activity.</div></div> 1853 </div> 1854 <div class="tool-card"> 1855 <div class="tool-card-header" onclick="toggleTool(this)"> 1856 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/marketplace/filters</span> 1857 <span class="tool-card-summary">Available filter options</span> 1858 </div> 1859 <div class="tool-card-body"><div class="tool-card-desc">Returns available filter values for marketplace browsing (categories, price ranges, etc.).</div></div> 1860 </div> 1861 </div> 1862 1863 <!-- Trading --> 1864 <div id="rest-trading" class="tool-category"> 1865 <div class="tool-category-header"> 1866 <span class="tool-category-name">Trading</span> 1867 <span class="tool-badge badge-tx">Auth Required</span> 1868 <span class="tool-count">26 endpoints</span> 1869 </div> 1870 1871 <div class="tool-card"> 1872 <div class="tool-card-header" onclick="toggleTool(this)"> 1873 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/trade/listings/:label</span> 1874 <span class="tool-card-summary">Current listings for a name</span> 1875 </div> 1876 <div class="tool-card-body"><div class="tool-card-desc">Aggregated marketplace listings. Public, no auth required.</div></div> 1877 </div> 1878 <div class="tool-card"> 1879 <div class="tool-card-header" onclick="toggleTool(this)">
1880 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/trade/offers/:label</span> 1881 <span class="tool-card-summary">Current offers on a name</span> 1882 </div> 1883 <div class="tool-card-body"><div class="tool-card-desc">All active offers. Public, no auth required.</div></div> 1884 </div> 1885 <div class="tool-card"> 1886 <div class="tool-card-header" onclick="toggleTool(this)"> 1887 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/trade/market-data/:label</span> 1888 <span class="tool-card-summary">Combined listings + offers</span> 1889 </div> 1890 <div class="tool-card-body"><div class="tool-card-desc">One-call aggregation of all marketplace data for a name.</div></div> 1891 </div> 1892 <div class="tool-card"> 1893 <div class="tool-card-header" onclick="toggleTool(this)"> 1894 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/trade/availability/:label</span> 1895 <span class="tool-card-summary">Registration availability + pricing</span> 1896 </div> 1897 <div class="tool-card-body"><div class="tool-card-desc">Check if a name is available for registration and get pricing tiers.</div></div> 1898 </div> 1899 <div class="tool-card"> 1900 <div class="tool-card-header" onclick="toggleTool(this)"> 1901 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/trade/name-status/:label</span> 1902 <span class="tool-card-summary">On-chain name status</span> 1903 </div> 1904 <div class="tool-card-body"><div class="tool-card-desc">Available, registered, premium auction, grace period, etc.</div></div> 1905 </div> 1906 <div class="tool-card"> 1907 <div class="tool-card-header" onclick="toggleTool(this)"> 1908 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/trade/expiry/:label</span> 1909 <span class="tool-card-summary">Expiry date + premium price</span> 1910 </div> 1911 <div class="tool-card-body"><div class="tool-card-desc">Days remaining, expiry timestamp, premium price if applicable.</div></div> 1912 </div> 1913 <div class="tool-card"> 1914 <div class="tool-card-header" onclick="toggleTool(this)"> 1915 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/trade/rent-price/:label</span> 1916 <span class="tool-card-summary">NameWrapper rental pricing</span> 1917 </div> 1918 <div class="tool-card-body"><div class="tool-card-desc">ENS rental pricing tiers for wrapped domains.</div></div> 1919 </div> 1920 <div class="tool-card"> 1921 <div class="tool-card-header" onclick="toggleTool(this)"> 1922 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/register-recipe</span> 1923 <span class="tool-card-summary">Build registration transaction</span> 1924 </div> 1925 <div class="tool-card-body"><div class="tool-card-desc">Returns complete registration recipe with contract, ABI, steps, and gas estimate. Optional <code>recipientAddress</code> registers the name to a different wallet than the one paying. Requires auth.</div></div> 1926 </div> 1927 <div class="tool-card"> 1928 <div class="tool-card-header" onclick="toggleTool(this)"> 1929 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/renew-recipe</span> 1930 <span class="tool-card-summary">Build renewal transaction</span> 1931 </div> 1932 <div class="tool-card-body"><div class="tool-card-desc">Returns transaction data to extend name registration. Requires auth.</div></div> 1933 </div> 1934 <div class="tool-card"> 1935 <div class="tool-card-header" onclick="toggleTool(this)">
1936 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/batch-renew-recipe</span> 1937 <span class="tool-card-summary">Batch renewal via Multicall3</span> 1938 </div> 1939 <div class="tool-card-body"><div class="tool-card-desc">Bundle multiple renewals into a single transaction. Requires auth.</div></div> 1940 </div> 1941 <div class="tool-card"> 1942 <div class="tool-card-header" onclick="toggleTool(this)"> 1943 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/transfer-recipe</span> 1944 <span class="tool-card-summary">Build transfer transaction</span> 1945 </div> 1946 <div class="tool-card-body"><div class="tool-card-desc">Returns transaction data to transfer name ownership. Auto-detects wrapped vs unwrapped. Requires auth.</div></div> 1947 </div> 1948 <div class="tool-card"> 1949 <div class="tool-card-header" onclick="toggleTool(this)"> 1950 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/set-primary-name</span> 1951 <span class="tool-card-summary">Set primary ENS name</span> 1952 </div> 1953 <div class="tool-card-body"><div class="tool-card-desc">Set reverse resolution for a wallet address. Requires auth.</div></div> 1954 </div> 1955 <div class="tool-card"> 1956 <div class="tool-card-header" onclick="toggleTool(this)"> 1957 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/set-records</span> 1958 <span class="tool-card-summary">Update resolver records</span> 1959 </div> 1960 <div class="tool-card-body"><div class="tool-card-desc">Build a multicall transaction to set address records, text records, and contenthash. Requires auth.</div></div> 1961 </div> 1962 <div class="tool-card"> 1963 <div class="tool-card-header" onclick="toggleTool(this)"> 1964 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/fulfillment</span> 1965 <span class="tool-card-summary">Execute purchase/offer</span> 1966 </div> 1967 <div class="tool-card-body"><div class="tool-card-desc">Fulfill a Seaport order (buy listing or accept offer). Requires auth.</div></div> 1968 </div> 1969 <div class="tool-card"> 1970 <div class="tool-card-header" onclick="toggleTool(this)"> 1971 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/submit-order</span> 1972 <span class="tool-card-summary">Submit Seaport order</span> 1973 </div> 1974 <div class="tool-card-body"><div class="tool-card-desc">Submit a signed Seaport order to the orderbook. Requires auth.</div></div> 1975 </div> 1976 <div class="tool-card"> 1977 <div class="tool-card-header" onclick="toggleTool(this)"> 1978 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/batch-fulfillment</span> 1979 <span class="tool-card-summary">Batch buy multiple names</span> 1980 </div> 1981 <div class="tool-card-body"><div class="tool-card-desc">Fulfil multiple Seaport orders in a single transaction. Requires auth.</div></div> 1982 </div> 1983 <div class="tool-card"> 1984 <div class="tool-card-header" onclick="toggleTool(this)"> 1985 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/batch-transfer-recipe</span> 1986 <span class="tool-card-summary">Batch transfer via Multicall3</span> 1987 </div> 1988 <div class="tool-card-body"><div class="tool-card-desc">Transfer up to 20 names in a single transaction. Auto-detects wrapped vs unwrapped. Requires auth.</div></div> 1989 </div> 1990 <div class="tool-card"> 1991 <div class="tool-card-header" onclick="toggleTool(this)">
1992 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/batch-set-records</span> 1993 <span class="tool-card-summary">Batch set records for multiple names</span> 1994 </div> 1995 <div class="tool-card-body"><div class="tool-card-desc">Set resolver records across up to 50 names in a single resolver multicall transaction. Requires auth.</div></div> 1996 </div> 1997 <div class="tool-card"> 1998 <div class="tool-card-header" onclick="toggleTool(this)"> 1999 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/bulk-register-recipe</span> 2000 <span class="tool-card-summary">Bulk registration via Multicall3</span> 2001 </div> 2002 <div class="tool-card-body"><div class="tool-card-desc">Batch register up to 20 names in 2 transactions (commit + register). Each name gets its own front-running secret. Optional <code>recipientAddress</code> registers the batch to a different wallet than the one paying. Requires auth.</div></div> 2003 </div> 2004 <div class="tool-card"> 2005 <div class="tool-card-header" onclick="toggleTool(this)"> 2006 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/wrap-recipe</span> 2007 <span class="tool-card-summary">Wrap name into NameWrapper</span> 2008 </div> 2009 <div class="tool-card-body"><div class="tool-card-desc">Returns approve + wrap transaction recipe to convert ERC-721 to ERC-1155. Optional fuses can be burned on wrap. Requires auth.</div></div> 2010 </div> 2011 <div class="tool-card"> 2012 <div class="tool-card-header" onclick="toggleTool(this)"> 2013 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/unwrap-recipe</span> 2014 <span class="tool-card-summary">Unwrap name from NameWrapper</span> 2015 </div> 2016 <div class="tool-card-body"><div class="tool-card-desc">Returns transaction recipe to convert ERC-1155 back to ERC-721. Fails if CANNOT_UNWRAP fuse is burned. Requires auth.</div></div> 2017 </div> 2018 <div class="tool-card"> 2019 <div class="tool-card-header" onclick="toggleTool(this)"> 2020 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/mint-subnames</span> 2021 <span class="tool-card-summary">Bulk create subnames</span> 2022 </div> 2023 <div class="tool-card-body"><div class="tool-card-desc">Create subnames under a parent name via NameWrapper. Each subname can have its own owner and records. Requires auth.</div></div> 2024 </div> 2025 <div class="tool-card"> 2026 <div class="tool-card-header" onclick="toggleTool(this)"> 2027 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/trade/renew</span> 2028 <span class="tool-card-summary">Execute renewal</span> 2029 </div> 2030 <div class="tool-card-body"><div class="tool-card-desc">Execute a name renewal directly. Requires auth.</div></div> 2031 </div> 2032 <div class="tool-card"> 2033 <div class="tool-card-header" onclick="toggleTool(this)"> 2034 <span class="tool-card-name"><span style="color:var(--red)">DELETE</span> /api/trade/order/:orderId</span> 2035 <span class="tool-card-summary">Cancel an order</span> 2036 </div> 2037 <div class="tool-card-body"><div class="tool-card-desc">Cancel an active listing or offer. Requires auth.</div></div> 2038 </div> 2039 </div> 2040 2041 <!-- Orderbook --> 2042 <div id="rest-orderbook" class="tool-category"> 2043 <div class="tool-category-header"> 2044 <span class="tool-category-name">Orderbook</span> 2045 <span class="tool-badge badge-tx">Auth Required</span> 2046 <span class="tool-count">14 endpoints</span> 2047 </div> 2048 2049 <div class="tool-card"> 2050 <div class="tool-card-header" onclick="toggleTool(this)">
2051 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/orderbook/listings/:label</span> 2052 <span class="tool-card-summary">Listings for a specific name</span> 2053 </div> 2054 <div class="tool-card-body"><div class="tool-card-desc">All active orderbook listings for a specific name. Public.</div></div> 2055 </div> 2056 <div class="tool-card"> 2057 <div class="tool-card-header" onclick="toggleTool(this)"> 2058 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/orderbook/listings</span> 2059 <span class="tool-card-summary">All listings (paginated)</span> 2060 </div> 2061 <div class="tool-card-body"><div class="tool-card-desc">Browse all orderbook listings with pagination. Public.</div></div> 2062 </div> 2063 <div class="tool-card"> 2064 <div class="tool-card-header" onclick="toggleTool(this)"> 2065 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/orderbook/offers/:label</span> 2066 <span class="tool-card-summary">Offers on a specific name</span> 2067 </div> 2068 <div class="tool-card-body"><div class="tool-card-desc">All active offers on a name. Public.</div></div> 2069 </div> 2070 <div class="tool-card"> 2071 <div class="tool-card-header" onclick="toggleTool(this)"> 2072 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/orderbook/create-listing</span> 2073 <span class="tool-card-summary">Create orderbook listing</span> 2074 </div> 2075 <div class="tool-card-body"><div class="tool-card-desc">Submit a new listing to the orderbook. Requires auth.</div></div> 2076 </div> 2077 <div class="tool-card"> 2078 <div class="tool-card-header" onclick="toggleTool(this)"> 2079 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/orderbook/create-offer</span> 2080 <span class="tool-card-summary">Create orderbook offer</span> 2081 </div> 2082 <div class="tool-card-body"><div class="tool-card-desc">Submit a bid to the orderbook. Requires auth.</div></div> 2083 </div> 2084 <div class="tool-card"> 2085 <div class="tool-card-header" onclick="toggleTool(this)"> 2086 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/orderbook/submit</span> 2087 <span class="tool-card-summary">Submit signed order</span> 2088 </div> 2089 <div class="tool-card-body"><div class="tool-card-desc">Submit a signed Seaport order to the orderbook. Requires auth.</div></div> 2090 </div> 2091 <div class="tool-card"> 2092 <div class="tool-card-header" onclick="toggleTool(this)"> 2093 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/orderbook/fulfill</span> 2094 <span class="tool-card-summary">Fulfil orderbook order</span> 2095 </div> 2096 <div class="tool-card-body"><div class="tool-card-desc">Fulfil an existing orderbook order. Requires auth.</div></div> 2097 </div> 2098 <div class="tool-card"> 2099 <div class="tool-card-header" onclick="toggleTool(this)"> 2100 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/orderbook/batch-create-listings</span> 2101 <span class="tool-card-summary">Batch create listings</span> 2102 </div> 2103 <div class="tool-card-body"><div class="tool-card-desc">Submit multiple listings in a single request. Requires auth.</div></div> 2104 </div> 2105 <div class="tool-card"> 2106 <div class="tool-card-header" onclick="toggleTool(this)"> 2107 <span class="tool-card-name"><span style="color:var(--red)">DELETE</span> /api/orderbook/order/:orderHash</span> 2108 <span class="tool-card-summary">
2108Cancel orderbook order</span> 2109 </div> 2110 <div class="tool-card-body"><div class="tool-card-desc">Cancel an active orderbook listing or offer by order hash. Requires auth.</div></div> 2111 </div> 2112 <div class="tool-card"> 2113 <div class="tool-card-header" onclick="toggleTool(this)"> 2114 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/orderbook/create-swap</span> 2115 <span class="tool-card-summary">Build an ENS-for-ENS swap order</span> 2116 </div> 2117 <div class="tool-card-body"><div class="tool-card-desc">Build an unsigned Seaport barter order: names you give, names you want, plus optional WETH on either side. Returns the order for EIP-712 signing. Requires auth.</div></div> 2118 </div> 2119 <div class="tool-card"> 2120 <div class="tool-card-header" onclick="toggleTool(this)"> 2121 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/orderbook/submit-swap</span> 2122 <span class="tool-card-summary">Submit a signed swap order</span> 2123 </div> 2124 <div class="tool-card-body"><div class="tool-card-desc">Submit the signed swap order to the orderbook so the counterparty can accept it. Requires auth.</div></div> 2125 </div> 2126 <div class="tool-card"> 2127 <div class="tool-card-header" onclick="toggleTool(this)"> 2128 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/orderbook/swaps/incoming</span> 2129 <span class="tool-card-summary">Swaps offered to you</span> 2130 </div> 2131 <div class="tool-card-body"><div class="tool-card-desc">List open swap orders where you are the requested counterparty. Requires auth.</div></div> 2132 </div> 2133 <div class="tool-card"> 2134 <div class="tool-card-header" onclick="toggleTool(this)"> 2135 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/orderbook/swaps/outgoing</span> 2136 <span class="tool-card-summary">Swaps you've proposed</span> 2137 </div> 2138 <div class="tool-card-body"><div class="tool-card-desc">List swap orders you've created and their status. Requires auth.</div></div> 2139 </div> 2140 <div class="tool-card"> 2141 <div class="tool-card-header" onclick="toggleTool(this)"> 2142 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/orderbook/accept-swap</span> 2143 <span class="tool-card-summary">Accept a swap (atomic settle)</span> 2144 </div> 2145 <div class="tool-card-body"><div class="tool-card-desc">Build the fulfillment for an incoming swap. Both sides settle atomically in one transaction; the acceptor pays a flat fee. Requires auth.</div></div> 2146 </div> 2147 </div> 2148 2149 <!-- User Management --> 2150 <div id="rest-user" class="tool-category"> 2151 <div class="tool-category-header"> 2152 <span class="tool-category-name">User Management</span> 2153 <span class="tool-badge badge-tx">Auth Required</span> 2154 <span class="tool-count">17 endpoints</span> 2155 </div> 2156 2157 <div class="tool-card"> 2158 <div class="tool-card-header" onclick="toggleTool(this)"> 2159 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/user/me</span> 2160 <span class="tool-card-summary">Current user profile</span> 2161 </div> 2162 <div class="tool-card-body"><div class="tool-card-desc">Address, ENS name, email, settings.</div></div> 2163 </div> 2164 <div class="tool-card"> 2165 <div class="tool-card-header" onclick="toggleTool(this)"> 2166 <span class="tool-card-name">Watchlist</span> 2167 <span class="tool-card-summary">GET, POST, PATCH, DELETE /api/user/watchlist</span> 2168 </div> 2169 <div class="tool-card-body"> 2170 <div class="tool-card-desc">CRUD operations for the user's watchlist. POST to add, GET to list, PATCH /:label to update the target price, note, or toggle one alert type (<code>{ alertType, enable }</code>), DELETE /:label to remove. Alert types: listing, price_target, new_offer, sale, transfer, expiry_warning, available. Detected events land in the inbox: <code>GET /api/user/notifications</code>, <code>GET /api/user/notifications/unread-count</code>, <code>POST /api/user/notifications/read</code>.</div> 2171 </div> 2172 </div> 2173 <div class="tool-card"> 2174 <div class="tool-card-header" onclick="toggleTool(this)">
2175 <span class="tool-card-name">Search History</span> 2176 <span class="tool-card-summary">GET, DELETE /api/user/history</span> 2177 </div> 2178 <div class="tool-card-body"><div class="tool-card-desc">GET to retrieve search history, DELETE to clear it.</div></div> 2179 </div> 2180 <div class="tool-card"> 2181 <div class="tool-card-header" onclick="toggleTool(this)"> 2182 <span class="tool-card-name">Portfolio</span> 2183 <span class="tool-card-summary">5 endpoints under /api/user/portfolio-*</span> 2184 </div> 2185 <div class="tool-card-body"> 2186 <div class="tool-card-desc"> 2187 <strong>GET /api/user/portfolio-history</strong> — Historical portfolio snapshots<br> 2188 <strong>POST /api/user/portfolio-snapshot</strong> — Create point-in-time snapshot<br> 2189 <strong>GET /api/user/portfolio-stats</strong> — Aggregate stats (total value, count, unrealized PnL)<br> 2190 <strong>GET /api/user/portfolio-pnl</strong> — Detailed P&L per name<br> 2191 <strong>GET /api/user/portfolio-realized</strong> — Realized gains/losses on sold names 2192 </div> 2193 </div> 2194 </div> 2195 <div class="tool-card"> 2196 <div class="tool-card-header" onclick="toggleTool(this)"> 2197 <span class="tool-card-name">Email</span> 2198 <span class="tool-card-summary">PUT, DELETE /api/user/email</span> 2199 </div> 2200 <div class="tool-card-body"><div class="tool-card-desc">PUT to set email for alerts, DELETE to remove.</div></div> 2201 </div> 2202 </div> 2203 2204 <!-- Portfolio --> 2205 <div id="rest-portfolio" class="tool-category"> 2206 <div class="tool-category-header"> 2207 <span class="tool-category-name">Portfolio</span> 2208 <span class="tool-badge badge-free">Public</span> 2209 <span class="tool-count">4 endpoints</span> 2210 </div> 2211 2212 <div class="tool-card"> 2213 <div class="tool-card-header" onclick="toggleTool(this)"> 2214 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/portfolio/:address/stats</span> 2215 <span class="tool-card-summary">Portfolio statistics</span> 2216 </div> 2217 <div class="tool-card-body"><div class="tool-card-desc">Aggregate portfolio statistics for any wallet: total value, holdings count, concentration metrics.</div></div> 2218 </div> 2219 <div class="tool-card"> 2220 <div class="tool-card-header" onclick="toggleTool(this)"> 2221 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/portfolio/:address/activity</span> 2222 <span class="tool-card-summary">Portfolio activity log</span> 2223 </div> 2224 <div class="tool-card-body"><div class="tool-card-desc">Recent activity for a portfolio: registrations, transfers, sales, renewals.</div></div> 2225 </div> 2226 <div class="tool-card"> 2227 <div class="tool-card-header" onclick="toggleTool(this)"> 2228 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/portfolio/:address/transactions</span> 2229 <span class="tool-card-summary">Transaction history</span> 2230 </div> 2231 <div class="tool-card-body"><div class="tool-card-desc">Full transaction history for a portfolio with prices and counterparties.</div></div> 2232 </div> 2233 <div class="tool-card"> 2234 <div class="tool-card-header" onclick="toggleTool(this)"> 2235 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/portfolio/:address/pnl</span> 2236 <span class="tool-card-summary">Profit & loss analysis</span> 2237 </div> 2238 <div class="tool-card-body"><div class="tool-card-desc">Detailed P&L breakdown per name: cost basis, current value, unrealized/realized gains.</div></div> 2239 </div> 2240 </div> 2241 2242 <!-- Terminal --> 2243 <div id="rest-terminal" class="tool-category"> 2244 <div class="tool-category-header">
2245 <span class="tool-category-name">Terminal / Chat</span> 2246 <span class="tool-badge badge-tx">Auth Required</span> 2247 <span class="tool-count">5 endpoints</span> 2248 </div> 2249 2250 <div class="tool-card"> 2251 <div class="tool-card-header" onclick="toggleTool(this)"> 2252 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/terminal/chat</span> 2253 <span class="tool-card-summary">AI chat (SSE stream)</span> 2254 </div> 2255 <div class="tool-card-body"> 2256 <div class="tool-card-desc">Multi-turn conversation with the Claude-powered ENS agent. Returns Server-Sent Events stream. Backed by RAG over the ENS knowledge base.</div> 2257 </div> 2258 </div> 2259 <div class="tool-card"> 2260 <div class="tool-card-header" onclick="toggleTool(this)"> 2261 <span class="tool-card-name">Sessions</span> 2262 <span class="tool-card-summary">CRUD at /api/terminal/sessions</span> 2263 </div> 2264 <div class="tool-card-body"> 2265 <div class="tool-card-desc"> 2266 <strong>GET /api/terminal/sessions</strong> — List user's chat sessions<br> 2267 <strong>GET /api/terminal/sessions/:id</strong> — Fetch session messages<br> 2268 <strong>POST /api/terminal/sessions</strong> — Create new session<br> 2269 <strong>DELETE /api/terminal/sessions/:id</strong> — Delete session 2270 </div> 2271 </div> 2272 </div> 2273 </div> 2274 2275 <!-- Knowledge --> 2276 <div id="rest-knowledge" class="tool-category"> 2277 <div class="tool-category-header"> 2278 <span class="tool-category-name">Knowledge</span> 2279 <span class="tool-badge badge-free">Public</span> 2280 <span class="tool-count">1 endpoint</span> 2281 </div> 2282 2283 <div class="tool-card"> 2284 <div class="tool-card-header" onclick="toggleTool(this)"> 2285 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/knowledge-search</span> 2286 <span class="tool-card-summary">Search ENS knowledge base</span> 2287 </div> 2288 <div class="tool-card-body"> 2289 <div class="tool-card-desc">Governance proposals, protocol docs, developer insights, blog posts, forum discussions, and Farcaster casts from key ENS figures.</div> 2290 <table class="param-table"> 2291 <tr><th>Query Param</th><th>Type</th><th></th><th>Description</th></tr> 2292 <tr><td>q</td><td><span class="type">string</span></td><td><span class="required">required</span></td><td>Search query</td></tr> 2293 <tr><td>source</td><td><span class="type">string</span></td><td><span class="optional">optional</span></td><td>ens-forum, vitalik-blog, ens-blog, ens-docs, farcaster</td></tr> 2294 <tr><td>limit</td><td><span class="type">number</span></td><td><span class="optional">default: 6</span></td><td>Number of results</td></tr> 2295 </table> 2296 </div> 2297 </div> 2298 </div> 2299 2300 <!-- Media --> 2301 <div id="rest-media" class="tool-category"> 2302 <div class="tool-category-header"> 2303 <span class="tool-category-name">Media</span> 2304 <span class="tool-badge badge-free">Public</span> 2305 <span class="tool-count">1 endpoint</span> 2306 </div> 2307 2308 <div class="tool-card"> 2309 <div class="tool-card-header" onclick="toggleTool(this)"> 2310 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/upload-avatar</span> 2311 <span class="tool-card-summary">Upload avatar to IPFS</span> 2312 </div> 2313 <div class="tool-card-body"> 2314 <div class="tool-card-desc">Multipart upload. Accepts PNG, JPG, GIF, WebP, SVG (max 5 MB). Returns IPFS URI, gateway URL, and CID. Use the IPFS URI as the ENS avatar text record value.</div> 2315 </div> 2316 </div> 2317 </div> 2318 2319 <!-- Agents & Hosting --> 2320 <div id="rest-agents" class="tool-category"> 2321 <div class="tool-category-header">
2322 <span class="tool-category-name">Agents & Hosting</span> 2323 <span class="tool-badge badge-free">Public + Auth</span> 2324 <span class="tool-count">6 endpoints</span> 2325 </div> 2326 2327 <div class="tool-card"> 2328 <div class="tool-card-header" onclick="toggleTool(this)"> 2329 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/agents/:label/profile</span> 2330 <span class="tool-card-summary">Hosted agent profile (persona, greeting, skills)</span> 2331 </div> 2332 <div class="tool-card-body"><div class="tool-card-desc">Public identity for a hosted agent: persona, greeting, enabled skills, and ENS binding. Powers the <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">/agent/<label></code> chat page.</div></div> 2333 </div> 2334 <div class="tool-card"> 2335 <div class="tool-card-header" onclick="toggleTool(this)"> 2336 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/agents/:label/chat</span> 2337 <span class="tool-card-summary">Stream a chat turn with a hosted agent</span> 2338 </div> 2339 <div class="tool-card-body"><div class="tool-card-desc">SSE chat with the agent in its persona. Action skills stream unsigned transactions back as sign-cards for the visitor to sign in their own wallet (directed signing). Auth required for write actions.</div></div> 2340 </div> 2341 <div class="tool-card"> 2342 <div class="tool-card-header" onclick="toggleTool(this)"> 2343 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/agents/draft-brain</span> 2344 <span class="tool-card-summary">AI-draft an agent persona + skills</span> 2345 </div> 2346 <div class="tool-card-body"><div class="tool-card-desc">Given a short description, returns a suggested persona, greeting, and skill set to seed the Launch flow.</div></div> 2347 </div> 2348 <div class="tool-card"> 2349 <div class="tool-card-header" onclick="toggleTool(this)"> 2350 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/agents/:label/brain</span> 2351 <span class="tool-card-summary">Read an agent's saved config (owner)</span> 2352 </div> 2353 <div class="tool-card-body"><div class="tool-card-desc">Returns the full saved brain for an agent you own. Requires auth as the name's owner.</div></div> 2354 </div> 2355 <div class="tool-card"> 2356 <div class="tool-card-header" onclick="toggleTool(this)"> 2357 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/agents/:label/brain</span> 2358 <span class="tool-card-summary">Save persona, greeting & skills (owner)</span> 2359 </div> 2360 <div class="tool-card-body"><div class="tool-card-desc">Create or update an agent's persona, greeting, and enabled skills. Requires auth as the name's owner (wrapped-name owners supported).</div></div> 2361 </div> 2362 <div class="tool-card"> 2363 <div class="tool-card-header" onclick="toggleTool(this)"> 2364 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/og/agent/:label.png</span> 2365 <span class="tool-card-summary">Agent share / unfurl card image</span> 2366 </div> 2367 <div class="tool-card-body"><div class="tool-card-desc">Generated 1200×630 Open Graph image for an agent, used when its <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">/agent/<label></code> link is shared. Public.</div></div> 2368 </div> 2369 </div> 2370 2371 <!-- Guardian --> 2372 <div id="rest-guardian" class="tool-category"> 2373 <div class="tool-category-header"> 2374 <span class="tool-category-name">Renewal Guardian</span> 2375 <span class="tool-badge badge-free">Public + Auth</span>
2376 <span class="tool-count">3 endpoints</span> 2377 </div> 2378 2379 <div class="tool-card"> 2380 <div class="tool-card-header" onclick="toggleTool(this)"> 2381 <span class="tool-card-name"><span style="color:var(--blue)">GET</span> /api/guardian/:address/renewals</span> 2382 <span class="tool-card-summary">What a wallet should renew, and why</span> 2383 </div> 2384 <div class="tool-card-body"><div class="tool-card-desc">The assisted renewal agent: scans a wallet's names and returns a prioritised renewal recommendation with reasoning and cost. Read-only and public.</div></div> 2385 </div> 2386 <div class="tool-card"> 2387 <div class="tool-card-header" onclick="toggleTool(this)"> 2388 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/guardian/:address/renewal-plan</span> 2389 <span class="tool-card-summary">Build a signable batch-renew recipe</span> 2390 </div> 2391 <div class="tool-card-body"><div class="tool-card-desc">Returns an unsigned batch-renewal transaction for the recommended names, ready for the owner to sign. Requires auth as the wallet owner.</div></div> 2392 </div> 2393 <div class="tool-card"> 2394 <div class="tool-card-header" onclick="toggleTool(this)"> 2395 <span class="tool-card-name"><span style="color:var(--green)">POST</span> /api/guardian/:address/renewal-status</span> 2396 <span class="tool-card-summary">Confirm a renewal landed</span> 2397 </div> 2398 <div class="tool-card-body"><div class="tool-card-desc">Reports the on-chain status of a submitted renewal so the agent can confirm completion.</div></div> 2399 </div> 2400 </div> 2401 2402 </section> 2403 2404 <!-- Workflows --> 2405 <section id="workflows" class="doc-section"> 2406 <div class="section-label">Recipes</div> 2407 <div class="section-title">Common Workflows</div> 2408 <div class="workflow-grid"> 2409 <div class="workflow-card"> 2410 <div class="workflow-title">Provision an agent identity</div> 2411 <ul class="workflow-steps"> 2412 <li data-step="1.">Call <code>provision_agent_identity</code> with purpose, budget, and wallet</li> 2413 <li data-step="2.">Pick a name from the recommendations</li> 2414 <li data-step="3.">Execute the registration recipe with your wallet (commit → wait 60s → register)</li> 2415 <li data-step="4.">Call <code>set_ens_records</code> with the suggested records (ai.agent, ai.capabilities, etc.)</li> 2416 <li data-step="5.">Call <code>set_primary_name</code> to set reverse resolution</li> 2417 </ul> 2418 </div> 2419 <div class="workflow-card"> 2420 <div class="workflow-title">Find and buy underpriced names</div> 2421 <ul class="workflow-steps"> 2422 <li data-step="1.">Call <code>find_alpha</code> with your price ceiling and minimum discount</li> 2423 <li data-step="2.">For each opportunity, call <code>get_valuation</code> for deep analysis</li> 2424 <li data-step="3.">Call <code>purchase_name</code> to get the Seaport fulfillment data</li> 2425 <li data-step="4.">Sign and broadcast the transaction with your wallet</li> 2426 </ul> 2427 </div> 2428 <div class="workflow-card"> 2429 <div class="workflow-title">Deploy an agent fleet</div> 2430 <ul class="workflow-steps"> 2431 <li data-step="1.">Register the parent name: <code>purchase_name</code> with action "register"</li> 2432 <li data-step="2.">Wrap it: <code>wrap_name</code> to enable subname features</li> 2433 <li data-step="3.">Mint fleet subnames: <code>mint_subnames</code> (e.g. agent001.fleet.eth, agent002.fleet.eth)</li> 2434 <li data-step="4.">Configure all at once: <code>bulk_set_records</code> with agent metadata per subname</li> 2435 </ul> 2436 </div> 2437 <div class="workflow-card"> 2438 <div class="workflow-title">Bind an ERC-8004 identity to a name</div> 2439 <ul class="workflow-steps"> 2440 <li data-step="1.">Call <code>register_agent</code> for your name (default "adapter" route, ERC-8217-bound)</li> 2441 <li data-step="2.">Sign and broadcast the registration transaction</li> 2442 <li data-step="3.">Read the new agentId from the receipt</li> 2443 <li data-step="4.">Call <code>set_ens_records</code> with the agentRegistration shorthand to write the ENSIP-25 binding</li> 2444 <li data-step="5.">Verify with <code>get_agent_reputation</code></li> 2445 </ul> 2446 </div> 2447 <div class="workflow-card"> 2448 <div class="workflow-title">Batch renew a portfolio</div> 2449 <ul class="workflow-steps"> 2450 <li data-step="1.">Call <code>get_wallet_portfolio</code> for the wallet</li> 2451 <li data-step="2.">Filter names expiring soon (or use <code>get_name_details</code> for exact expiry)</li> 2452 <li data-step="3.">Call <code>renew_ens_name</code> with the full array (bundled via Multicall3)</li> 2453 <li data-step="4.">Sign one transaction;
2453 excess ETH is refunded</li> 2454 </ul> 2455 </div> 2456 </div> 2457 </section> 2458 2459 <!-- Standards --> 2460 <section id="standards" class="doc-section"> 2461 <div class="section-label">Standards</div> 2462 <div class="section-title">Protocol Support</div> 2463 <div class="section-desc">Name Whisper builds on open standards for trading, authentication, and AI agent identity on Ethereum — no proprietary lock-in.</div> 2464 <div class="standards-grid"> 2465 <div class="standard-card"> 2466 <div class="standard-name">Seaport</div> 2467 <div class="standard-desc">The open order protocol Name Whisper uses for every listing, offer, swap, and fill — the same protocol that powers OpenSea. Orders live on a shared on-chain orderbook, so liquidity is pooled across the ecosystem. Name Whisper builds unsigned orders; the caller always signs.</div> 2468 <div class="standard-status status-live">Live</div> 2469 </div> 2470 <div class="standard-card"> 2471 <div class="standard-name">ERC-8128</div> 2472 <div class="standard-desc">Signed-request authentication. Agents sign HTTP requests with an Ethereum wallet to unlock identity-aware features (reputation, per-agent usage, future premium tiers). Max validity 300s with nonce replay protection. Unsigned requests still work. See get_caller_identity and <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">/.well-known/erc8128</code>.</div> 2473 <div class="standard-status status-live">Live</div> 2474 </div> 2475 <div class="standard-card"> 2476 <div class="standard-name">ENSIP-25</div> 2477 <div class="standard-desc">Agent-to-ENS binding protocol. Cryptographically links an ENS name to an on-chain agent registry entry via standardized text records. Supported in set_ens_records, bulk_set_records, provision_agent_identity, and get_agent_reputation.</div> 2478 <div class="standard-status status-live">Live</div> 2479 </div> 2480 <div class="standard-card"> 2481 <div class="standard-name">ERC-8004</div> 2482 <div class="standard-desc">Agent identity registry standard. On-chain agent registration, reputation scoring, and capability validation. Live on Ethereum mainnet since Jan 2026. <a href="/agents" style="color: var(--accent);">View the live registry feed →</a></div> 2483 <div class="standard-status status-live">Live</div> 2484 </div> 2485 <div class="standard-card"> 2486 <div class="standard-name">ERC-8217</div> 2487 <div class="standard-desc">Token-bound agent identity. Binds an ERC-8004 agent to the ENS name's token so control and marketplace visibility follow the name — sell the name and the agent transfers with it. The default route in register_agent.</div> 2488 <div class="standard-status status-live">Live</div> 2489 </div> 2490 </div> 2491 </section> 2492 2493 <!-- Payments --> 2494 <section id="payments" class="doc-section"> 2495 <div class="section-label">Payments</div> 2496 <div class="section-title">Interface Fees</div> 2497 <div class="section-desc">Separate from the machine-payment rails below, Name Whisper charges a 1% interface fee on the transactions it builds — identically whether the transaction comes from MCP, REST, or the web app. Every recipe returns the fee broken out so a client can display it before signing.</div> 2498 2499 <div class="tool-category" style="margin-bottom: 24px;"> 2500 <div style="font-size: 13px; color: var(--text-secondary); line-height: 1.9;"> 2501 <strong style="color: var(--text);">1% seller-paid</strong>, deducted from proceeds — selling via a Name Whisper listing, accepting an offer. Returned as <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">listing.protocolFeeEth</code> / <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">sellerProceedsEth</code>.<br> 2502 <strong style="color: var(--text);">1% on top of the ENS price</strong> — registering and renewing, single or bulk. Returned as <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">totalCost.feeEth</code> / <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">feeBps</code> on register recipes, and <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">feeEth</code> / <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">ensCostEth</code> / <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">feeBps</code> from <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">/api/trade/renew</code>. Fixed at 100 bps in the contracts themselves.<br> 2503 <strong style="color: var(--text);">Flat $5</strong>, priced in ETH at settlement — accepting a swap, paid by the acceptor.<br> 2504 <strong style="color: var(--text);">No fee</strong> — buying a listed name, transfers, records, wrapping, subnames. Gas only.<br>
2505 <span style="color: var(--text-dim);">Full schedule and verified contract addresses: <a href="/guide#fees" style="color: var(--accent);">namewhisper.ai/guide#fees</a></span> 2506 </div> 2507 </div> 2508 2509 <div class="section-title">Machine Payment Protocols</div> 2510 <div class="section-desc">Name Whisper supports two machine-to-machine payment protocols for agent transactions. All tools are currently free — fee switches exist to activate either protocol later.</div> 2511 2512 <div class="standards-grid" style="margin-bottom: 24px;"> 2513 <div class="standard-card"> 2514 <div class="standard-name">x402</div> 2515 <div class="standard-desc">HTTP-native payment protocol via Coinbase. USDC on Base (chain ID 8453). Payment challenges and receipts flow through HTTP 402 responses and headers. <a href="https://x402.org" style="color: var(--accent);" target="_blank" rel="noopener">x402.org</a></div> 2516 <div class="standard-status status-partial">Dormant</div> 2517 </div> 2518 <div class="standard-card"> 2519 <div class="standard-name">MPP</div> 2520 <div class="standard-desc">MCP-native payment protocol via Stripe/Tempo. pathUSD on Tempo network. Payment challenges, credentials, and receipts flow through JSON-RPC <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">_meta</code> fields in the MCP SDK transport. <a href="https://mpp.dev" style="color: var(--accent);" target="_blank" rel="noopener">mpp.dev</a></div> 2521 <div class="standard-status status-partial">Dormant</div> 2522 </div> 2523 </div> 2524 2525 <div class="tool-category"> 2526 <div class="tool-category-header"> 2527 <div class="tool-category-name">Tool Classification</div> 2528 </div> 2529 2530 <div style="font-size: 13px; color: var(--text-secondary); line-height: 1.7; margin-bottom: 20px;"> 2531 34 tools are permanently free (search, discovery, valuation, portfolio, market data, knowledge, identity, and all order-building reads). 9 transaction tools (<code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">purchase_name</code>, <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">make_offer</code>, <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">accept_offer</code>, <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">create_listing</code>, <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">batch_create_listings</code>, <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">batch_purchase</code>, <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">sweep</code>, <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">set_ens_records</code>, <code style="font-family: var(--font-mono); font-size: 11px; color: var(--accent-bright);">mint_subnames</code>) are wrapped with payment gating. When fees activate, these tools return a 402 challenge that the agent resolves via the active protocol. 2532 </div> 2533 2534 <div class="tool-category-header"> 2535 <div class="tool-category-name">Payment Discovery</div> 2536 </div> 2537 2538 <div style="font-size: 13px; color: var(--text-secondary); line-height: 1.7; margin-bottom: 12px;"> 2539 Agents can query the payment discovery endpoint to check which protocols are available, which tools are free vs paid, and current pricing. 2540 </div> 2541 2542 <div class="tool-card"> 2543 <div class="tool-card-header" onclick="toggleTool(this)"> 2544 <span class="tool-card-name">GET /mcp/payments</span> 2545 <span class="tool-card-summary">Payment protocol discovery</span> 2546 </div> 2547 <div class="tool-card-body"> 2548 <div class="tool-card-desc">Returns supported payment protocols, active protocol, and per-tool classification with current pricing.</div> 2549 <div class="example-label">Response</div> 2550 <div class="code-block"><button class="copy-btn" onclick="copyCode(this)">copy</button>{ 2551 <span class="str">"activeProtocol"</span>: <span class="str">null</span>, 2552 <span class="str">"protocols"</span>: { 2553 <span class="str">"x402"</span>: {
2554 <span class="str">"supported"</span>: <span class="num">true</span>, 2555 <span class="str">"enabled"</span>: <span class="num">false</span>, 2556 <span class="str">"currency"</span>: <span class="str">"USDC"</span>, 2557 <span class="str">"network"</span>: <span class="str">"base"</span>, 2558 <span class="str">"chainId"</span>: <span class="num">8453</span> 2559 }, 2560 <span class="str">"mpp"</span>: { 2561 <span class="str">"supported"</span>: <span class="num">true</span>, 2562 <span class="str">"enabled"</span>: <span class="num">false</span>, 2563 <span class="str">"currency"</span>: <span class="str">"pathUSD"</span>, 2564 <span class="str">"network"</span>: <span class="str">"tempo"</span>, 2565 <span class="str">"transport"</span>: <span class="str">"mcp-sdk"</span> 2566 } 2567 }, 2568 <span class="str">"tools"</span>: [ 2569 { <span class="str">"name"</span>: <span class="str">"search_ens_names"</span>, <span class="str">"classification"</span>: <span class="str">"FREE"</span>, <span class="str">"requiresPayment"</span>: <span class="num">false</span> }, 2570 { <span class="str">"name"</span>: <span class="str">"purchase_name"</span>, <span class="str">"classification"</span>: <span class="str">"TRANSACTION"</span>, <span class="str">"requiresPayment"</span>: <span class="num">false</span>, <span class="str">"currentPrice"</span>: <span class="str">"0"</span> }, 2571 <span class="cmt">// ... all 44 tools listed</span> 2572 ] 2573}</div> 2574 </div> 2575 </div> 2576 </div> 2577 2578 <div class="tool-category"> 2579 <div class="tool-category-header"> 2580 <div class="tool-category-name">Payment Flow</div> 2581 </div> 2582 2583 <div style="font-size: 13px; color: var(--text-secondary); line-height: 1.7; margin-bottom: 16px;"> 2584 When fee switches are activated, transaction tools use this flow: 2585 </div> 2586 2587 <div class="workflow-card" style="background: var(--surface); border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); padding: 24px; margin-bottom: 16px;"> 2588 <div style="font-family: var(--font-display); font-size: 16px; font-weight: 600; margin-bottom: 12px;">x402 (HTTP transport)</div> 2589 <ol class="workflow-steps"> 2590 <li data-step="1.">Agent calls a TRANSACTION tool via HTTP</li> 2591 <li data-step="2.">Server responds with HTTP 402 + payment challenge (USDC amount, pay-to address)</li> 2592 <li data-step="3.">Agent pays on Base, receives receipt</li> 2593 <li data-step="4.">Agent retries the tool call with payment receipt in headers</li> 2594 <li data-step="5.">Server verifies receipt and executes the tool</li> 2595 </ol> 2596 </div> 2597 2598 <div class="workflow-card" style="background: var(--surface); border: 1px solid var(--border-subtle); border-radius: var(--radius-sm); padding: 24px;"> 2599 <div style="font-family: var(--font-display); font-size: 16px; font-weight: 600; margin-bottom: 12px;">MPP (MCP SDK transport)</div> 2600 <ol class="workflow-steps"> 2601 <li data-step="1.">Agent calls a TRANSACTION tool via MCP SDK</li> 2602 <li data-step="2.">Server returns an MCP error <code>-32042</code> with payment challenge in <code>_meta</code></li> 2603 <li data-step="3.">Agent pays on Tempo (pathUSD), receives credential</li> 2604 <li data-step="4.">Agent retries with payment credential in the <code>_meta</code> field</li> 2605 <li data-step="5.">Server verifies credential and executes the tool</li> 2606 </ol> 2607 </div> 2608 </div> 2609 </section> 2610 2611 </main> 2612 </div> 2613 2614 <!-- Footer --> 2615 <footer class="footer"> 2616 <div class="footer-brand">© 2026 Name Whisper</div> 2617 <div class="footer-links"> 2618 <a href="/terminal">Terminal</a> 2619 <a href="/guide">Guide</a> 2620 <a href="/docs">Docs</a> 2621 <a href="/agents">Agents</a> 2622 <a href="/launch">Launch</a> 2623 <a href="/swap">Swap</a> 2624 <a href="/tools">Tools</a> 2625 <a href="/terms">Terms</a> 2626 <a href="/privacy">Privacy</a> 2627 <a href="https://x.com/NameWhisper_AI" target="_blank" rel="noopener">@NameWhisper_AI</a> 2628 </div> 2629 </footer> 2630 2631 </div> 2632 2633
2633<script> 2634 function copyText(text, btn) { 2635 navigator.clipboard.writeText(text).then(function() { 2636 btn.textContent = 'copied'; 2637 setTimeout(function() { btn.textContent = 'copy'; }, 1500); 2638 }); 2639 } 2640 function copyCode(btn) { 2641 var block = btn.parentElement; 2642 var clone = block.cloneNode(true); 2643 var b = clone.querySelector('.copy-btn'); 2644 if (b) b.remove(); 2645 navigator.clipboard.writeText(clone.textContent.trim()).then(function() { 2646 btn.textContent = 'copied'; 2647 setTimeout(function() { btn.textContent = 'copy'; }, 1500); 2648 }); 2649 } 2650 function toggleTool(header) { 2651 header.parentElement.classList.toggle('open'); 2652 } 2653 2654 // Sidebar active state on scroll 2655 var sections = document.querySelectorAll('[id]'); 2656 var sidebarLinks = document.querySelectorAll('.sidebar-link'); 2657 window.addEventListener('scroll', function() { 2658 var scrollY = window.scrollY + 100; 2659 sections.forEach(function(section) { 2660 var top = section.offsetTop; 2661 var height = section.offsetHeight; 2662 var id = section.getAttribute('id'); 2663 if (scrollY >= top && scrollY < top + height) { 2664 sidebarLinks.forEach(function(link) { 2665 link.classList.remove('active'); 2666 if (link.getAttribute('href') === '#' + id) { 2667 link.classList.add('active'); 2668 } 2669 }); 2670 } 2671 }); 2672 }); 2673 </script>
2673 2674</body> 2675</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.