Skip to content

Stripe agentic commerce

Your offers sell inside AI assistants, businesses and their agents pay your Stripe handle, and your own agents pay under your limits.

Connect
Nothing to connect, 1 grant
Runs through
Your account
First run
List your Pro plan where AI assistants shop, free on your account
Venues
None, it holds your records
Offer.publish
You, to your agent

List my Pro plan where AI assistants shop, and show me what an assistant sees.

curl -X POST "https://api.sb/leaseline.app/offers/publish?mode=try" \
  -H "Authorization: Bearer $SB_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"offer":"offers/pro","to":"stripe-catalog"}'
npx startup-builder do Offer.publish --try --data '{"offer":"offers/pro","to":"stripe-catalog"}'
{
  "name": "do",
  "arguments": {
    "mode": "try",
    "code": "return await $.Offer.publish({ offer: 'offers/pro', to: 'stripe-catalog' })"
  }
}
import { $ } from 'startup-builder'

const result = await $.try.Offer.publish({ offer: 'offers/pro', to: 'stripe-catalog' })
Response
{
  "$type": "Offer",
  "mode": "try",
  "stored": false,
  "offer": "offers/pro",
  "row": {
    "name": "Leaseline",
    "plan": "monthly",
    "for": "property managers with 20 to 400 units",
    "price": {
      "amount": 149,
      "currency": "USD",
      "per": "month"
    },
    "per": "portfolio",
    "checkout": "tool:leaseline.checkout"
  },
  "checkoutReply": {
    "tool": "leaseline.checkout",
    "takes": [
      "name",
      "email",
      "payment token"
    ],
    "returns": [
      "account",
      "key",
      "receipt"
    ],
    "phone": "optional"
  },
  "onPaid": "Order.paid records the assistant as `by` and the Customer as `for`"
}
Try mode reads, stores nothing and spends nothingAPI referenceIts Nouns

Connect once

  1. Nothing to connect: your startup’s own Stripe connected account is already agent-ready (hub Stripe; the account itself is on Stripe).
  2. One grant, “List my offers for AI agents”, publishes your catalog feed: one row per offer variant, with its Price and its checkout tool.
  3. The rails, named once: Instant Checkout in ChatGPT over the Agentic Commerce Protocol; the Shared Payment Token, scoped to one startup and one total, for card payments from agents; the Machine Payments Protocol and x402 for per-call payments; Link’s agent wallet; and the Stripe Directory, where agents find services they can pay for. A buyer’s agent that hands over a whole job comes in over the open agent-to-agent protocol.
  4. Your Stripe profile and its handle, such as @leaseline: businesses and their agents pay you there with Stripe Pay, instantly and account to account, and find you in the Stripe Directory. Your agents pay other businesses’ handles the same way: a sponsorship, a listing, a Partner’s commission.
GrantWhat it unlocksScope
List my offers for AI agentsYour catalog feed published to Stripe, read by ChatGPT, Claude, Gemini and Perplexitycatalog_feed:write
ToDo this
PauseIntegration.pause takes your catalog rows down and stops new agent checkouts at once; Orders already paid are fulfilled.
ReconnectIntegration.reconnect publishes the catalog feed again from your Stripe Prices, keeping every row’s id.
DisconnectIntegration.revoke withdraws the catalog feed and the Directory listing; your Stripe connected account stays, because your customers pay through it.

What it holds

NounThe account’s objectWhenWhich side leads
Orderpayment intent, with the agent as by``An agent buys for a customerYour records
Cardissuing cardYour agent gets a card under a standing approvalThe account
standing approvalspending controlsYou authorize your agent to spendYour records
Transactionbalance transactionMoney movesThe account
accountStripe profile handleA business or its agent pays you, or you pay one, by handleThe account

What your agents do

AskCallPathRuns throughPrice
List my pilot and Pro plans where AI assistants shop.Offer.publishPOST /offers/publishYour accountFree
Take Northgate’s assistant’s payment for Pro.Order.payPOST /orders/payYour accountFree
Charge agents 0.2¢ per lookup from their first call.Offer.publishPOST /offers/publishYour accountFree
Give my agent a $200 card for directory listings this month.Card.issuePOST /cards/issueYour accountFree
Pay the newsletter’s Stripe handle $60 for its tools slot.Bill.payPOST /bills/payYour accountFree
Show me what agents bought this month, by assistant.Transaction.listGET /transactions/listYour accountFree

Calls on your own account are free.

What try does: Returns the catalog row and the checkout tool’s first reply as an assistant sees them; nothing is published or charged. A sk_test_ key runs the same calls against your Stripe test account.

Limits

WhatLimitCall
Card payments from agents50¢ or more eachOrder.pay
Per-call unitsBilled below a cent, settled from 1¢Offer.publish
Your agents’ cardsNever above your standing approval’s Limit; a purchase above it opens an ApprovalCard.issue

Reference

Field map, formats, events and how long a connection lasts

Events and webhooks

DirectionEvent
EmitsOffer.published, Order.paid, Card.issued, Mandate.spent
Hears payment_intent.succeededBecomes Order.paid
Hears shared_payment.granted_token.deactivatedBecomes Order.paid
Hears issuing_authorization.createdBecomes Mandate.spent

Any Event can wake a Workflow, and a Watch delivers it to your endpoint, signed (Events and webhooks).

How long a connection lasts

A connection lasts for as long as your startup runs: the connected account carries no sign-in that runs out. The platform asks you to reconnect 7 days before it runs out; until you do, a call that needs it refuses with needs-reauth.

Contents