Zum Hauptinhalt springen
LernenLeitfädenFügen Sie Zahlungen zu Ihrem AI-Agenten hinzu
LEITFADEN

So fügen Sie Zahlungen zu Ihrem KI-Agenten hinzu.

10 minutes
KURZE ANTWORT

Erstellen Sie einen Agenten mit createClient von @blockchain0x/node (oder dem Python-Client), senden Sie eine USDC-Zahlung mit payments.create und überprüfen Sie den signierten Webhook mit webhooks.verify. Ausgabensteuerungen werden im Dashboard festgelegt und sind über die API nur lesbar. Der Agent berührt niemals direkt private Schlüssel. Unter zehn Minuten von der Anmeldung bis zu Ihrer ersten USDC-Zahlung auf Base, in TypeScript oder Python.

VORAUSSETZUNGEN

Bevor Sie beginnen.

  • Ein Blockchain0x-Konto (kostenlose Anmeldung).
  • Ein API-Schlüssel aus dem Dashboard (verwenden Sie einen sk_test_ Schlüssel für diesen Leitfaden; Sie werden später zu sk_live_ wechseln).
  • Node.js 20+ oder Python 3.11+ in Ihrer Agentenlaufzeit.
  • Ein Agent, der auf jedem Framework basiert - LangChain, CrewAI, AutoGen, LlamaIndex, OpenAI Agents SDK, MCP oder einfachem SDK-Code. Die Anweisungen sind frameworkunabhängig.
  • Ein HTTPS-Endpunkt, der über das öffentliche Internet erreichbar ist, um Webhooks zu empfangen (ngrok oder eine Bereitstellungsvorschau ist für die Entwicklung in Ordnung).
SCHRITT 1 VON 5

Erstellen Sie das Agentenprofil.

Das Agentenprofil ist die adressierbare Identität hinter jeder Zahlung, die Ihr Agent sendet oder empfängt. Es enthält die Wallet-Adresse, die öffentliche Seite, die Verifizierungsabzeichen und (später) die Ausgabenrichtlinie. Erstellen Sie eins pro logischen Agenten.

TypeScript
import { createClient } from "@blockchain0x/node";

const client = createClient({ apiKey: process.env.BLOCKCHAIN0X_API_KEY! }); // sk_test_ / sk_live_

const agent = await client.agents.create({ name: "research-bot" });

console.log(agent.id); // "agt_..."
// Public page: https://wallet.blockchain0x.com/a/{slug}
Python
from blockchain0x import Client

client = Client()  # reads BLOCKCHAIN0X_API_KEY from the environment

agent = client.agents.create(body={"name": "research-bot"})

print(agent["id"])  # "agt_..."
# Public page: https://wallet.blockchain0x.com/a/{slug}

After this call, the agent has a public page at https://wallet.blockchain0x.com/a/<slug> that any counterparty (human or agent) can hover for verification info. See the agent payment identity glossary entry for what that page exposes.

SCHRITT 2 VON 5

Zahlung senden.

payments.create sends USDC from the agent wallet. amountWei is base units (USDC has 6 decimals), so 0.01 USDC is the string "10000". The SDK auto-stamps an Idempotency-Key, and the call can return 503 until the chain adapter is wired for your network. To RECEIVE instead, settle an invoice you created in the dashboard with paymentRequests.settle - see the payment API page.

TypeScript
// Send a USDC payment from the agent wallet. amountWei is base units
// (USDC has 6 decimals): "10000" is 0.01 USDC. payments.create auto-stamps an
// Idempotency-Key and can return 503 until the chain adapter is wired.
const tx = await client.payments.create({
  agentId: agent.id,
  to: "0xRecipient",
  amountWei: "10000",
});

console.log(tx); // the submitted transfer
Python
# amountWei is USDC base units (6 decimals): "10000" is 0.01 USDC.
tx = client.payments.create(body={
    "agentId": agent["id"],
    "to": "0xRecipient",
    "amountWei": "10000",
})

print(tx)  # the submitted transfer
SCHRITT 3 VON 5

Verarbeiten Sie den Webhook.

Webhooks sind, wie Sie erfahren, dass eine Zahlung abgeschlossen ist. In Node führt webhooks.verify von @blockchain0x/node die HMAC-Überprüfung durch und gibt eine diskriminierte Vereinigung zurück; in anderen Sprachen berechnen Sie dasselbe HMAC über den Rohkörper. Branch auf den Ereignistyp (payment.received für eingehend), antworten Sie schnell mit 2xx und stellen Sie alles Schwerere hinter die 2xx, damit die Lieferung nicht zeitlich abläuft.

TypeScript (Express)
import express from "express";
import { webhooks } from "@blockchain0x/node";

const app = express();
// Capture the RAW body. The HMAC is over the exact bytes on the wire.
app.use(express.raw({ type: "application/json" }));

app.post("/webhooks/payment", (req, res) => {
  const result = webhooks.verify({
    headers: req.headers,
    rawBody: req.body, // Buffer, raw bytes
    secret: process.env.BLOCKCHAIN0X_WEBHOOK_SECRET!,
  });
  if (!result.ok) return res.status(400).json({ code: result.code });

  if (result.eventType === "payment.received") {
    // USDC landed - deliver the work, fulfil the order, etc.
    void deliver(result.eventId);
  }
  res.status(200).send("ok");
});
Python (Flask)
import hmac, hashlib, os, time
from flask import Flask, request, abort

app = Flask(__name__)
SECRET = os.environ["BLOCKCHAIN0X_WEBHOOK_SECRET"].encode()

@app.post("/webhooks/payment")
def webhook():
    raw = request.get_data()  # RAW bytes - do not parse first
    sig = request.headers.get("X-Blockchain0x-Signature", "")
    ts = request.headers.get("X-Blockchain0x-Timestamp", "")
    parts = dict(p.split("=", 1) for p in sig.split(",") if "=" in p)
    t, v1 = parts.get("t", ts), parts.get("v1", sig)
    want = hmac.new(SECRET, t.encode() + b"." + raw, hashlib.sha256).hexdigest()
    if not hmac.compare_digest(want, v1) or abs(time.time() - int(t)) > 300:
        abort(401)
    if request.headers.get("X-Blockchain0x-Event-Type") == "payment.received":
        deliver(request.get_json())  # USDC landed
    return ("ok", 200)
SCHRITT 4 VON 5

Setzen Sie Ausgabensteuerungen im Dashboard.

Wenn Ihr Agent nur empfängt, können Sie dies überspringen. Wenn er auch bezahlt, setzen Sie eine Ausgabenberechtigung - eine Zulage pro Zeitraum und eine Obergrenze pro Transaktion - im Dashboard. Es wird vom Backend bei jeder Zahlung durchgesetzt, sodass es eine Eingabeaufforderung-Injektion übersteht, auf die agentenseitige Regeln niemals reagieren können. Es gibt keinen API- oder SDK-Aufruf, der eine Berechtigung ändert (der eigene Schlüssel des Agenten kann sein Limit nicht erweitern); die API ist schreibgeschützt, sodass Ihr Code die aktuellen Werte abrufen kann, um sie anzuzeigen oder zu planen.

Lesen (curl)
curl https://api.blockchain0x.com/v1/agents/agt_123/spend-permissions \
  -H "Authorization: Bearer $BLOCKCHAIN0X_API_KEY"
Antwort
{
  "allowance_wei": "5000000",
  "per_tx_wei": "1000000",
  "period_seconds": 86400,
  "revoked_at": null
}
SCHRITT 5 VON 5

Testen Sie den gesamten Ablauf auf Base Sepolia.

Bevor Sie zu sk_live_-Schlüsseln wechseln, führen Sie den gesamten Pfad von Anfang bis Ende mit sk_test_ aus. Ein Testschlüssel hält alles auf Base Sepolia, wo Sie die Wallet aus dem öffentlichen Wasserhahn finanzieren und die Antwortformen mit der Live-Version übereinstimmen. Das Schlüsselpräfix wählt das Netzwerk aus, sodass ein Testschlüssel keine Hauptnetzmittel bewegen kann.

Üben Sie drei Szenarien: eine Happy-Path-Zahlung, die payment.received auslöst, eine verpasste Lieferung (weisen Sie den Webhook auf eine tote URL, und versöhnen Sie sich, indem Sie die Transaktion mit transactions.get abrufen), und einen Webhook-Wiederholungsversuch (geben Sie beim ersten Mal 500 zurück, beim zweiten Mal 200, und bestätigen Sie, dass Ihr Handler idempotent ist). Wenn alle drei Tests bestehen, wechseln Sie den Schlüssel und versenden Sie.

HÄUFIGE FALLSTRICK

Fünf Fehler, die Teams eine Woche kosten.

Überspringen der Überprüfung der Webhook-Signatur

Wenn Sie einen POST an /webhooks/payment als autoritativ akzeptieren, kann ein Angreifer gefälschte Zahlungsereignisse erstellen und Ihren Agenten dazu bringen, Arbeiten kostenlos zu liefern. Überprüfen Sie immer mit HMAC das Webhook-Geheimnis, indem Sie einen konstanten Zeitvergleich verwenden. Der erste Kompromiss ist fast immer die fehlende Überprüfung.

Annahme eines separaten Bestätigungsereignisses

Die gelieferten Ereignisse sind payment.received, payment.sent, wallet.deployed und webhook.test - es gibt kein separates Bestätigungsereignis. payment.received wird ausgelöst, wenn die Überweisung in einem Block ist. Für die meisten Arbeiten ist das Ihr Signal zur Lieferung. Für etwas Teures oder Irreversibles, rufen Sie die Transaktion mit transactions.get ab und wenden Sie Ihre eigene Bestätigungsgrenze an, bevor Sie handeln; warten Sie nicht auf ein Ereignis, das nicht existiert.

Keine Idempotenz bei Webhook-Handlern

Webhooks versuchen es bei Nicht-2xx-Antworten erneut, und dasselbe Ereignis wird unter Last mehrfach ankommen. Ihr Handler muss idempotent sein: Halten Sie eine kleine Tabelle von Ereignis-IDs, die Sie bereits verarbeitet haben, und überspringen Sie Duplikate. Andernfalls wird ein vorübergehender Aussetzer die gleiche Arbeit zweimal ausliefern und Sie werden Stunden mit dem Debuggen doppelter Erfüllungen verbringen.

Test- und Live-API-Schlüssel mischen

Testschlüssel (sk_test_) treffen die Sandbox und verwenden Base Sepolia; Live-Schlüssel (sk_live_) treffen die Produktion und verwenden das Base-Mainnet. Das Mischen in den Umgebungs-Konfigurationen ist die Ursache für die meisten 'funktioniert in der Entwicklung, schlägt in der Produktion fehl'-Tickets. Hard-Fail beim Start, wenn Ihre Laufzeitumgebung und der Schlüsselpräfix nicht übereinstimmen.

Ein fehlendes Webhook als fehlgeschlagene Zahlung behandeln.

Es gibt kein Fehlerereignis, und ein Webhook kann verpasst werden (Ihr Endpunkt war nicht erreichbar, eine Lieferung wurde abgebrochen). Lassen Sie den Agenten nicht in einer 'Warten auf Gelder'-Schleife stecken. Versöhnen Sie sich: Rufen Sie die Transaktion mit transactions.get ab, um den tatsächlichen Zustand zu erfahren, und setzen Sie ein Zeitlimit für jeden wartenden Fluss, damit eine aufgegebene Zahlung gehaltene Ressourcen freigibt, anstatt für immer zu hängen.

NÄCHSTE SCHRITTE

Sobald du deine erste Zahlung hast.

Mit funktionierenden Grundzahlungen sind die Folgemaßnahmen, die sich am meisten auszahlen, Ausgabensteuerungen (damit der Agent nicht mit dem Budget davonläuft), Webhook-Robustheit (damit Zahlungen unter Last nicht stillschweigend abgebrochen werden) und Identitätsüberprüfung (damit Gegenparteien der öffentlichen Seite des Agenten vertrauen).

Die vollständige API-Referenz befindet sich unter docs.blockchain0x.com. Produktoberfläche für dieselben APIs: Payment API.

Letzte Überprüfung: 2026-05-15. Veröffentlicht unter CC BY 4.0.

Ein POST und dein Agent wird bezahlt.

Kostenlos starten. Testschlüssel enthalten. Erste Zahlung innerhalb von zehn Minuten bestätigt.