x402 Quick Start Guide#

HTTP 402 ("Payment Required") ist ein Web-Standard für maschinenlesbare Zahlungsanforderungen — ideal für AI Agents, die autonom bezahlen sollen. PayWatcher ist dein Verification Layer: dein Server empfängt USDC-Zahlungen, ruft /v1/payments/verify auf und erhält sofort Bestätigung, ob die Transaktion korrekt ist.

POST /v1/payments/verify#

Verifiziert eine eingehende USDC-Transaktion auf der Base-Chain.

Request#

bash
curl -X POST https://api.paywatcher.dev/v1/payments/verify \
  -H "x-api-key: YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "tx_hash": "0xabc123...",
    "network": "base",
    "amount": "1.00",
    "to": "0xYOUR_DEPOSIT_ADDRESS",
    "tolerance_seconds": 300
  }'
FeldTypPflichtBeschreibung
tx_hashstringTransaktions-Hash (0x...)
networkstringNetzwerk: base
amountstringErwarteter Betrag in USDC als Dezimalstring (z.B. "1.00") — Währung ist immer USDC
tostringDeine Deposit-Wallet-Adresse
tolerance_secondsnumberZeittoleranz für die Transaktion (Standard: 300)

Response — verified#

json
{
  "data": {
    "verified": true,
    "tx_hash": "0xabc123...",
    "network": "base",
    "amount": "1.00",
    "from": "0xAGENT_ADDRESS",
    "to": "0xYOUR_DEPOSIT_ADDRESS",
    "block_number": 43749345,
    "confirmations": 8,
    "timestamp": "2026-04-04T10:00:00Z"
  }
}

Response — not verified#

json
{
  "data": {
    "verified": false,
    "tx_hash": "0xabc123...",
    "network": "base",
    "amount": null,
    "from": null,
    "to": null,
    "block_number": null,
    "confirmations": null,
    "timestamp": null,
    "reason": "tx_not_found",
    "retry_after_seconds": 2
  }
}

Retry-Logik#

Wenn verified: false, enthält die Antwort einen reason. Manche Gründe sind temporär — dein Agent sollte in diesen Fällen nach retry_after_seconds erneut versuchen:

Reasonretry_after_secondsBedeutung
tx_not_found2Transaktion noch nicht im Mempool sichtbar
insufficient_confirmations3Zu wenige Block-Confirmations
amount_mismatchnullFalscher Betrag — kein Retry sinnvoll
wrong_recipientnullFalsche Empfängeradresse
expirednullTransaktion außerhalb der Zeittoleranz

Wenn retry_after_seconds den Wert null hat, ist ein Retry nicht sinnvoll — die Zahlung muss neu angefordert werden.

Fehler-Codes#

HTTP StatusCodeBeschreibung
400VALIDATION_ERRORUngültige oder fehlende Request-Parameter
401UNAUTHORIZEDAPI-Key fehlt oder ungültig
429RATE_LIMITEDZu viele Anfragen — Rate Limit überschritten
503RPC_UNAVAILABLEBlockchain-Node temporär nicht erreichbar

Nächste Schritte#