Quickstart
This guide walks you through creating a listing and accepting your first Stripe payment. You will be up and running in under 5 minutes.
1. Get your API key
Create an account to get your API key (lb_...).
# Set your API key as an environment variable export LISTBEE_API_KEY="lb_your_key_here"
2. Connect Stripe
Before you can accept payments, connect your Stripe account from the developer console. This is a one-time setup — ListBee uses Stripe Connect to route payments directly to your bank.
3. Create a listing
Create a listing with a name, price, and content. The listing goes live immediately and
you get a checkout URL in a single API call. Pass a single content field —
the type is auto-detected from the value.
curl -X POST https://api.listbee.so/v1/listings \ -H "Authorization: Bearer $LISTBEE_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Ultimate Guide to Prompt Engineering", "description": "50-page PDF with advanced prompting techniques.", "price": 1900, "currency": "USD", "content": "https://example.com/guide.pdf" }'
import httpx client = httpx.Client( base_url="https://api.listbee.so", headers={"Authorization": f"Bearer {api_key}"}, ) resp = client.post("/v1/listings", json={ "name": "Ultimate Guide to Prompt Engineering", "description": "50-page PDF with advanced prompting techniques.", "price": 1900, "currency": "USD", "content": "https://example.com/guide.pdf", }) listing = resp.json() print(listing["url"]) # https://buy.listbee.so/abc123
const resp = await fetch("https://api.listbee.so/v1/listings", { method: "POST", headers: { "Authorization": `Bearer ${apiKey}`, "Content-Type": "application/json", }, body: JSON.stringify({ name: "Ultimate Guide to Prompt Engineering", description: "50-page PDF with advanced prompting techniques.", price: 1900, currency: "USD", content: "https://example.com/guide.pdf", }), }); const listing = await resp.json(); console.log(listing.url); // https://buy.listbee.so/abc123
Response:
{
"id": "lst_abc123def456",
"slug": "abc123",
"name": "Ultimate Guide to Prompt Engineering",
"status": "published",
"price": 1900,
"currency": "USD",
"content_type": "file",
"has_content": true,
"url": "https://buy.listbee.so/abc123",
"created_at": "2026-03-20T10:00:00Z"
}
Your listing is now live. Share the URL https://buy.listbee.so/abc123 with buyers.
4. Buyer pays via Stripe
When a buyer visits the checkout URL, they are directed to a Stripe Checkout session. After successful payment, Stripe notifies ListBee and an order is created automatically. Content is delivered to the buyer immediately — no action needed on your end.
5. Receive order notifications
Set up a webhook to receive real-time order.completed
events when buyers pay. This lets you sync orders to your systems, send custom emails,
or trigger downstream workflows.
# Register a webhook endpoint curl -X POST https://api.listbee.so/v1/webhooks \ -H "Authorization: Bearer $LISTBEE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"url": "https://your-server.com/webhooks/listbee"}' # List completed orders curl https://api.listbee.so/v1/orders \ -H "Authorization: Bearer $LISTBEE_API_KEY"
import httpx client = httpx.Client( base_url="https://api.listbee.so", headers={"Authorization": f"Bearer {api_key}"}, ) # Register a webhook endpoint client.post("/v1/webhooks", json={ "url": "https://your-server.com/webhooks/listbee", }) # List completed orders resp = client.get("/v1/orders") orders = resp.json()["items"]
Content auto-detection
Pass a single content field — ListBee detects the type automatically:
| Input | Detected type | Buyer receives |
|---|---|---|
URL returning a file (application/pdf, image/*, etc.) | file | Secure download link after payment |
| URL returning HTML, a redirect, or any non-file response | url | Redirect to the URL after payment |
Plain text (no http:// or https:// prefix) | text | Text displayed in viewer after payment |
Next steps
- Authentication — API key management and idempotency
- Webhooks — Get real-time order notifications
- API Reference — Explore all endpoints