API การชำระเงินที่ออกแบบมาสำหรับโค้ดตัวแทน AI.
API REST ขนาดเล็ก Webhook ที่ลงนาม SDK อย่างเป็นทางการในห้าภาษา สร้างขึ้นเพื่อให้ตัวแทนของคุณสามารถส่งและชำระ USDC และตรวจสอบการชำระเงินในไม่กี่บรรทัดของโค้ด.

API ของ Blockchain0x มีขนาดเล็กโดยตั้งใจ เราไม่ต้องการให้คุณอ่านเอกสารเป็นเวลาหนึ่งชั่วโมงเพื่อทำการชำระเงินครั้งแรก เราต้องการให้คุณคัดลอกโค้ดวางกุญแจ API ของคุณและรันมัน
พื้นผิวขนาดเล็ก สร้างขึ้นสำหรับโค้ดตัวแทน.
เส้นทางที่มีลักษณะการชำระเงินอยู่ด้านล่าง Webhooks, api-keys และการอนุญาตการใช้จ่ายแบบอ่านอย่างเดียวจะทำให้พื้นผิวสมบูรณ์; SDK จะห่อหุ้มทั้งหมด.
/v1/paymentsส่งการชำระเงิน USDC จากกระเป๋าเงินของตัวแทน/v1/transactions/{id}ดึงสถานะและแฮชของธุรกรรม/v1/payment-requests/{id}/settleชำระใบแจ้งหนี้ด้วยหลักฐานบนเครือข่าย/v1/agents/{id}ดึงกระเป๋าเงินของเอเจนต์/v1/agentsสร้างกระเป๋าเงินเอเจนต์ทั้งหมดลงนามด้วย HMAC-SHA256.
ลายเซ็นใน X-Blockchain0x-Signature header. หน้าต่างการเล่นซ้ำ 5 นาที คีย์ idempotency ในทุก POST.
payment.receivedUSDC เข้าสู่กระเป๋าเงินของตัวแทนของคุณ
payment.sentการชำระเงินขาออกจากเอเจนต์ของคุณตั้งอยู่บนเครือข่าย
wallet.deployedกระเป๋าเงินอัจฉริยะของเอเจนต์ถูกปรับใช้
webhook.testการจัดส่งทดสอบที่คุณกระตุ้นจากแดชบอร์ด
ส่ง USDC จากกระเป๋าเงินของตัวแทนของคุณ
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ลูกค้าที่มีประเภทสำหรับ TypeScript และ Python.
npm install @blockchain0x/nodeทำงานกับ Node 18+ ประเภท TypeScript แบบเนทีฟ
pip install blockchain0xPython 3.9+. ลูกค้าซิงค์และอะซิงค์.
เนื้อหาคำขอที่ SDK ห่อหุ้ม.
นี่คือข้อมูลที่ได้รับการตรวจสอบสำหรับแต่ละเส้นทาง การตอบสนองจะแสดงสั้นที่นี่; รูปร่างที่พิมพ์เต็มรูปแบบอยู่ใน SDK และเอกสารอ้างอิง API จำนวนเงินเป็นหน่วยฐาน USDC (6 ทศนิยม).
/v1/paymentsส่งการชำระเงิน USDC (payments.create) โดย amountWei คือหน่วยพื้นฐานของ USDC (6 หลักทศนิยม) อาจส่งคืน 503 จนกว่าตัวเชื่อมต่อของเครือข่ายจะถูกเชื่อมต่อ
{
"agentId": "agt_123",
"to": "0xRecipient",
"amountWei": "10000",
"metadata": { "reason": "Research report" }
}{
"txHash": "0xff5...e12"
}/v1/payment-requests/{id}/settleชำระคำขอการชำระเงิน (ใบแจ้งหนี้) ที่สร้างในแดชบอร์ด โดยมีหลักฐานบนเครือข่าย (paymentRequests.settle) ไม่มีเส้นทางสร้าง - ชำระเฉพาะ
{
"txHash": "0xff5...e12",
"payerAddress": "0xBuyer...",
"amountUsdcVerified": "0.10"
}{
"txHash": "0xff5...e12"
}/v1/transactions/{id}ดึงธุรกรรมเดียวโดย id (transactions.get).
(no body){
"id": "tx_01J9...",
"txHash": "0xff5...e12"
}/v1/agents/{id}ดึงกระเป๋าเงินของเอเจนต์ (agents.get). หน้าสาธารณะของมันอยู่ที่ wallet.blockchain0x.com/a/{slug}.
(no body){
"id": "agt_01J9QKE...",
"name": "research-bot",
"public_url": "https://wallet.blockchain0x.com/a/research-bot"
}/v1/agents/{id}/spend-permissionsอ่านการอนุญาตการใช้จ่ายของตัวแทน อ่านเท่านั้นผ่าน API - การสร้างและการเปลี่ยนแปลงเป็นเฉพาะแดชบอร์ด.
(no body){
"allowance_wei": "5000000",
"per_tx_wei": "1000000",
"period_seconds": 86400,
"start_at": "2026-05-15T00:00:00Z",
"revoked_at": null
}ตรวจสอบลายเซ็นเสมอก่อนที่จะเชื่อถือข้อมูล payload.
ใครก็สามารถ POST ไปยัง URL การเรียกกลับของคุณได้. ลายเซ็นคือสิ่งที่พิสูจน์ว่าเหตุการณ์นั้นมาจากเรา.
ทุกการจัดส่งมี X-Blockchain0x-Signature header (t=<unix>,v1=<hex>) - HMAC-SHA256 บนสตริง `${t}.${rawBody}` ด้วย webhook secret ของคุณ ภายในหน้าต่างกัน replay 5 นาที ใน Node, webhooks.verify จาก @blockchain0x/node จะทำสิ่งนี้ให้และคืนค่า discriminated union ที่คุณใช้แยกทางการทำงานได้ ในภาษาอื่น ให้คำนวณ HMAC เดียวกันและเปรียบเทียบแบบ constant time ให้อ่าน RAW body ไม่ใช่สำเนาที่ parse แล้ว - การ serialize ใหม่จะทำให้ signature ใช้งานไม่ได้
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");
});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", 200webhook secret จะถูกส่งกลับมาเพียงครั้งเดียวเมื่อคุณสร้างหรือหมุนเวียน webhook (webhooks.rotateSecret) และ BLOCKCHAIN0X_WEBHOOK_SECRET คือที่ handler ของคุณอ่านค่าจากนั้น การหมุนเวียนจะทำให้ secret เดิมใช้ไม่ได้ ดังนั้นต้องประสานการ rollout ให้ดี: ตั้งค่า secret ใหม่ใน env ของเซิร์ฟเวอร์ deploy แล้วค่อยหมุนเวียน อีเวนต์ที่ส่งมาคือ payment.received, payment.sent, wallet.deployed, และ webhook.test - ให้แยกทำงานตามชนิดอีเวนต์ ส่วนที่เหลือให้ละทิ้งไป
ลองใหม่อย่างปลอดภัย API จะไม่ชำระเงินสองครั้ง.
การเรียกใช้โค้ดของตัวแทนซ้ำ. เครือข่ายตัดการเชื่อมต่อ. LLMs ตัดสินใจที่จะเรียกเครื่องมือสองครั้ง. เพื่อให้ปลอดภัย, ส่ง Idempotency-Key header บน POST. payments.create ใน SDK จะสร้างเหรียญที่มั่นคงให้คุณโดยอัตโนมัติ ดังนั้นการเรียกซ้ำจึงลดลงเป็นการส่งข้อมูลบน-chain เดียวแทนที่จะจ่ายสองครั้ง แทนที่ด้วยคีย์ของคุณเมื่อคุณต้องการลบการทำซ้ำของการดำเนินการเชิงตรรกะเดียวกันในกระบวนการ.
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" }'- การโทรครั้งแรก: ส่งการชำระเงิน ส่งคืนธุรกรรม.
- ลองใหม่ด้วยคีย์เดียวกัน: ยุบลงเป็นการส่งบนเครือข่ายเดียวแทนที่จะจ่ายสองครั้ง
- SDK จัดการกับมัน: payments.create สร้าง Idempotency-Key ที่เสถียรโดยอัตโนมัติ ดังนั้นการโทรซ้ำจึงปลอดภัยจากกล่อง
- เขียนทับได้ที่: ส่งคีย์ของคุณเองเมื่อคุณต้องการลบข้อมูลที่ซ้ำกันของการดำเนินการเชิงตรรกะเดียวกันข้ามกระบวนการ
รูปแบบที่แนะนำคือการสร้าง UUID ต่อการดำเนินการเชิงตรรกะในโค้ดของตัวแทนของคุณ (เช่น UUID หนึ่งตัวต่อ "จ่ายผู้ขาย X สำหรับคำสั่ง Y") และนำกลับมาใช้ใหม่ในการลองใหม่จนกว่าการดำเนินการจะสำเร็จ SDK อย่างเป็นทางการจะสร้าง UUID อัตโนมัติสำหรับ payments.create หากคุณไม่ระบุ.
อ่านขีดจำกัดของคุณจากการตอบสนอง ไม่ใช่จากตาราง.
ข้อจำกัดขนาดตามแผนของคุณ แทนที่จะเข้ารหัสหมายเลขที่ลอยตัว ทุกการตอบสนองบอกคุณว่าคุณอยู่ที่ไหนและ SDK จะจัดการการถอยให้คุณ
ส่วนหัวในทุกการตอบสนองที่สำเร็จ
X-RateLimit-Limit: อัตราคงที่ของแผนของคุณX-RateLimit-Remaining: ยังเหลือการเรียกกี่ครั้งในหน้าต่างนี้X-RateLimit-Reset: วินาที unix เมื่อหน้าต่างรีเซ็ต
เมื่อคุณถึงขีดจำกัด (HTTP 429)
- การตอบสนองรวมถึง
Retry-Afterในวินาที - SDK อย่างเป็นทางการลองใหม่ใน 429 และ 5xx ด้วยการถอยกลับแบบเอ็กซ์โพเนนเชียล ให้เกียรติ Retry-After
- โค้ดส่วนใหญ่ไม่เคยจัดการ 429 ด้วยมือเพราะ SDK ทำอยู่แล้ว
พูด x402 ได้อย่างคล่องแคล่ว ทำงานได้โดยไม่ต้องใช้มันเช่นกัน.
x402 เป็นโปรโตคอลเปิดสำหรับการชำระเงินที่เป็น HTTP-native หลักการ: API ใด ๆ ที่ส่งคืน 402 Payment Required สามารถโฆษณาข้อกำหนดการชำระเงินในคำตอบ และลูกค้าใด ๆ ที่เข้าใจสเปคสามารถชำระเงินและลองใหม่ได้ - ไม่ต้องลงทะเบียน ไม่ต้องใช้คีย์ API ไม่มีการเจรจานอกแบนด์ Blockchain0x ส่งมอบแพ็คเกจ x402 ที่แท้จริง: ลูกค้าด้านการชำระเงินและตัวปรับให้เซิร์ฟเวอร์ด้านการรับ แผนการเดียวในวันนี้คือ exact-usdc บน Base.
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" }
]
}ตัวเรียกตัวแทนทำอะไร
- อ่าน body ของ 402: version 1, resource, และ accepts[] ของข้อกำหนดการชำระเงินที่ไม่ว่าง (scheme exact-usdc, network eip155:8453 สำหรับ Base)
- สร้างการชำระเงินแล้วส่งคำขออีกครั้งด้วย header X-Payment: exact-usdc:<base64(json)>
- ฝั่งการจ่าย createX402Client({ sdk }) จาก @blockchain0x/x402 ทำสิ่งนี้ให้คุณ - มันตอบ 402s ให้อัตโนมัติ
- เซิร์ฟเวอร์ของคุณตรวจสอบส่วนหัว X-Payment และดำเนินการตามคำขอเดิมให้สำเร็จ
ทั้งสองด้าน แพ็คเกจจริง
ในด้านการชำระเงิน, createX402Client({ sdk }) จาก @blockchain0x/x402 ห่อหุ้ม fetch และตอบสนอง 402s โดยอัตโนมัติ ในด้านการรับ, createX402Plugin (Fastify) และ createX402Middleware (Express) กำหนดการเข้าถึง endpoint ของคุณเอง หรือข้าม x402 และใช้ REST API โดยตรง - ทั้งสองส่วนทำงานร่วมกันได้ ดังนั้นคุณสามารถเพิ่ม x402 เมื่อพร้อม