Listings
A listing is a priced product with a hosted product page. Create one with a name and price — ListBee generates a slug from the name and a product page URL.
Listings start as drafts. Attach a deliverable, then publish to go live. See Listing lifecycle for full state details.
Create a listing
POST /v1/listings requires name and price (in minor currency units — cents for USD). Returns a draft listing.
Response:
The slug is derived from the name. Conflicts get a random suffix (e.g. python-async-patterns-k3f). Slugs can be changed while in draft — frozen after first publish.
Set a deliverable
Attach digital content to make the listing use managed fulfillment. Three types:
Attach a file
Attach a URL or text
Remove a deliverable
Deliverables are mutable — call PUT again to replace. Draft only — returns 409 if the listing is published.
Publish
POST /v1/listings/{id}/publish validates the listing and transitions it to published. The listing must have a name, price, and Stripe connected on the account.
If requirements are not met, returns 409 with readiness actions explaining what’s missing.
See Listing lifecycle for all state transitions (pause, resume, unpublish).
Get a listing
GET /v1/listings/{listing_id} returns a single listing by ID.
List listings
GET /v1/listings returns all listings for the authenticated account. Supports status filter and cursor pagination.
Update a listing
PUT /v1/listings/{listing_id} accepts any subset of fields. Only the fields you send are changed. Draft listings are fully editable. Published listings must be paused first.
Delete a listing
DELETE /v1/listings/{listing_id} removes the listing, its product page, and any stored deliverable files.
Key fields
Next steps
- Listing lifecycle — draft, published, paused states and transitions.
- Fulfillment modes — managed vs external, when to use each.
- Orders & delivery — what happens after a buyer pays.
- Deliverables — file, URL, and text content types.
- Checkout schema — collect custom data from buyers.