Readiness system
The readiness system gives agents a reliable, structured answer to the question: “Can this listing sell right now, and if not, what needs to happen?”
Every listing response includes a readiness object. Agents read it, act on it, and loop until sellable is true. No guesswork, no polling, no out-of-band state.
The readiness object
Three fields:
Decision tree
Use this logic in any agent that needs to drive a listing to sellable:
Actions explained
Each action in the actions array has four fields:
kind: api
The agent can resolve this action autonomously. Call resolve.method on resolve.endpoint with resolve.params as the request body.
kind: human
The agent cannot resolve this action. A human must visit resolve.url in a browser to complete the step — for example, completing Stripe Connect onboarding or updating billing details.
The next pointer
next is the code of the highest-priority action. When multiple actions are blocking, next points to the one the agent should act on first.
The selection rule: if any kind: "api" actions are present, next points to one of those. If only kind: "human" actions remain, next points to the human action.
This means an agent can always just follow next without reasoning about the full actions array.
To act on the next pointer: fetch the listing, find the action in actions where code == readiness.next, then either call the resolve.endpoint (for kind: "api") or surface resolve.url to the user (for kind: "human"). Re-fetch the listing after each action and repeat until sellable is true.
Action code reference
set_stripe_key and connect_stripe are mutually exclusive. set_stripe_key appears when the agent already has a Stripe key to submit. connect_stripe appears when the user must go through the full Stripe Connect onboarding flow in a browser.
configure_webhook only appears on listings with fulfillment: "external". External listings need a webhook to receive order.paid events — without one, the listing cannot sell because no one would know about the order. Register a webhook endpoint to resolve this action.
Full JSON examples
Sellable listing
A listing with Stripe connected, charges enabled, and content attached.
Listing with no Stripe (two actions)
set_stripe_key is kind: "api" so next points to it.
External listing with no webhook
Listing with charges disabled
Stripe is connected, but Stripe has disabled charges on the account (e.g. pending verification).
How other APIs handle this
They don’t. Stripe Payment Links, Gumroad, and Lemon Squeezy all return a listing or product object with no machine-readable signal about whether it can sell. An agent calling those APIs has no way to know if payment is misconfigured, if charges are disabled, or what the next required action is — it either errors at checkout time or requires a human to inspect the console.
ListBee’s readiness system is purpose-built for agent-operated commerce. An agent can drive a listing from zero to sellable: true in a single loop without any human input — unless the blocking action is kind: "human", in which case the agent surfaces the exact URL.
Next steps
- Agent onboarding flow — see the readiness system in action during a full onboarding dialogue.
- Payments — connect Stripe to resolve the most common readiness actions.