Ana içeriğe atla
ÖDEME API'SI

AI ajan kodu için tasarlanmış bir ödeme API'si.

Küçük bir REST API'si. İmzalı webhooklar. Beş dilde resmi SDK'lar. Ajanınızın USDC gönderebilmesi, ödemeleri yerleştirebilmesi ve birkaç satır kodda doğrulayabilmesi için inşa edilmiştir.

İşlemler görünümü: Base'de onaylanan gelen USDC ödemeleri

Blockchain0x API'si kasıtlı olarak küçüktür. İlk ödemenizi yapmak için bir saat boyunca belge okumanızı istemiyoruz. Bir kod parçasını kopyalamanızı, API anahtarınızı yapıştırmanızı ve çalıştırmanızı istiyoruz.

TEMEL UÇ NOKTALAR

Ajan kodu için inşa edilmiş küçük bir yüzey.

Ödeme biçimindeki rotalar aşağıdadır. Webhook'lar, api anahtarları ve yalnızca okunabilir harcama izinleri yüzeyi tamamlar; SDK bunların hepsini sarar.

POST/v1/paymentsBir ajan cüzdanından USDC ödemesi gönderin
GET/v1/transactions/{id}Bir işlemin durumunu ve hash'ini alın
POST/v1/payment-requests/{id}/settleZincir üzerindeki kanıtla bir faturayı kesin
GET/v1/agents/{id}Bir ajan cüzdanını alın
POST/v1/agentsBir ajan cüzdanı oluştur
GÖNDERİLEN WEBHOOK OLAYLARI

Tüm HMAC-SHA256 ile imzalanmıştır.

İmza içinde X-Blockchain0x-Signature başlığı. Tekrar oynatma penceresi 5 dakikadır. Her POST'ta idempotency anahtarları.

payment.received

USDC, ajans cüzdanlarınızdan birine geldi

payment.sent

agent'ınızdan çıkan bir ödeme zincirde settle oldu

wallet.deployed

bir agent'ın smart wallet'ı deploy edildi

webhook.test

dashboard'dan tetiklediğiniz bir test teslimatı

BİRKAÇ SATIR

Ajanınızın cüzdanından USDC gönderin.

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
RESMİ SDK'lar

TypeScript ve Python için tipli istemciler.

TYPESCRIPT
npm install @blockchain0x/node

Node 18+ ile çalışır. Yerel TypeScript türleri.

PYTHON
pip install blockchain0x

Python 3.9+. Senkron ve asenkron istemciler.

TAM UÇ NOKTA ŞEMALARI

SDK'nın sardığı istek gövdeleri.

Bunlar her rota için doğrulanmış girdilerdir. Yanıtlar burada kısa gösterilmektedir; tam tipli şekiller SDK'da ve API referansında yer alır. Miktarlar USDC temel birimleridir (6 ondalık).

POST/v1/payments

Bir USDC ödemesi gönderin (payments.create). amountWei, USDC temel birimleridir (6 ondalık). Zincir adaptörü bağlanana kadar 503 dönebilir.

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

Gösterge panelinde oluşturulan bir ödeme talebini (fatura) zincir üzerindeki kanıtla (paymentRequests.settle) kesin. Oluşturma yolu yoktur - sadece kesin.

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

Bir işlemi id ile alın (transactions.get).

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

Bir ajan cüzdanını alın (agents.get). Kamu sayfası wallet.blockchain0x.com/a/{slug} adresindedir.

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

Bir ajanın harcama izinlerini okuyun. API üzerinden OKUMA-ONLY - oluşturma ve değişiklikler yalnızca kontrol panelindedir.

TALEP
(no body)
YANIT
{
  "allowance_wei": "5000000",
  "per_tx_wei": "1000000",
  "period_seconds": 86400,
  "start_at": "2026-05-15T00:00:00Z",
  "revoked_at": null
}
WEBHOOK İMZA DOĞRULAMA

Yükü güvenmeden önce her zaman imzayı doğrulayın.

Herkes geri çağırma URL'nize POST yapabilir. İmza, olayın gerçekten bizden geldiğini kanıtlar.

Her teslimat bir X-Blockchain0x-Signature header (t=<unix>,v1=<hex>) - `${t}.${rawBody}` dizesi üzerinde webhook gizlinizle HMAC-SHA256. 5 dakikalık tekrar penceresi içinde. Node'da, @blockchain0x/node'dan webhooks.verify bunu yapar ve dallanabileceğiniz ayrıştırılmış bir birleşim döner. Diğer dillerde, aynı HMAC'yi hesaplayın ve sabit zaman içinde karşılaştırın. RAW gövdeyi okuyun, ayrıştırılmış bir kopyayı değil - yeniden seri hale getirme imzayı bozar.

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

Webhook secret, webhook'u oluşturduğunuzda veya döndürdüğünüzde (webhooks.rotateSecret) bir kez geri döndürülür ve handler'ınız bunu BLOCKCHAIN0X_WEBHOOK_SECRET üzerinden okur. Döndürme işlemi eski secret'ı geçersiz kılar, bu yüzden rollout'u koordine edin: yeni secret'ı server'ın env'ine ekleyin, deploy edin, sonra rotate edin. Sunulan event'ler payment.received, payment.sent, wallet.deployed ve webhook.test'tir - event type'a göre dallanın, geri kalanını yok sayın.

IDEMPOTENSİ

Güvenli bir şekilde yeniden deneyin. API iki kez ödeme yapmayacaktır.

Ajan kodu yeniden denemeleri. Ağlar bağlantıları kesiyor. LLM'ler aracı iki kez çağırmaya karar veriyor. Bunu güvenli hale getirmek için bir Idempotency-Key POST üzerindeki başlık. SDK'daki payments.create sizin için otomatik olarak kararlı bir tane oluşturur, böylece tekrar edilen bir çağrı, iki kez ödeme yapmak yerine tek bir zincir üzerindeki gönderime düşer. Aynı mantıksal işlemi süreçler arasında dedupe etmek istediğinizde kendi anahtarınızla geçersiz kılın.

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" }'
  • İlk çağrı: ödemeyi gönderir, işlemi döndürür.
  • Aynı anahtarla yeniden deneyin: iki kez ödeme yapmak yerine tek bir on-chain submission'a dönüşür.
  • SDK bunu halleder: payments.create otomatik olarak sabit bir Idempotency-Key üretir, bu nedenle yeniden denenen çağrı varsayılan olarak güvenlidir.
  • Bunu geçersiz kıl: aynı mantıksal işlemi süreçler arasında deduplikasyonla tekilleştirmek istediğinizde kendi anahtarınızı iletin.

Tavsiye edilen desen, ajans kodunuzda her mantıksal işlem için bir UUID oluşturmaktır (örneğin, "X tedarikçisine Y siparişi için ödeme yap" başına bir UUID) ve işlem başarılı olana kadar yeniden denemelerde bunu yeniden kullanmaktır. Resmi SDK'lar, bunu belirtmezseniz payments.create için otomatik olarak bir tane oluşturur.

HIZ SINIRLARI

Limitinizi yanıttan okuyun, bir tablodan değil.

Limitler, planınızla birlikte ölçeklenir. Kaymalar olan sayıları sert kodlamak yerine, her yanıt size nerede olduğunuzu söyler ve SDK'lar geri çekilmeyi sizin için halleder.

Her başarılı yanıtta başlıklar

  • X-RateLimit-Limit: planınızın sabit oranı
  • X-RateLimit-Remaining: bu pencerede ne kadar çağrı kaldı
  • X-RateLimit-Reset: pencere sıfırlandığında unix saniyeleri

Kapağı vurduğunuzda (HTTP 429)

  • Yanıt şunları içerir: Retry-After saniye içinde
  • Resmi SDK'lar, 429 ve 5xx durum kodlarında, Retry-After'ı dikkate alarak üstel geri çekilme ile yeniden dener.
  • Çoğu kod, SDK zaten yaptığı için 429'u elle işlemez
X402 UYUMU

x402'yi akıcı bir şekilde konuşur. Onun olmadan da çalışır.

x402, HTTP yerel ödemeleri için açık bir protokoldür. Premis: 402 Ödeme Gereklidir döndüren herhangi bir API, yanıtta ödeme gereksinimlerini duyurabilir ve spesifikasyonu anlayan herhangi bir istemci ödeme yapabilir ve yeniden deneyebilir - kayıt yok, API anahtarı yok, dış müzakere yok. Blockchain0x, gerçek x402 paketleri gönderir: bir ödeme tarafı istemcisi ve alma tarafı sunucu adaptörleri. Bugün tek şema, Base'de exact-usdc'dir.

ÇAĞRILAN KİŞİ ÖDEME YAPMADIĞINDA SUNUCU TARAFINDAN DÖNEN 402
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" }
  ]
}

Ajan çağrıcısı ne yapar

  1. 402 gövdesini okur: version 1, resource ve payment requirements için boş olmayan bir accepts[] (scheme exact-usdc, Base için network eip155:8453).
  2. Bir ödeme oluşturur ve isteği X-Payment: exact-usdc:<base64(json)> başlığıyla yeniden gönderir.
  3. Ödeme tarafında, @blockchain0x/x402 içindeki createX402Client({ sdk }) bunu sizin için yapar - 402'lere otomatik yanıt verir.
  4. Sunucunuz X-Payment başlığını doğrular ve orijinal isteği yerine getirir.

Her iki taraf, gerçek paketler

Ödeme tarafında, createX402Client({ sdk }) from @blockchain0x/x402 fetch'i sarar ve otomatik olarak 402'lere yanıt verir. Alım tarafında, createX402Plugin (Fastify) ve createX402Middleware (Express) kendi uç noktalarınızı oluşturun. Ya da x402'yi atlayın ve REST API'yi doğrudan kullanın - ikisi bir araya gelir, bu yüzden hazır olduğunuzda x402'yi ekleyebilirsiniz.

SIKÇA SORULAN

Geliştiricilerin ilk sorduğu beş API sorusu.

SDK olmadan API'yi kullanabilir miyim?

Evet. SDK'lar, bearer-token auth ile HTTPS üzerinden standart JSON için ince wrapper'lardır. HTTP ve HMAC-SHA256 konuşabilen her şey API'yi doğrudan kullanabilir. SDK'lar ergonomik typing, retry'ler ve idempotency-key üretimi için vardır; kullanışlıdırlar, zorunlu değildirler. Node, Python, Ruby, Go ve JVM için client'lar sunuyoruz; diğer dillerde raw API'yi çağırın.

Bir olay tetiklendiğinde webhook uç noktam kapalıysa ne olur?

Teslimatlar geri dönüş ile tekrar dener ve her deneme kontrol panelinde HTTP yanıt kodu ile kaydedilir. Bir olayı kaçırırsanız, API'den uzlaştırabilirsiniz - GET /v1/transactions/{id} ile işlem verisini kimliğine göre alın - yalnızca webhook'a güvenmek yerine. Her teslimatı webhooks.verify (veya belgelenmiş HMAC) ile doğrulamadan güvenmeyin ve yavaş bir işleyici başarısız gibi görünmemesi için hızlı bir şekilde 2xx yanıt verin.

Ajanım ağ hatalarında tekrar denediğinde nasıl çift ödemeleri önlerim?

POST isteğinde bir Idempotency-Key başlığı gönderin. SDK'daki payments.create, sizin için kararlı bir tane otomatik olarak oluşturur, böylece yeniden denenen bir çağrı, iki kez ödeme yapmak yerine tek bir zincir üzerindeki gönderime dönüşür. Aynı mantıksal işlemi süreçler arasında ayıklamak istediğinizde kendi anahtarınızla geçersiz kılın. Anahtar, tam olarak ajanın veya ağın uçuş sırasında yeniden denediği durumlar için güvenlik ağıdır.

Bir hız limiti var mı?

Evet ve planınıza göre ölçeklenir. Zamanla kayacak değerleri hard-code etmek yerine response'tan okuyun: her çağrı X-RateLimit-Limit, X-RateLimit-Remaining ve X-RateLimit-Reset döndürür; 429 ise Retry-After değerini saniye cinsinden içerir. Resmi SDK'lar zaten 429 ve 5xx durumlarında exponential backoff ile retry yapar ve Retry-After'a uyar, bu yüzden çoğu kodun bunu elle ele alması gerekmez.

Bu x402 uyumlu mu?

Evet. x402 package'ları gerçektir: @blockchain0x/x402 içindeki createX402Client({ sdk }) ödeme tarafında 402 challenge'larını yanıtlar, createX402Plugin (Fastify) / createX402Middleware (Express) ise receive tarafında kendi endpoint'lerinizi gate eder. Bugün tek scheme exact-usdc'dir ve wire format, body'si version 1 ve accepts[] listesi bildiren bir 402'ye karşı X-Payment: exact-usdc:<base64(json)> request header'ıdır. Ayrıca x402'yi tamamen görmezden gelip doğrudan REST API'yi de kullanabilirsiniz.

İlk ödemenizi gönderin.

Başlamak ücretsiz. API anahtarından ilk USDC transferinize birkaç satır.