โ† Quickstart
Stripe x402 < 2 minutes 1 line of middleware

Stripe Machine Payments + Observer Protocol

Stripe handles the payment. Observer Protocol answers the question Stripe cannot: should you trust the agent making it?

Add one middleware line to your x402 seller and every incoming machine payment gets a reputation check โ€” trust tier, payment history, risk signals โ€” before you process it. No API key required to start.

๐Ÿ’ณ
Agent sends x402 payment to your Stripe endpoint
๐Ÿ”
OP middleware queries agent reputation before you accept
โœ“
Trust tier, score, and suggested action โ€” before settlement
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ OBSERVER PROTOCOL LAYER โ”‚ โ† "Can I trust this agent?"
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ STRIPE MACHINE PAYMENTS โ”‚ โ† "Process this payment"
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
โ”‚
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ–ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Base (USDC) ยท Solana ยท Tempo โ”‚ โ† Payment rails
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

For Sellers
1

Install the SDK and add one middleware line

npm install @observer-protocol/sdk
const { ObserverClient } = require('@observer-protocol/sdk'); const observer = new ObserverClient(); // Add before your x402 payment handler โ€” that's it app.use('/api/*', observer.reputationMiddleware({ fallback: 'review' })); // Reputation is now available on every request: // req.observerReputation.trust_tier โ†’ "new" | "active" | "established" | "trusted" // req.observerReputation.reputation_score โ†’ 0.0 โ€“ 1.0 // req.observerReputation.suggested_action โ†’ "accept" | "review" | "reject"
2

Gate access by trust tier

Use the reputation response to apply different rate limits, pricing, or access levels per agent โ€” automatically, before the payment settles.

app.post('/api/data', (req, res) => { const { trust_tier, suggested_action } = req.observerReputation || {}; if (suggested_action === 'reject') { return res.status(403).json({ error: 'Agent reputation: rejected' }); } // Rate limit by trust tier const rateLimit = { trusted: 10000, // req/day established: 5000, active: 1000, new: 100, unknown: 10, }[trust_tier || 'unknown']; res.json({ data: '...', rate_limit: rateLimit }); });

For Agents
3

Reputation lookup by agent_id

Stripe identifies agents by their USDC wallet address. After a one-time registration on Observer Protocol (the agent submits its public key + metadata, receives an agent_id), sellers query reputation by that agent_id โ€” the agent passes it via the X-Observer-Agent-ID header on every request. The middleware in step 1 reads the header and does the lookup automatically. The @observer-protocol/sdk client wraps this same call.

# Query by agent_id (returned at registration; passed via X-Observer-Agent-ID header) curl https://api.observerprotocol.org/api/v1/agents/maxi-0001/profile # Returns (current AT-ARS schema): { "agent_id": "maxi-0001", "agent_name": "Maxi", "did": "did:web:observerprotocol.org:agents:maxi-0001", "verified": true, "trust_score": 58.0, "trust_data": { "receipt_count": 12, "unique_counterparties": 5, "last_activity": "2026-05-07T18:42:14Z", "components": { "receipt_score": 68, "counterparty_score": 75, "org_score": 100, "recency_score": 90, "volume_score": 45 } } }

Direct wallet-address โ†’ reputation lookup is on the roadmap (issue open on the mpp-integration repo). Until then, register once and use agent_id everywhere.


Trust Tiers (AT-ARS Spec ยง6)

AT-ARS scores 0โ€“100, weighting verified receipts (25%), counterparty diversity (20%), org affiliation (20%), recency (15%), and volume (15%). The score band is what the SDK exposes as trust_tier.

Tier Score Range Suggested Action
unknown no profile in OP review
untrusted 0โ€“39 review
developing 40โ€“59 review (lenient: accept)
established 60โ€“79 accept
trusted 80โ€“100 accept (premium)

Chargeback-resistant settlement (composition with WDK)

Reputation lookup answers "should I accept this payment?" For high-value flows that need "this payment is defensible against later disputes", compose with @observer-protocol/wdk-protocol-trust. The trust module handles bilateral identity verification (sender + recipient both prove DIDs before settlement) and ERC-8004 chain anchoring of the receipt. Together they make agentic payments chargeback-resistant by construction.

Live demo: observerprotocol.org/chargeback-prevention/wdk walks the full Mercado Libre ร— USDT-on-x402 flow โ€” soft-reject โ†’ magic-link authorization โ†’ bilateral handshake โ†’ cryptographically attested receipt.


Agentic Terminal

See real verified transactions in the live feed. Reputation queries working now.

Open Agentic Terminal โ†’
Full SDK

Node.js + Python middleware. Express, FastAPI, and raw fetch examples included.

Get the SDK โ†’
Verification Policy

Platform-required, opt-in, or mandatory. Full policy architecture for payment processors.

Read Architecture โ†’