Gabung beta Hanzo dan dapatkan diskon 50% untuk setiap paket berbayar

Menyiapkan perdagangan headless untuk era LLM yang bertindak sebagai agen

Pembeli berubah menjadi agen. Apa yang diperlukan agar sebuah bisnis dapat dibaca, ditandatangani, dan dibayar oleh LLM tanpa manusia di dalam lingkaran, dan apa yang Hanzo sediakan untuk itu hari ini.

Di halaman ini

Perdagangan headless memisahkan etalase dari mesinnya, supaya ujung depan mana pun dapat berjualan lewat satu API. Ujung depan itu selalu sesuatu yang dilihat orang: situs, aplikasi, atau kios.

Ujung depan berikutnya tidak melihat. Ia membaca. Pembeli sedang menjadi agen: program dengan tujuan, anggaran, dan lingkar alat, yang dikirim untuk mencari paket, GPU, atau API pembayaran. Ia membeli dari siapa pun yang dapat ia pahami dan bayar tanpa meminta bantuan manusia. Jika bisnis Anda membutuhkan orang untuk membaca halaman, menutup spanduk cookie, membuka surel konfirmasi, atau mengetik nomor kartu, agen mengambil hasil berikutnya.

Itulah tesisnya. Sebuah bisnis harus dapat dibaca dan ditransaksikan oleh LLM tanpa manusia di dalam lingkaran. Dapat dibaca berarti agen dapat mengetahui apa yang Anda jual, berapa harganya, dan bagaimana memulai. Dapat ditransaksikan berarti agen dapat memulai, membayar, dan menerima barangnya lewat API, sendiri.

Inilah yang diperlukan, poin demi poin, beserta apa yang Hanzo sediakan hari ini. Setiap alamat di bawah menjawab tanpa akun, jadi Anda dapat memeriksa sendiri setiap klaim.

Sajikan setiap halaman sebagai Markdown

Agen membayar setiap token yang ia baca. Di hanzo.ai, tambahkan .md pada alamat halaman dan Anda mendapat halaman itu sebagai Markdown: hanzo.ai/pricing.md, hanzo.ai/about.md. Setiap halaman menamai kembarannya di kepala dengan <link rel="alternate" type="text/markdown">, jadi agen tidak perlu menebak.

Pada 26 Oktober saya mengambil halaman agen kami dengan dua cara: 528,810 bita sebagai HTML, 17,465 sebagai Markdown. Lalu saya mengambil setiap URL kedua belas di peta situs, 70 dari 829, dan meminta kembarannya. Ketujuh puluh kembali 200 sebagai text/markdown.

Terbitkan indeks yang dapat menjadi titik mulai agen

Agen yang belum pernah mendengar tentang Anda membutuhkan satu alamat yang mengarah ke mana-mana. Kami menerbitkan tiga.

  • hanzo.ai/llms.txt adalah peta teks biasa dari situs. Ia menjelaskan apa itu Hanzo, lalu memberi bagian "For agents" dengan langkah persis untuk mendapat kunci, lalu mencantumkan halaman, satu baris masing-masing. docs.hanzo.ai/llms.txt melakukan hal yang sama untuk dokumentasi.

  • api.hanzo.ai/v1 mencantumkan setiap kemampuan yang dilayani API, tanpa kunci, dan api.hanzo.ai/v1/openapi.json memuat setiap operasi beserta skemanya. Untuk penjualan, indeks menyertakan kemampuan commerce: checkout, langganan, faktur, webhook pembayaran, dan katalog etalase.

  • hanzo.ai/.well-known/api-catalog adalah tempat standar (RFC 9727) yang pertama dilihat klien. Ia menunjuk ke dokumen OpenAPI, dokumentasi, dan halaman status.

Sambut perayap dengan sengaja

robots.txt adalah berkas pertama yang diminta perayap mana pun. Milik kami menyebut dua belas perayap AI satu per satu, di antaranya GPTBot, ClaudeBot, Claude-User, PerplexityBot, dan Google-Extended, lalu mengizinkan mereka. Mereka mendapat pengecualian yang sama dengan yang lain: masuk, akun, bayar, dan jalur API.

Memblokir perayap AI adalah pilihan yang sah. Memblokir mereka karena pengaturan bawaan berkata begitu bukan pilihan sama sekali.

Jadikan harga sebuah titik data

Agen membandingkan. Harga di dalam gambar, atau di balik tombol "hubungi kami", tidak dapat dibandingkan. api.hanzo.ai/v1/billing/plans tidak memerlukan kunci dan mengembalikan JSON: Free pada 0, Pro pada 2000 sebulan, Team pada 2500 per kursi, dengan batas tiap paket di sampingnya. Jumlahnya dalam sen.

Biarkan dompet mendaftar

Agen tidak punya kotak masuk, telepon, atau kartu. Ia punya pasangan kunci. Maka hanzo.id memasukkan dompet: minta nonce sekali pakai untuk alamat dompet, tandatangani pesan yang dijelaskan, kirim tanda tangan, dan tukar kode yang kembali dengan token.

Dompet yang belum pernah dilihat Hanzo mendapat akunnya sendiri dan organisasinya sendiri, dengan dompet sebagai admin, pada paket Free. Token bertahan tujuh hari. Tidak ada yang membuka surel atau menyetujui perangkat.

Satu panggilan untuk kunci, dan jatah kecil untuk mencoba

Dengan token itu, POST /v1/account/keys mengembalikan kunci sk-live- yang hidup lebih lama darinya. Simpan; dokumentasi mengatakan kunci itu ditampilkan sekali.

Paket Free adalah 50 permintaan sehari pada zen-free, tanpa kartu, dan setiap respons menyebut sisa di x-ratelimit-remaining. Panggilan pertama saya menjawab 200 dengan 49 tersisa.

Terima pembayaran tanpa manusia: stablecoin lewat API

POST /v1/billing/crypto/deposit menerima sebuah rantai, sebuah token, dan sebuah jumlah, lalu mengembalikan alamat setoran yang berlaku 24 jam. GET /v1/billing/crypto/options mencantumkan apa yang diterima: rantai Base, Ethereum, dan Solana, serta token USDC dan USDT.

Saya berhenti di alamat itu dan tidak mengirim uang. Bahwa saldo dikreditkan saat rantai mengonfirmasi adalah apa yang dikatakan dokumentasi kami, bukan sesuatu yang saya jalankan. Paket dan langganan tetap checkout kartu di peramban. Yang dibutuhkan agen dari kami adalah saldo, dan saldo punya API.

Seluruh alur, dalam satu berkas

Ini hanzo.ai/agents#headless, diringkas. Setiap baris sebagaimana halaman itu mencetaknya; saya meninggalkan komentar kepala yang kedua, panggilan opsi, dan baris yang mencetak awalan kunci. Anda memerlukan Node 22.18 atau lebih baru dan npm i viem, lalu node headless.mts. Saya menjalankan blok ini di produksi dengan dompet baru: sebuah token, sebuah kunci, satu panggilan gratis, dan sebuah alamat setoran 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 akan datang, dan belum ada di sini

Di luar pengisian saldo, bentuk yang tepat bagi agen adalah bayar per permintaan. Server menjawab 402 Payment Required dengan harga, klien membayar dan mencoba lagi. Itulah x402. Ia belum hidup di API kami: belum ada titik akhir Hanzo yang menyebut harga dengan cara itu, jadi saya tidak akan mengklaimnya. Sampai itu terjadi, saldo yang diisi lewat API adalah cara agen membayar kami.

Mengapa nol kesalahan perayap itu penting

Tidak satu pun dari ini gagal dengan berisik. Agen yang mengikuti tautan dari peta situs Anda ke 404 tidak membuka tiket. Ia mengambil hasil berikutnya. Perlakukan kesalahan perayap seperti toko memperlakukan checkout yang rusak.

Saya mengambil 70 halaman sampel yang sama dengan string user-agent ClaudeBot dan sekali lagi dengan Googlebot. Setiap halaman menjawab 200 kedua kalinya. Itu sampel, bukan jaminan, dan string user-agent bukan alamat perayap itu sendiri, jadi saya tidak dapat menunjukkan apa yang dilihat perayap yang sebenarnya. Lakukan hal yang sama di situs Anda: ambil peta situs dengan agen yang Anda undang, dan hitung jawaban yang bukan 200.

Kita pernah di sini

Saya memulai perusahaan ini pada 2014, sebagai Crowdstart; kami menamainya Hanzo pada 2016. Pelanggan pertama kami, SKULLY, mengumpulkan $1 million di Indiegogo dalam sekitar 45 jam, yang disebut TechCrunch kampanye dengan pendanaan penuh tercepat di Indiegogo. Menurut saya Hanzo adalah perdagangan yang lahir dari AI sejak awal: analitik kami sendiri lebih dulu, lalu model yang belajar dari data perusahaan di platform. Pada 2017 kami bergabung dengan Techstars (pos dari Juni itu), dan yang kami katakan sedang kami bangun adalah perdagangan cerdas.

Pada 2020 Damon Motorcycles meluncur di CES dengan Hanzo menjalankan kampanye. Dalam 30 hari platform menjual sepeda motor senilai $8.4M dengan belanja iklan $15,532, imbal hasil 541:1. Audiens dibangun ulang dari data pelanggan kami setiap 12 jam, dan set iklan yang ditulis AI mendapat nilai Above Average di Facebook dalam 36 jam. Sisanya ada di studi kasus.

Itu mesin di sisi jual, mencari audiens yang membeli dan menulis iklan. Sisi beli berikutnya. Lingkar yang sama akan berjalan dari ujung yang lain, dan bisnis Anda akan dibaca serta dibayar oleh mesin, atau dilewati olehnya.

Arahkan agen Anda ke hanzo.ai/agents.

Komentar

Masuk dengan Hanzo ID untuk berkomentar.

Memuat komentar…

Baca selengkapnya