1 operation. Every schema and example on this page is generated from the platform contract.
The acquisition table on the merchant signup page. Public, because it is read before anyone has an account. Rendered from plan_entitlements joined to feature labels, never from a hand-kept feature list per tier.
The columns, in display order.
plan_entitlements.plan_id, e.g. "member", "club", "vip".
What the plan is called on screen, e.g. "Free", "Core", "Pro".
Monthly price per location as shown, e.g. "£15".
One-time setup fee as shown, e.g. "£0".
True when the plan still renews for existing merchants but cannot be bought by a new one.
The plan presented as the default choice.
The rows, one per entitlement key.
The entitlement key, e.g. "can_use_wallet_passes".
Human-readable feature name.
One line on what the feature does.
Add-on slug when the feature is bought separately rather than included in any tier, else null. Such a feature is correctly false on every plan, that is not the same as unavailable.
plan_id → whether that plan grants this feature, read from plan_entitlements.enabled.
The measured shape, so a caller can assert on it instead of trusting a number in a doc.
Number of feature rows returned.
Number of plan columns returned.
curl -G "https://www.membber.com/api/v1/plan-comparison"import { createMembberClient } from "@membber/sdk-ts";
const membber = createMembberClient({
getAccessToken: () => process.env.MEMBBER_TOKEN,
});
const { data, error } = await membber.raw.GET("/api/v1/plan-comparison");
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.getPlanComparison().ok.body.json
print(response){
"plans": [
{
"id": "00000d1b-0000-4000-8000-d0c500000000",
"name": "Example name",
"displayPrice": "<displayPrice>",
"displaySetupFee": "<displaySetupFee>",
"withdrawn": true,
"recommended": true
}
],
"features": [
{
"key": "<key>",
"label": "<label>",
"description": "Added at the front desk",
"addOn": "<addOn>",
"cells": {}
}
],
"shape": {
"features": 1,
"plans": 1
}
}