COMPARISON

    xBPP vs Stripe Agent Toolkit

    When teams start shipping AI agents that spend money, two questions surface quickly: how does the agent pay, and how do we control what it pays for? Stripe Agent Toolkit and xBPP answer different parts of that question. This page walks through the differences, where each fits best, and when you might use them together.

    Short version

    • Stripe Agent Toolkit is Stripe's own SDK for giving AI agents the ability to transact on Stripe. It's tightly integrated with Stripe's payment rails, accounts, and billing primitives. If your agent runs on Stripe, it's the native way to connect agent frameworks to Stripe APIs.
    • xBPP is an open standard and policy engine. It doesn't move money - it decides whether money should move. Policies are declarative JSON, portable across chains and rails (x402, on-chain, Stripe, anything else).

    They're not mutually exclusive. A team running agents on Stripe can use the Stripe Agent Toolkit to move money and xBPP to govern which moves are allowed. We'll show how below.

    Feature comparison

    xBPPStripe Agent Toolkit
    CategoryOpen standard + policy engineSDK bound to a payment provider
    LicenseApache 2.0Source-available / MIT
    Payment railsRail-agnostic (x402, on-chain, Stripe, custom)Stripe
    Chain supportChain-agnostic (any EVM, Base, off-chain)Off-chain / card rails
    Policy modelDeclarative JSON, portableProgrammatic, Stripe-specific
    VerdictsALLOW / BLOCK / ESCALATEDepends on implementation
    Human-in-the-loopFirst-class (ESCALATE verdict)App-level implementation
    Audit trailStructured verdict logStripe dashboard + logs
    Vendor lock-inNoneStripe-native
    Runtime depsZero (600-line TS SDK)Stripe SDK + platform
    x402 supportYes, via adapterNo

    What Stripe Agent Toolkit is great at

    If your agent's job is to interact with Stripe - create customers, issue invoices, manage subscriptions, process refunds - Stripe Agent Toolkit is the fastest way to do it. You get:

    • Native access to every Stripe API the toolkit exposes
    • Stripe's entire fraud and risk stack for free
    • Tight integration with Stripe Dashboard for observability
    • Stripe's account model and identity primitives
    • First-party support from Stripe

    If you're already on Stripe and your agents stay inside the Stripe ecosystem, the toolkit is probably what you want. It removes glue code and gives your agents immediate access to Stripe's full payment surface.

    What xBPP is great at

    xBPP solves a different problem: governing what an agent is allowed to do, independent of the payment rail underneath. It's the layer above whatever toolkit actually moves money.

    The strengths that come from being a standard instead of an SDK:

    • Portable policies. The same policy JSON works across x402, Stripe, Base, Ethereum, or a custom rail. Change rails without rewriting rules.
    • Three verdicts. ALLOW / BLOCK / ESCALATE is a first-class concept, not something you bolt on at the app layer.
    • Policy as data. Version, diff, code-review, and ship policies like any other config.
    • Zero lock-in. The spec is public, the SDK is 600 lines, and any implementation can evaluate any policy.
    • No dependencies. Runs in browsers, edge functions, workers, and servers without a stack to install.
    • Chain and rail agnostic. Designed to sit above multiple payment providers at once.

    xBPP isn't trying to be a payment SDK. It's trying to be the policy layer every payment SDK is missing.

    When to use each

    You need to...Use
    Create Stripe customers from an agentStripe Agent Toolkit
    Issue Stripe invoices, manage subscriptionsStripe Agent Toolkit
    Let an agent pay x402-native servicesxBPP (+ an x402 client)
    Enforce a daily budget across any railxBPP
    Route grey-zone transactions to a humanxBPP
    Keep one policy that applies to multiple payment providersxBPP
    Ship on a non-Stripe rail (on-chain, x402, custom)xBPP
    Both of the aboveBoth, composed

    Using them together

    The most interesting case isn't "xBPP or Stripe Agent Toolkit" - it's "xBPP with Stripe Agent Toolkit." xBPP sits in front of whatever SDK actually executes the payment. On the Stripe side, that means:

    import { evaluate } from '@vanar/xbpp'
    import { StripeAgentToolkit } from '@stripe/agent-toolkit'
    import policy from './policies/stripe-agent.json'
    
    const stripe = new StripeAgentToolkit({ secretKey: process.env.STRIPE_KEY })
    
    async function chargeCustomer(customerId: string, amountUsd: number) {
      // 1. xBPP evaluates the policy first
      const verdict = evaluate(
        { amount: amountUsd, currency: 'USD', recipient: customerId, rail: 'stripe' },
        policy
      )
    
      if (verdict.decision === 'BLOCK') {
        throw new Error(`Policy block: ${verdict.reasons.join(', ')}`)
      }
    
      if (verdict.decision === 'ESCALATE') {
        await humanApproval.request(verdict)
        return
      }
    
      // 2. Stripe Agent Toolkit executes the charge
      return stripe.charges.create({
        customer: customerId,
        amount: amountUsd * 100,
        currency: 'usd'
      })
    }

    xBPP handles governance - the "should we" - once. Stripe Agent Toolkit handles Stripe-specific execution - the "how" - for the subset of transactions that actually happen on Stripe. The same policy can simultaneously govern agent activity on x402, on-chain, or any other rail you add later.

    The open standard argument

    There's one more difference worth calling out explicitly: xBPP is an open standard, Stripe Agent Toolkit is a vendor SDK. Both are valid choices, and neither is inherently better - but they imply different things.

    A vendor SDK is the shortest path when you're committed to a single provider. It's also a commitment in the other direction: your governance logic ends up shaped around one provider's primitives, and migrating it elsewhere means rewriting it.

    An open standard trades some initial integration work for portability. Policies written for xBPP today will keep working if you switch payment rails, add new rails, or support multiple in parallel. For teams that expect to run on more than one rail over their lifetime - which, in our experience, is most of them - that portability is worth the tradeoff.

    FAQ

    Is xBPP a replacement for Stripe Agent Toolkit?

    No. xBPP is a policy layer, not a payment SDK. If you're paying via Stripe, you still use Stripe Agent Toolkit (or the Stripe SDK directly) to execute the charge. xBPP decides whether the charge should happen.

    Does xBPP work with Stripe Connect?

    Yes. xBPP operates above the payment rail, so it's independent of Stripe's account model. You can use it alongside Connect accounts, direct charges, or destination charges.

    Can I migrate from Stripe Agent Toolkit to xBPP?

    It's not a migration - they solve different problems. You can add xBPP alongside any existing payment toolkit without migrating anything else.

    Is xBPP free?

    Yes. Apache 2.0, no accounts, no API keys, no telemetry.

    Further reading