1 operation. Every schema and example on this page is generated from the platform contract.
The Business app Home's walkthrough for a store that is not yet live: rows assembled from what the merchant picked at signup (stores.signup_selections), what they actually bought (active store_addons grants), and REAL state. A probe that fails omits its row rather than inventing a failure. Gym stores return no rows: their own onboarding wizard owns setup. THE RULE FOR EVERY ROW ON THIS CARD: a row ticks from the predicate the SERVER ACTUALLY REFUSES ON, never from something that merely resembles it. Two rows have already broken it. "Switch on Click & Collect" ticked from store_checkout_settings.checkout_enabled while the Drops gate refuses on collect_enabled, so the row read done while the gate stayed shut. "Get paid" ticked from whether a live Stripe account could charge, while the gate accepts ANY way of being paid, so a cash-only shop was told to connect Stripe for ever and a shop with a chargeable account but no enabled method ticked green while the gate refused it. Both now read the same predicates the gate does. One exception, and it is a founder decision rather than a derivation (FA222, 17 Sep 2026): a shop whose only route is a working SANDBOX Stripe account shows Get paid UNTICKED, matching the go-live card on the same screen.
Store whose setup checklist to return (also authorises the merchant).
curl -G "https://www.membber.com/api/v1/setup-checklist" \
-H "Authorization: Bearer $MEMBBER_TOKEN" \
--data-urlencode "store_id=6659c139-0000-4000-8000-d0c500000066"import { createMembberClient } from "@membber/sdk-ts";
const membber = createMembberClient({
getAccessToken: () => process.env.MEMBBER_TOKEN,
});
const { data, error } = await membber.raw.GET("/api/v1/setup-checklist", {
params: { query: { store_id: "6659c139-0000-4000-8000-d0c500000066" } },
});
if (error) {
// Typed error envelope: { error: { code, message, requestId } }
throw new Error(`${error.error.code}: ${error.error.message}`);
}
console.log(data);import MembberSwift
let client = MembberClient(
serverURL: MembberClient.productionServerURL,
tokenProvider: { session.accessToken }
)
let response = try await client.api.getSetupChecklist(
query: .init(storeId: "6659c139-0000-4000-8000-d0c500000066")
).ok.body.json
print(response){
"rows": [
{
"key": "<key>",
"label": "<label>",
"detail": "<detail>",
"complete": true,
"route": "<route>"
}
]
}