Zum Hauptinhalt springen
ZAHLUNGS-API

Eine Zahlungs-API, die für KI-Agenten-Code entwickelt wurde.

Eine kleine REST API. Signierte Webhooks. Offizielle SDKs in fünf Sprachen. Entwickelt, damit Ihr Agent USDC senden und abwickeln und Zahlungen in wenigen Zeilen Code überprüfen kann.

Transaktionsansicht: eingehende USDC-Zahlungen, die auf Base bestätigt wurden.

Die Blockchain0x API ist absichtlich klein. Wir möchten nicht, dass Sie eine Stunde Dokumentation lesen, um Ihre erste Zahlung zu tätigen. Wir möchten, dass Sie einen Code-Schnipsel kopieren, Ihren API-Schlüssel einfügen und ihn ausführen.

DIE KERN-ENDPOINTS

Eine kleine Oberfläche, die für Agentencode erstellt wurde.

Die zahlungsbezogenen Routen sind unten aufgeführt. Webhooks, API-Schlüssel und nur lesbare Ausgabenberechtigungen runden die Oberfläche ab; das SDK wickelt alles ab.

POST/v1/paymentsSenden Sie eine USDC-Zahlung von einer Agenten-Wallet
GET/v1/transactions/{id}Rufen Sie den Status und den Hash einer Transaktion ab
POST/v1/payment-requests/{id}/settleEine Rechnung mit On-Chain-Beweis abwickeln
GET/v1/agents/{id}Rufen Sie eine Agenten-Wallet ab
POST/v1/agentsAgenten-Wallet erstellen
DIE GELIEFERTEN WEBHOOK-EREIGNISSE

Alle mit HMAC-SHA256 signiert.

Unterschrift in der X-Blockchain0x-Signature Header. Replay-Fenster von 5 Minuten. Idempotenzschlüssel bei jedem POST.

payment.received

USDC ist in einer Ihrer Agenten-Wallets angekommen.

payment.sent

eine ausgehende Zahlung von Ihrem Agenten wurde on-chain abgeschlossen

wallet.deployed

die Smart Wallet eines Agenten wurde bereitgestellt

webhook.test

eine Testlieferung, die Sie vom Dashboard aus ausgelöst haben

EIN PAAR ZEILEN

Senden Sie USDC von der Wallet Ihres Agenten.

PYTHON
from blockchain0x import Client

client = Client(api_key="sk_test_...")  # sk_test_ testnet, sk_live_ mainnet
tx = client.payments.create(body={
    "agentId": "agt_123",
    "to": "0xRecipient",
    "amountWei": "10000",  # USDC base units (6 decimals): 0.01 USDC
})
print(tx)  # may return 503 until the chain adapter is wired for your network
OFFIZIELLE SDKs

Typisierte Clients für TypeScript und Python.

TYPESCRIPT
npm install @blockchain0x/node

Funktioniert mit Node 18+. Native TypeScript-Typen.

PYTHON
pip install blockchain0x

Python 3.9+. Sync- und asynchrone Clients.

VOLLE ENDPOINT-SCHEMAS

Die Anforderungsinhalte, die das SDK umschließt.

Dies sind die verifizierten Eingaben für jede Route. Antworten werden hier kurz angezeigt; die vollständigen typisierten Formen befinden sich im SDK und in der API-Referenz. Beträge sind USDC-Basiseinheiten (6 Dezimalstellen).

POST/v1/payments

Senden Sie eine USDC-Zahlung (payments.create). amountWei sind USDC-Basiseinheiten (6 Dezimalstellen). Kann 503 zurückgeben, bis der Chain-Adapter verbunden ist.

ANFRAGE
{
  "agentId": "agt_123",
  "to": "0xRecipient",
  "amountWei": "10000",
  "metadata": { "reason": "Research report" }
}
ANTWORT
{
  "txHash": "0xff5...e12"
}
POST/v1/payment-requests/{id}/settle

Setzen Sie eine Zahlungsanforderung (Rechnung) um, die im Dashboard erstellt wurde, mit On-Chain-Beweis (paymentRequests.settle). Es gibt keinen Erstellungsweg - nur abwickeln.

ANFRAGE
{
  "txHash": "0xff5...e12",
  "payerAddress": "0xBuyer...",
  "amountUsdcVerified": "0.10"
}
ANTWORT
{
  "txHash": "0xff5...e12"
}
GET/v1/transactions/{id}

Rufen Sie eine einzelne Transaktion nach ID ab (transactions.get).

ANFRAGE
(no body)
ANTWORT
{
  "id": "tx_01J9...",
  "txHash": "0xff5...e12"
}
GET/v1/agents/{id}

Rufen Sie eine Agenten-Wallet ab (agents.get). Ihre öffentliche Seite befindet sich unter wallet.blockchain0x.com/a/{slug}.

ANFRAGE
(no body)
ANTWORT
{
  "id": "agt_01J9QKE...",
  "name": "research-bot",
  "public_url": "https://wallet.blockchain0x.com/a/research-bot"
}
GET/v1/agents/{id}/spend-permissions

Lesen Sie die Ausgabenberechtigungen eines Agenten. NUR-LESEN über die API - Erstellung und Änderungen sind nur im Dashboard möglich.

ANFRAGE
(no body)
ANTWORT
{
  "allowance_wei": "5000000",
  "per_tx_wei": "1000000",
  "period_seconds": 86400,
  "start_at": "2026-05-15T00:00:00Z",
  "revoked_at": null
}
WEBHOOK-SIGNATURVERIFIZIERUNG

Überprüfen Sie immer die Signatur, bevor Sie der Nutzlast vertrauen.

Jeder kann an Ihre Callback-URL POSTEN. Die Signatur beweist, dass das Ereignis tatsächlich von uns stammt.

Jede Lieferung trägt ein X-Blockchain0x-Signature header (t=<unix>,v1=<hex>) - ein HMAC-SHA256 über den String `${t}.${rawBody}` mit Ihrem Webhook-Geheimnis, innerhalb eines 5-minütigen Replay-Fensters. In Node erledigt webhooks.verify von @blockchain0x/node dies und gibt eine diskriminierte Vereinigung zurück, auf der Sie verzweigen. In anderen Sprachen berechnen Sie dasselbe HMAC und vergleichen Sie in konstanter Zeit. Lesen Sie den RAW-Körper, nicht eine geparste Kopie - das erneute Serialisieren bricht die Signatur.

TYPESCRIPT (NODE + 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 });
  // result.eventType is "payment.received" | "payment.sent" | ...
  handleEvent(result);
  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 receive():
    raw = request.get_data()  # RAW bytes - do not parse first
    sig = request.headers.get("X-Blockchain0x-Signature", "")
    ts = request.headers.get("X-Blockchain0x-Timestamp", "")
    # Header is "t=<unix>,v1=<hex>"; some proxies send bare hex + the ts header.
    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)
    handle_event(request.headers.get("X-Blockchain0x-Event-Type"), request.get_json())
    return "ok", 200

Das Webhook-Geheimnis wird einmal zurückgegeben, wenn Sie das Webhook erstellen oder rotieren (webhooks.rotateSecret), und BLOCKCHAIN0X_WEBHOOK_SECRET ist der Ort, an dem Ihr Handler es liest. Das Rotieren macht das alte Geheimnis ungültig, also koordinieren Sie die Bereitstellung: Setzen Sie das neue Geheimnis in der Umgebung Ihres Servers, implementieren Sie es und rotieren Sie dann. Die ausgelieferten Ereignisse sind payment.received, payment.sent, wallet.deployed und webhook.test - verzweigen Sie sich nach dem Ereignistyp, ignorieren Sie den Rest.

IDEMPOTENZ

Sicher erneut versuchen. Die API wird nicht zweimal zahlen.

Agentencode-Wiederholungen. Netzwerke trennen Verbindungen. LLMs entscheiden sich, das Tool zweimal aufzurufen. Um dies sicher zu machen, senden Sie ein Idempotency-Key header im POST. payments.create im SDK mintet automatisch einen stabilen für Sie, sodass ein wiederholter Aufruf auf eine einzige On-Chain-Übermittlung zusammenfällt, anstatt zweimal zu zahlen. Überschreiben Sie es mit Ihrem eigenen Schlüssel, wenn Sie die gleiche logische Operation über Prozesse hinweg deduplizieren möchten.

BASH
curl -X POST https://api.blockchain0x.com/v1/payments \
  -H "Authorization: Bearer $BLOCKCHAIN0X_API_KEY" \
  -H "Idempotency-Key: 8e2c3a40-pay-vendor-once" \
  -H "Content-Type: application/json" \
  -d '{ "agentId": "agt_123", "to": "0xRecipient", "amountWei": "10000" }'
  • Erster Anruf: reicht die Zahlung ein, gibt die Transaktion zurück.
  • Erneut versuchen mit dem gleichen Schlüssel: fällt auf eine On-Chain-Einreichung zusammen, anstatt zweimal zu zahlen.
  • Das SDK kümmert sich darum: payments.create mintet automatisch einen stabilen Idempotency-Key, sodass ein wiederholter Aufruf sofort sicher ist.
  • Überschreiben Sie es: geben Sie Ihren eigenen Schlüssel an, wenn Sie dieselbe logische Operation über Prozesse hinweg deduplizieren möchten.

Das empfohlene Muster besteht darin, für jede logische Operation in Ihrem Agenten-Code eine UUID zu generieren (z. B. eine UUID pro "Zahlung an Anbieter X für Bestellung Y") und sie über Wiederholungen hinweg wiederzuverwenden, bis die Operation erfolgreich ist. Die offiziellen SDKs generieren automatisch eine für payments.create, wenn Sie sie nicht angeben.

RATENLIMITS

Lesen Sie Ihr Limit aus der Antwort, nicht aus einer Tabelle.

Grenzen skalieren mit Ihrem Plan. Anstatt Zahlen hart zu kodieren, die abweichen, sagt Ihnen jede Antwort, wo Sie stehen, und die SDKs kümmern sich um das Zurücksetzen für Sie.

Header bei jeder Erfolgsantwort

  • X-RateLimit-Limit: der feste Satz Ihres Plans
  • X-RateLimit-Remaining: wie viele Anrufe in diesem Fenster verbleiben
  • X-RateLimit-Reset: Unix-Sekunden, wenn das Fenster zurückgesetzt wird

Wenn Sie die Obergrenze erreichen (HTTP 429)

  • Antwort beinhaltet Retry-After in Sekunden
  • Die offiziellen SDKs versuchen es bei 429 und 5xx mit exponentiellem Backoff erneut und beachten Retry-After
  • Der größte Teil des Codes behandelt 429 nie manuell, da das SDK dies bereits tut
X402-KOMPATIBILITÄT

Spricht x402 fließend. Funktioniert auch ohne.

x402 ist das offene Protokoll für HTTP-native Zahlungen. Die Prämisse: Jede API, die 402 Payment Required zurückgibt, kann Zahlungsanforderungen in der Antwort angeben, und jeder Client, der die Spezifikation versteht, kann zahlen und erneut versuchen - keine Anmeldung, kein API-Schlüssel, keine außerbandliche Verhandlung. Blockchain0x liefert echte x402-Pakete: einen Zahlungskunden und Empfangsserveradapter. Das einzige Schema heute ist exact-usdc, auf Base.

DER 402, DEN EIN SERVER ZURÜCKGIBT, WENN EIN ANRUFER NICHT BEZAHLT HAT
HTTP/1.1 402 Payment Required
Content-Type: application/json

{
  "version": 1,
  "resource": "https://api.example.com/paid-endpoint",
  "accepts": [
    { "scheme": "exact-usdc", "network": "eip155:8453" }
  ]
}

Was der Agentenaufrufer tut

  1. Liest den 402-Body: Version 1, die Resource und ein nicht-leeres accepts[] mit Zahlungsanforderungen (scheme exact-usdc, network eip155:8453 für Base).
  2. Erstellt eine Zahlung und sendet die Anfrage mit einem X-Payment: exact-usdc:<base64(json)>-Header erneut.
  3. Auf der Zahlungsseite erledigt `createX402Client({ sdk })` aus `@blockchain0x/x402` das für Sie - es beantwortet 402s automatisch.
  4. Ihr Server überprüft den X-Payment-Header und führt die ursprüngliche Anfrage aus.

Beide Seiten, echte Pakete

Auf der Zahlungsseite, createX402Client({ sdk }) von @blockchain0x/x402 umschließt fetch und beantwortet 402s automatisch. Auf der Empfangsseite, createX402Plugin (Fastify) und createX402Middleware (Express) gate your own endpoints. Oder überspringen Sie x402 und verwenden Sie die REST API direkt - die beiden ergänzen sich, sodass Sie x402 hinzufügen können, wenn Sie bereit sind.

HÄUFIG GESTELLTE FRAGEN

Fünf API-Fragen, die Entwickler zuerst stellen.

Kann ich die API ohne das SDK verwenden?

Ja. Die SDKs sind dünne Wrapper um Standard-JSON über HTTPS mit Bearer-Token-Auth. Alles, was HTTP und HMAC-SHA256 sprechen kann, kann die API direkt verwenden. Die SDKs existieren für ergonomisches Tippen, Wiederholungen und die Generierung von Idempotenzschlüsseln; sie sind praktisch, aber nicht erforderlich. Wir liefern Clients für Node, Python, Ruby, Go und JVM; in jeder anderen Sprache rufen Sie die rohe API auf.

Was passiert, wenn mein Webhook-Endpunkt ausgefallen ist, wenn ein Ereignis ausgelöst wird?

Lieferungen versuchen es erneut mit Backoff, und jeder Versuch wird im Dashboard mit seinem HTTP-Antwortcode protokolliert. Wenn Sie ein Ereignis verpassen, können Sie es über die API abgleichen - holen Sie die Transaktion nach ID mit GET /v1/transactions/{id} - anstatt sich nur auf den Webhook zu verlassen. Überprüfen Sie jede Lieferung mit webhooks.verify (oder dem dokumentierten HMAC), bevor Sie ihr vertrauen, und antworten Sie schnell mit 2xx, damit ein langsamer Handler nicht wie ein Fehler aussieht.

Wie verhindere ich doppelte Zahlungen, wenn mein Agent bei Netzwerkfehlern erneut versucht?

Senden Sie einen Idempotency-Key-Header bei der POST-Anfrage. payments.create im SDK mintet automatisch einen stabilen für Sie, sodass ein wiederholter Aufruf auf eine einzige On-Chain-Einreichung zusammenfällt, anstatt zweimal zu zahlen. Überschreiben Sie ihn mit Ihrem eigenen Schlüssel, wenn Sie die gleiche logische Operation über Prozesse hinweg deduplizieren möchten. Der Schlüssel ist das Sicherheitsnetz für genau den Fall, dass Ihr Agent oder das Netzwerk während des Flugs erneut versucht.

Gibt es ein Ratenlimit?

Ja, und es skaliert mit Ihrem Plan. Anstatt Zahlen, die abweichen, hart zu kodieren, lesen Sie sie aus der Antwort: jeder Anruf gibt X-RateLimit-Limit, X-RateLimit-Remaining und X-RateLimit-Reset zurück, und ein 429 enthält Retry-After in Sekunden. Die offiziellen SDKs versuchen bereits bei 429 und 5xx mit exponentiellem Backoff und respektieren Retry-After, sodass der Großteil des Codes dies nie manuell behandeln muss.

Ist dies x402-kompatibel?

Ja. Die x402-Pakete sind echt: createX402Client({ sdk }) von @blockchain0x/x402 beantwortet 402-Herausforderungen auf der Zahlungsseite, und createX402Plugin (Fastify) / createX402Middleware (Express) sichern Ihre eigenen Endpunkte auf der Empfangsseite. Das einzige Schema heute ist exact-usdc, und das Drahtformat ist ein X-Payment: exact-usdc:<base64(json)> Anforderungsheader gegen eine 402, deren Körper Version 1 und eine accepts[]-Liste bewirbt. Sie können auch x402 ignorieren und einfach die REST-API direkt verwenden.

Versenden Sie Ihre erste Zahlung.

Kostenlos starten. Ein paar Zeilen vom API-Schlüssel bis zu Ihrer ersten USDC-Überweisung auf Base.