BazaarLinkBazaarLink
Anmelden
DokumentationAPI-ReferenzSDK-ReferenzAgentic-NutzungKI-Skills

OKX x402-Zahlungen: Agents registrieren und Guthaben laden

Mit x402 kann ein Client eine Anfrage mit Stablecoins bezahlen. BazaarLink akzeptiert x402-Zahlungen, die über den x402 facilitator von OKX auf X Layer abgewickelt werden, zur Registrierung eines Agent-Kontos und zum Laden eines vorhandenen Guthabens. Diese Seite beschreibt das genaue Verhalten der beiden Routen.

Der 402-Ablauf

Beide Routen folgen denselben drei Schritten: anfragen, signieren, erneut senden.

  1. Senden Sie die Anfrage ohne Zahlung. Der Server antwortet mit 402 Payment Required und einem JSON-Body mit x402Version, resource und accepts(network, asset, amount, payTo, maxTimeoutSeconds).
  2. Signieren Sie mit Ihrem eigenen Wallet-Schlüssel eine Zahlungsautorisierung für einen Eintrag in accepts.
  3. Senden Sie dieselbe Anfrage erneut und legen Sie das base64-kodierte Zahlungs-Payload in den X-PAYMENT-Header. Der Header payment-signature wird als Alias akzeptiert.
Anforderungen aus der Antwort lesen
Übernehmen Sie network, asset und amount aus der 402-Antwort, statt sie fest zu codieren. amount steht in der kleinsten Einheit des Assets(6 Dezimalstellen für USDT0). Senden Sie in beiden Anfragen denselben JSON-Body.

Einen Agent registrieren

POSThttps://bazaarlink.ai/api/v1/agents/register/x402

POST /api/v1/agents/register/x402 erstellt mit einer bezahlten Anfrage ein Agent-Konto, einen API key und ein Anfangsguthaben. Ein API key und eine Anmeldung sind nicht erforderlich.

Request-Body

nameerforderlich
string
Agent-Name, 1 bis 100 Zeichen.
description
string
Optionale Beschreibung, bis zu 4000 Zeichen.
amountUsderforderlich
number
Zu zahlender Betrag in US-Dollar, eine positive Zahl. Vor dem Aufbau von 402 wird er auf den zulässigen Bereich(aktuell $1 bis $50)begrenzt; verwenden Sie daher den Betrag aus der Antwort.

Unbekannte Felder werden mit 400 bad_request abgelehnt.

1. Ohne Zahlung anfragen

Die Antwort ist 402 mit den Zahlungsanforderungen. Es wird noch nichts erstellt.

curl -i -X POST https://bazaarlink.ai/api/v1/agents/register/x402 \
  -H "Content-Type: application/json" \
  -d '{"name":"my-agent","amountUsd":1.1}'
HTTP/1.1 402 Payment Required
Content-Type: application/json

{
  "x402Version": 2,
  "resource": {
    "url": "https://bazaarlink.ai/api/v1/agents/register/x402",
    "description": "BazaarLink paid agent registration",
    "mimeType": "application/json"
  },
  "accepts": [
    {
      "scheme": "exact",
      "network": "eip155:196",
      "payTo": "0xPAY_TO_ADDRESS",
      "asset": "0xASSET_CONTRACT",
      "amount": "1100000",
      "maxTimeoutSeconds": 300,
      "extra": { "name": "USD₮0", "version": "1" }
    }
  ]
}

2. Signieren und erneut senden

Signieren Sie mit Ihrem eigenen Wallet und senden Sie dieselbe Anfrage mit dem X-PAYMENT-Header. Der curl-Befehl zeigt die Anfrage; das TypeScript-Beispiel unten erzeugt den Header-Wert.

curl -i -X POST https://bazaarlink.ai/api/v1/agents/register/x402 \
  -H "Content-Type: application/json" \
  -H "X-PAYMENT: <base64 payment payload>" \
  -d '{"name":"my-agent","amountUsd":1.1}'

TypeScript-Beispiel

Dieses Beispiel verwendet die @okxweb3/x402-Clientpakete und viem; Sie können mit der OKX Wallet oder einem beliebigen Wallet-Schlüssel signieren. Der private Schlüssel bleibt auf Ihrem Rechner; nur die signierte Autorisierung wird gesendet.

import { x402Client } from "@okxweb3/x402-core/client";
import type { Network } from "@okxweb3/x402-core/types";
import { toClientEvmSigner } from "@okxweb3/x402-evm";
import { ExactEvmScheme } from "@okxweb3/x402-evm/exact/client";
import { privateKeyToAccount } from "viem/accounts";

const URL = "https://bazaarlink.ai/api/v1/agents/register/x402";
const HEADERS = { "content-type": "application/json" };
const BODY = JSON.stringify({ name: "my-agent", amountUsd: 1.1 });

// 1. Ask without paying. The 402 body lists what the server accepts.
const challenge = await fetch(URL, { method: "POST", headers: HEADERS, body: BODY });
if (challenge.status !== 402) throw new Error("unexpected status " + challenge.status);
const paymentRequired = await challenge.json();

// 2. Sign the payment authorization with your own wallet key.
const privateKey = readSecret("payer-private-key") as `0x${string}`; // from your own secret store, never from source code
const signer = toClientEvmSigner(privateKeyToAccount(privateKey));
const client = new x402Client().register(
  paymentRequired.accepts[0].network as Network,
  new ExactEvmScheme(signer),
);
const payload = await client.createPaymentPayload(paymentRequired);
const xPayment = Buffer.from(JSON.stringify(payload), "utf8").toString("base64");

// 3. Send the same request again with the signed payment.
const res = await fetch(URL, { method: "POST", headers: { ...HEADERS, "x-payment": xPayment }, body: BODY });
const account = await res.json(); // 201: api_key, credits, claim_token, payment ...
console.log(res.status, account.credits_usd);

Bewahren Sie den privaten Wallet-Schlüssel in einer Umgebungsvariable oder einem Secret Store auf, niemals im Quellcode.

Registrierungsantwort

Eine erfolgreiche Registrierung gibt 201 mit diesen Feldern zurück. Der API key wird nur hier einmal angezeigt; speichern Sie ihn sofort.

HTTP/1.1 201 Created
Content-Type: application/json

{
  "api_key": "sk-bl-...",
  "credits": 1,
  "credits_usd": "$1.0000",
  "claim_token": "...",
  "claim_expires": "2026-10-08T00:00:00.000Z",
  "upgrade_url": "https://bazaarlink.ai/claim?token=...",
  "referral_code": "...",
  "free_model": "auto:free",
  "message": "...",
  "referral_message": "...",
  "base_url": "https://bazaarlink.ai/api/v1",
  "docs": "https://bazaarlink.ai/llms.txt",
  "payment": {
    "txHash": "0xTX_HASH",
    "network": "eip155:196",
    "amountUsd": 1.1,
    "paidUsd": 1.1,
    "creditedUsd": 1,
    "serviceFeeUsd": 0.1
  }
}
api_key
string
Der neue API key.
credits
number
Gutgeschriebenes Guthaben in US-Dollar: gezahlter Betrag abzüglich der Plattform-Aufladegebühr.
credits_usd
string
Dasselbe Guthaben als formatierter String.
claim_token
string
Token, mit dem eine Person das Konto übernehmen kann.
claim_expires
string
Frist zur Kontoübernahme im Format ISO 8601.
upgrade_url
string
Übernahmelink für eine Person, der mit /claim?token= endet.
referral_code
string
Empfehlungscode des neuen Agent-Kontos.
free_model
string
Immer auto:free, das Modell ohne Guthaben.
message
string
Fertiger Text, den ein Agent seinem Besitzer anzeigen kann.
referral_message
string
Text zum Empfehlungscode.
base_url
string
API base URL für den neuen key.
docs
string
Maschinenlesbarer Einstieg in die Dokumentation.
payment
object
Objekt mit txHash, network und amountUsd der abgewickelten Zahlung sowie paidUsd, creditedUsd und serviceFeeUsd.

Vorhandenes Guthaben laden

POSThttps://bazaarlink.ai/api/x402/topup

POST /api/x402/topup lädt das Guthaben des Kontos, dem der API key oder die angemeldete session gehört. Der 402-Ablauf ist gleich; der Body enthält nur amountUsd.

Authentifizieren Sie sich mit Authorization: Bearer und Ihrem API key oder verwenden Sie eine angemeldete Browser-session.

curl -i -X POST https://bazaarlink.ai/api/x402/topup \
  -H "Authorization: Bearer $BAZAARLINK_API_KEY" \
  -H "Content-Type: application/json" \
  -H "X-PAYMENT: <base64 payment payload>" \
  -d '{"amountUsd":1.1}'

Eine erfolgreiche Aufladung liefert 200 mit status credited, dem neuen Guthaben in US-Dollar, dem txHash sowie paidUsd, creditedUsd und serviceFeeUsd (gezahlter Betrag, gutgeschriebener Betrag und Plattform-Aufladegebühr).

HTTP/1.1 200 OK
Content-Type: application/json

{
  "status": "credited",
  "balance": 12.5,
  "txHash": "0xTX_HASH",
  "paidUsd": 1.1,
  "creditedUsd": 1,
  "serviceFeeUsd": 0.1
}
// Same three steps against /api/x402/topup; only the URL, body and auth header change.
const URL = "https://bazaarlink.ai/api/x402/topup";
const HEADERS = {
  "content-type": "application/json",
  authorization: "Bearer " + process.env.BAZAARLINK_API_KEY,
};
const BODY = JSON.stringify({ amountUsd: 1.1 });
// ...reuse the challenge / sign / resend code from the registration example.
// 200 -> { "status": "credited", "balance": 12.5, "txHash": "0x...", "paidUsd": 1.1, "creditedUsd": 1, "serviceFeeUsd": 0.1 }

Aktuelle Grenzen lesen

GEThttps://bazaarlink.ai/api/x402/topup

GET /api/x402/topup gibt ohne Authentifizierung minUsd, maxUsd und network zurück.

curl https://bazaarlink.ai/api/x402/topup
{ "minUsd": 1, "maxUsd": 50, "network": "eip155:196" }

Doppelte und wiederholte Zahlungen

Eine signierte Autorisierung kann einmal verwendet werden. Der Server erkennt eine wiederholte Zahlung, bevor er das Zahlungsnetzwerk kontaktiert; ein erneuter Versuch belastet Sie daher nicht zweimal.

Aufladung: Das erneute Senden einer bereits gutgeschriebenen Zahlung gibt 200 mit status already_credited zurück.

Registrierung: 15 Minuten lang gibt dieselbe signierte Zahlung dieselbe 201-Antwort einschließlich API key zurück, sodass ein Netzwerkfehler sicher wiederholt werden kann. Danach kommt 200 mit status already_registered und dem Zahlungs-txHash; der API key wird nicht erneut angezeigt.

Fehlerantworten

Die x402-Routen geben Fehler als { "error": { "message", "code" } } zurück. Zwei Antworten weichen ab: 410 verwendet { "error", "code" }, 429 verwendet { "error" } mit einem Retry-After-Header.

HTTP
Fehlercode
Bedeutung
400bad_request
Der Body ist ungültig: falscher Typ, fehlender name oder ein unbekanntes Feld.
400topup_unavailable
Für dieses Konto ist keine Aufladung möglich.
401unauthenticated
Nur Aufladung: kein gültiger API key oder keine gültige session.
402(payment requirements body)
Noch keine nutzbare Zahlung. Der Body enthält die Anforderungen; signieren und erneut senden. Auch bei abweichenden Anforderungen oder fehlgeschlagener Prüfung wird dieser Fehler zurückgegeben.
402payment_amount_too_low
Der verbuchte Betrag ist niedriger als der angeforderte Betrag.
403geo_blocked
x402 kann in Ihrer Region nicht genutzt werden.
410agent_register_discontinued
Die Agent-Registrierung ist ausgeschaltet.
429(Retry-After header)
Zu viele Registrierungen aus derselben Netzwerkquelle. Warten Sie die in Retry-After angegebene Sekundenzahl.
502facilitator_error
Die Zahlung konnte nicht geprüft oder verbucht werden. Versuchen Sie es später erneut.
502settlement_error
Die Zahlung ist eingegangen, konnte aber nicht gutgeschrieben werden. Senden Sie dieselbe Zahlung erneut, statt eine neue zu signieren.
502registration_error
Die Zahlung ist eingegangen, aber das Konto konnte nicht erstellt werden. Senden Sie dieselbe Zahlung erneut, statt eine neue zu signieren.
503disabled / runtime_disabled
x402 ist derzeit ausgeschaltet oder nicht konfiguriert.
503asset_unavailable / dedup_unavailable
Eine Abhängigkeit(Asset-Konfiguration, Duplikatprüfung oder Aufladungsprüfung)ist momentan nicht erreichbar. Versuchen Sie es später erneut.
503signup_disabled / agent_register_unavailable
Die Registrierung ist vorübergehend deaktiviert oder nicht nutzbar.

Das Konto an eine Person übergeben

Senden Sie upgrade_url aus der Antwort an den Kontoinhaber. Nach Anmeldung und Übernahme gehen API key und Guthaben auf dessen Konto über. Übernehmen Sie das Konto vor claim_expires.

https://bazaarlink.ai/claim?token=<claim_token>

Netzwerk und Asset

Derzeit ist das USDT0 auf X Layer, abgewickelt über den x402-Facilitator von OKX. Es fällt eine Plattform-Aufladegebühr an, daher ist das erhaltene Guthaben niedriger als der gezahlte Betrag (siehe Preise). Zahlungen werden on-chain abgewickelt und lassen sich nicht rückgängig machen; prüfen Sie Betrag und Netzwerk vor dem Signieren.

Eine Übersicht finden Sie auf der Seite zu x402-Agentenzahlungen.

Support
Support
Hi! How can we help you?
Send a message and we'll get back to you soon.