एजेंटिक एलएलएम के युग में हेडलेस कॉमर्स की तैयारी
खरीदार एजेंट बन रहे हैं। बिना मनुष्य के किसी एलएलएम के लिए पठनीय, हस्ताक्षर-योग्य और भुगतान-योग्य होने में क्या लगता है, और Hanzo आज उसके लिए क्या देता है।

इस पृष्ठ पर
हेडलेस कॉमर्स ने दुकान के मुखौटे को इंजन से अलग कर दिया, ताकि कोई भी फ्रंट एंड एक ही API से बेच सके। वह फ्रंट एंड हमेशा कुछ ऐसा था जिसे कोई व्यक्ति देखता था: एक साइट, एक ऐप, एक कियोस्क।
अगला फ्रंट एंड देखता नहीं। वह पढ़ता है। खरीदार एजेंट बन रहा है: एक प्रोग्राम जिसके पास लक्ष्य, बजट और टूल लूप है, जिसे कोई प्लान, कोई GPU या पेमेंट API ढूँढने भेजा जाता है। वह उसी से खरीदता है जिसे वह समझ सके और मनुष्य से मदद माँगे बिना भुगतान कर सके। अगर आपके कारोबार को पेज पढ़ने, कुकी बैनर हटाने, पुष्टि का ईमेल खोलने या कार्ड नंबर टाइप करने के लिए किसी व्यक्ति की ज़रूरत है, तो एजेंट अगला नतीजा ले लेता है।
यही थीसिस है। कारोबार को ऐसे LLM के लिए पठनीय और लेन-देन योग्य होना होगा जिसके लूप में कोई मनुष्य न हो। पठनीय का मतलब है कि एजेंट जान सके कि आप क्या बेचते हैं, उसकी कीमत क्या है और शुरुआत कैसे होती है। लेन-देन योग्य का मतलब है कि वह अकेले, एक API के ज़रिए, शुरुआत कर सके, भुगतान कर सके और चीज़ पा सके।
यह उसके लिए बिंदु-दर-बिंदु क्या चाहिए, और Hanzo आज क्या देता है। नीचे हर पता बिना खाते के जवाब देता है, ताकि आप हर दावा खुद जाँच सकें।
हर पेज को Markdown के रूप में दें
एजेंट हर टोकन का दाम चुकाता है जिसे वह पढ़ता है। hanzo.ai पर पेज के पते में .md जोड़िए और पेज Markdown में मिलता है: hanzo.ai/pricing.md, hanzo.ai/about.md। हर पेज अपने सिर में <link rel="alternate" type="text/markdown"> से अपने जुड़वाँ का नाम लिखता है, ताकि एजेंट को अनुमान न लगाना पड़े।
26 अक्टूबर को मैंने हमारा एजेंट पेज दोनों तरह से मँगाया: HTML में 528,810 बाइट, Markdown में 17,465। फिर साइटमैप के हर बारहवें URL को लिया, 829 में से 70, और उसका जुड़वाँ माँगा। सभी 70 200 पर text/markdown होकर लौटे।
एक ऐसा इंडेक्स प्रकाशित करें जहाँ से एजेंट शुरू कर सके
जिस एजेंट ने आपके बारे में कभी न सुना हो, उसे एक ऐसा पता चाहिए जो हर जगह ले जाए। हम तीन प्रकाशित करते हैं।
-
hanzo.ai/llms.txt साइट का सादा-पाठ नक्शा है। वह बताता है Hanzo क्या है, फिर "For agents" खंड में कुंजी पाने के ठीक कदम देता है, फिर पेजों को एक-एक पंक्ति में सूचीबद्ध करता है। docs.hanzo.ai/llms.txt दस्तावेज़ों के लिए वही करता है।
-
api.hanzo.ai/v1 हर क्षमता गिनाता है जो API देती है, कुंजी की ज़रूरत नहीं, और api.hanzo.ai/v1/openapi.json में हर ऑपरेशन अपनी स्कीमा के साथ है। बिक्री के लिए इंडेक्स में
commerceक्षमता है: चेकआउट, सब्सक्रिप्शन, इनवॉइस, पेमेंट वेबहुक और स्टोरफ्रंट कैटलॉग। -
hanzo.ai/.well-known/api-catalog वह मानक जगह है (RFC 9727) जहाँ क्लाइंट पहले देखता है। वह OpenAPI दस्तावेज़, दस्तावेज़ों और स्थिति पेज की ओर इशारा करता है।
क्रॉलरों का जान-बूझकर स्वागत करें
robots.txt वह पहली फ़ाइल है जो कोई भी क्रॉलर माँगता है। हमारी बारह AI क्रॉलरों के नाम एक-एक कर लेती है, उनमें GPTBot, ClaudeBot, Claude-User, PerplexityBot और Google-Extended हैं, और उन्हें अनुमति देती है। उन्हें वही अपवाद मिलते हैं जो बाकी सबको: साइन-इन, खाता, भुगतान और API पथ।
AI क्रॉलरों को रोकना एक जायज़ विकल्प है। उन्हें इसलिए रोकना कि डिफ़ॉल्ट ने ऐसा कहा था, विकल्प है ही नहीं।
कीमत को एक डेटा बिंदु बनाएँ
एजेंट तुलना करते हैं। तस्वीर के अंदर की कीमत, या «संपर्क करें» बटन के पीछे की कीमत, तुलना में नहीं आती। api.hanzo.ai/v1/billing/plans को कुंजी नहीं चाहिए और वह JSON लौटाता है: Free 0 पर, Pro महीने के 2000 पर, Team सीट के 2500 पर, और हर प्लान की सीमाएँ उसके पास। राशियाँ सेंट में हैं।
वॉलेट को साइन अप करने दें
एजेंट के पास न इनबॉक्स है, न फ़ोन, न कार्ड। उसके पास कुंजी-युग्म है। इसलिए hanzo.id वॉलेट से साइन-इन कराता है: वॉलेट के पते के लिए एक बार का nonce माँगिए, उसके बताए संदेश पर हस्ताक्षर कीजिए, हस्ताक्षर भेजिए, और जो कोड वापस मिले उसे टोकन से बदलिए।
जिस वॉलेट को Hanzo ने पहले न देखा हो, उसे अपना खाता और अपना संगठन मिलता है, वॉलेट व्यवस्थापक होता है, Free प्लान पर। टोकन सात दिन चलता है। न कोई ईमेल खोलता है, न किसी डिवाइस को मंज़ूरी देता है।
एक कॉल में कुंजी, और आज़माने के लिए थोड़ी गुंजाइश
टोकन के साथ POST /v1/account/keys एक sk-live- कुंजी लौटाता है जो टोकन के बाद भी रहती है। उसे रखिए; दस्तावेज़ कहते हैं वह एक बार दिखती है।
Free प्लान zen-free पर दिन के 50 अनुरोध है, कार्ड नहीं चाहिए, और हर प्रतिक्रिया बताती है कि x-ratelimit-remaining में कितना बचा है। मेरी पहली कॉल का जवाब 200 था और 49 बचे थे।
बिना मनुष्य के भुगतान: API पर स्टेबलकॉइन
POST /v1/billing/crypto/deposit एक चेन, एक टोकन और एक राशि लेता है, और 24 घंटे के लिए वैध जमा पता लौटाता है। GET /v1/billing/crypto/options बताता है वह क्या स्वीकार करता है: चेन Base, Ethereum और Solana, तथा टोकन USDC और USDT।
मैं पते पर रुका और पैसे नहीं भेजे। शेष तब जुड़ता है जब चेन पुष्टि करती है, यह हमारे दस्तावेज़ कहते हैं, यह कोई चीज़ नहीं जिसे मैंने खुद चलाया हो। प्लान और सब्सक्रिप्शन ब्राउज़र में कार्ड चेकआउट ही रहते हैं। एजेंट को हमसे शेष चाहिए, और शेष का एक API है।
पूरा प्रवाह, एक फ़ाइल में
यह hanzo.ai/agents#headless है, संक्षेप में। हर पंक्ति वैसे ही है जैसी वह पेज छापता है; मैंने दूसरी हेडर टिप्पणी, विकल्पों वाली कॉल, और वह पंक्ति छोड़ दी जो कुंजी का उपसर्ग छापती है। Node 22.18 या उससे नया चाहिए और npm i viem, फिर node headless.mts। मैंने यह ब्लॉक उत्पादन पर एक नए वॉलेट से चलाया: एक टोकन, एक कुंजी, एक मुफ़्त कॉल, और एक USDC जमा पता।
// No human required: sign in with a wallet, get a key, call the API, top up in USDC.
// npm i viem · node headless.mts (Node 22.18+; set HANZO_WALLET_KEY to use your own wallet)
import { createHash, randomBytes } from 'node:crypto'
import { generatePrivateKey, privateKeyToAccount } from 'viem/accounts'
const ID = 'https://hanzo.id'
const API = 'https://api.hanzo.ai'
const CLIENT = 'hanzo-ai'
const REDIRECT = 'http://localhost:3000/callback'
const account = privateKeyToAccount((process.env.HANZO_WALLET_KEY as `0x${string}`) ?? generatePrivateKey())
const json = async (r: Response) => {
const body = await r.json()
if (!r.ok || body?.status === 'error') throw new Error(`${r.url} ${r.status} ${JSON.stringify(body)}`)
return body
}
// 1. A one-time challenge for this wallet.
const { data: c } = await json(await fetch(`${ID}/v1/iam/web3/nonce?chain=evm&address=${account.address}`))
// 2. The CAIP-122 message the challenge describes, signed with EIP-191 personal_sign.
const message = [
`${c.domain} wants you to sign in with your Ethereum account:`,
account.address,
'',
...(c.statement ? [c.statement, ''] : []),
`URI: ${c.uri}`,
`Version: ${c.version}`,
`Nonce: ${c.nonce}`,
`Issued At: ${c.issuedAt}`,
...(c.expirationTime ? [`Expiration Time: ${c.expirationTime}`] : []),
].join('\n')
const signature = await account.signMessage({ message })
// 3. Verify: a first-seen wallet gets an account and an organization of its own.
const verifier = randomBytes(32).toString('base64url')
const challenge = createHash('sha256').update(verifier).digest('base64url')
const { data: code } = await json(
await fetch(`${ID}/v1/iam/web3/verify`, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
clientId: CLIENT, chain: 'evm', scheme: 'secp256k1-eip191', address: account.address, message, signature,
type: 'code', redirectUri: REDIRECT, scope: 'openid profile email', codeChallenge: challenge, codeChallengeMethod: 'S256',
}),
}),
)
// 4. The authorization code for a token.
const token = await json(
await fetch(`${ID}/v1/iam/oauth/token`, {
method: 'POST',
headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
body: new URLSearchParams({ grant_type: 'authorization_code', client_id: CLIENT, code, code_verifier: verifier, redirect_uri: REDIRECT }),
}),
)
const bearer = { Authorization: `Bearer ${token.access_token}`, 'Content-Type': 'application/json' }
// 5. A key that outlives the token. Shown once: keep it in your secret store.
const minted = await json(await fetch(`${API}/v1/account/keys`, { method: 'POST', headers: bearer, body: JSON.stringify({ name: 'agent', type: 'secret' }) }))
const key = { Authorization: `Bearer ${minted.key}`, 'Content-Type': 'application/json' }
// 6. A first call, free.
const chat = await fetch(`${API}/v1/chat/completions`, {
method: 'POST', headers: key,
body: JSON.stringify({ model: 'zen-free', messages: [{ role: 'user', content: 'Reply with the single word: ready' }] }),
})
console.log('chat', chat.status, chat.headers.get('x-hanzo-served'), 'free left today:', chat.headers.get('x-ratelimit-remaining'))
console.log((await chat.json()).choices?.[0]?.message?.content)
// 7. Top up in USDC: ask for a deposit address, then send to exactly that address.
console.log(await json(await fetch(`${API}/v1/billing/crypto/deposit`, { method: 'POST', headers: key, body: JSON.stringify({ chain: 'base', token: 'usdc', amountCents: 500 }) })))
x402 आ रहा है, और अभी यहाँ नहीं है
टॉप-अप के आगे, एजेंट के लिए सही रूप प्रति अनुरोध भुगतान है। सर्वर कीमत के साथ 402 Payment Required उत्तर देता है, क्लाइंट भुगतान करता है और फिर कोशिश करता है। वही x402 है। वह हमारे API पर चालू नहीं है: कोई भी Hanzo एंडपॉइंट अभी इस तरह कीमत नहीं बताता, इसलिए मैं उसका दावा नहीं करूँगा। जब तक वह न हो, API से भरा शेष ही वह तरीका है जिससे एजेंट हमें भुगतान करता है।
क्रॉलर की शून्य त्रुटियाँ क्यों मायने रखती हैं
इसमें से कुछ भी ज़ोर से असफल नहीं होता। एजेंट जो आपके साइटमैप की कड़ी से 404 पर पहुँचता है, टिकट नहीं खोलता। वह अगला नतीजा ले लेता है। क्रॉलर की त्रुटि को वैसे ही लीजिए जैसे कोई दुकान टूटे चेकआउट को लेती है।
मैंने वही 70 नमूना पेज ClaudeBot की user-agent स्ट्रिंग से मँगाए और फिर Googlebot की से। हर एक ने दोनों बार 200 उत्तर दिया। यह नमूना है, गारंटी नहीं, और user-agent स्ट्रिंग क्रॉलर का अपना पता नहीं है, इसलिए मैं आपको नहीं दिखा सकता कि असली क्रॉलर क्या देखते हैं। अपनी साइट पर वही कीजिए: जिन एजेंटों को आप बुला रहे हैं उनसे अपना साइटमैप मँगवाइए, और गिनिए कितने उत्तर 200 नहीं हैं।
हम यहाँ पहले भी आ चुके हैं
मैंने यह कंपनी 2014 में Crowdstart के नाम से शुरू की; 2016 में हमने इसका नाम Hanzo रखा। हमारे पहले ग्राहक SKULLY ने Indiegogo पर लगभग 45 घंटों में $1 million जुटाए, जिसे TechCrunch ने Indiegogo पर सबसे तेज़ पूरी तरह वित्तपोषित अभियान कहा। मेरे हिसाब से Hanzo शुरू से AI-मूल वाणिज्य था: पहले अपना विश्लेषण, फिर ऐसे मॉडल जो प्लेटफ़ॉर्म की कंपनियों के डेटा से सीखते थे। 2017 में हम Techstars में शामिल हुए (उस जून की पोस्ट), और हमने कहा कि हम बुद्धिमान वाणिज्य बना रहे हैं।
2020 में Damon Motorcycles ने CES में लॉन्च किया और अभियान Hanzo चला रहा था। 30 दिनों में प्लेटफ़ॉर्म ने $15,532 के विज्ञापन खर्च पर $8.4M की मोटरसाइकिलें बेचीं, 541:1 का प्रतिफल। दर्शक हर 12 घंटे में हमारे ग्राहक डेटा से फिर बनाए जाते थे, और AI द्वारा लिखे विज्ञापन सेट को 36 घंटों के भीतर Facebook पर Above Average मिला। बाकी केस स्टडी में है।
वह बिक्री पक्ष की मशीनें थीं, जो खरीदने वाले दर्शक ढूँढती थीं और विज्ञापन लिखती थीं। खरीद पक्ष अगला है। वही लूप अब दूसरे छोर से चलेगा, और आपके कारोबार को कोई मशीन पढ़ेगी और भुगतान करेगी, या कोई मशीन उसे छोड़कर आगे बढ़ जाएगी।
अपने एजेंट को hanzo.ai/agents पर भेजिए।
और पढ़ें

Hanzo Payments: Unified Payment Processing for Global Commerce
Launching Hanzo Payments — unified payment processing with intelligent routing, fraud detection, and multi-currency support.

Introducing the Hanzo Platform
Crowdstart evolves into Hanzo: a complete commerce platform for the modern era.

राउटर ही रजिस्ट्री है
Hanzo Cloud में कोई चेक-इन OpenAPI फ़ाइल नहीं है। जीवित मार्ग तालिका ही स्रोत है, तीन तरह से प्रक्षेपित, और यदि कोई प्रक्षेपण बहक जाए तो एकैकी आच्छादन परीक्षण बिल्ड को गिरा देता है। 963 पथों पर 1,362 संक्रियाएँ, अनुरोध के समय प्रत्येक प्रक्रिया के लिए उत्पन्न।
