API Reference
Make your first authenticated SellApp request, then build and operate a production integration safely.
Build your own checkout, manage your catalog, or connect SellApp to the tools your business already uses. Start with a read-only request below, then follow one purchase from product setup to webhook delivery.
The base URL is https://sell.app/api. Requests
operate on the real data of the store selected by X-STORE; there is no
separate API sandbox.
Use API keys for your own integrations. To connect the official SellApp CLI,
follow CLI installation, then run sellapp login and approve browser
consent. CLI authorization explains store selection.
For AI clients, Sell MCP provides a separate browser OAuth connection.
MCP registration does not authorize a general-purpose REST integration.
For an account without a store, create a key in API keys
and follow account discovery and first-store creation.
These account calls use explicit account:read or stores:create abilities and
omit X-STORE. You can also use one key for bounded reads across accessible stores.
Make a harmless request
- Create a secret key in API keys.
- Copy the store slug from its storefront URL. For
launch-lab.sell.app, the slug islaunch-lab. - Give your key the
listingability (permission to access the catalog), replace the values below, and run this in your terminal:
export SELLAPP_API_BASE_URL='https://sell.app/api'
export SELLAPP_API_KEY='replace-me'
export SELLAPP_STORE='launch-lab'
curl --fail-with-body --request GET \
--url "${SELLAPP_API_BASE_URL}/v2/products?limit=1" \
--header "Authorization: Bearer ${SELLAPP_API_KEY}" \
--header "X-STORE: ${SELLAPP_STORE}" \
--header 'Accept: application/json'A successful response is 200 OK and includes an X-Request-ID response header
for debugging. The data array contains your products, one page at a time.
Your product names and IDs will differ from this example:
{
"data": [
{
"id": 120,
"title": "Design course",
"slug": "design-course",
"visibility": "HIDDEN"
}
],
"links": {
"first": "https://sell.app/api/v2/products?page=1",
"last": "https://sell.app/api/v2/products?page=1",
"prev": null,
"next": null
},
"meta": {
"current_page": 1,
"per_page": 1,
"total": 1
}
}No products yet? An empty data array still means the request worked. A 401 means the key is
missing or invalid. A 403 means the key or account lacks access. A 404
after changing X-STORE usually means that slug is wrong or unavailable to the
authenticated account.
Build the first sale
The usual integration path is:
Register and test webhook → create product → configure variant → create order → checkout → process eventsFollow the first-request guide, then use the workflow and operating guides below before letting your integration change live data.
Make your first request
Read one product using cURL, an official SDK, or the CLI.
Testing safely
Keep test data separate and check how your app handles failures.
Sell a product
Create a hidden product and its first purchasable variant.
Create a checkout
Create an order and retrieve its customer checkout URL.
Errors and retries
Understand what went wrong and when it is safe to try again.
Webhooks
Verify incoming events and handle repeated deliveries safely.
For agents and automation
Start with authentication and one read.
Choose an SDK resource reference, or inspect one CLI operation with
sellapp commands products create --json. Use the returned schema and examples
before constructing inputs. Errors and retries explains recovery.
Each endpoint's Markdown export includes its inputs, permissions, and examples;
you do not need to load the entire OpenAPI document for one operation.