2 operations. Every schema and example on this page is generated from the platform contract.
Merchant browses every liability waiver the store has authored, active or not, ordered newest first. Gated by the can_use_gym_management entitlement (fail-closed). Each waiver carries its title, content, current version, active flag, annual-renewal flag, and timestamps.
Store whose waivers to list (also authorises the merchant).
curl -G "https://www.membber.com/api/v1/waivers" \
-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/waivers", {
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.listWaivers(
query: .init(storeId: "6659c139-0000-4000-8000-d0c500000066")
).ok.body.json
print(response){
"waivers": [
{
"id": "00000d1b-0000-4000-8000-d0c500000000",
"store_id": "6659c139-0000-4000-8000-d0c500000066",
"title": "Morning class",
"content": "<content>",
"version": 1,
"is_active": true,
"requires_annual_renewal": true,
"created_at": "<created_at>",
"updated_at": "<updated_at>"
}
]
}/api/v1/waiversMerchant authors a new liability waiver for the store. Requires a non-empty title and content; requires_annual_renewal is optional and defaults to true. Gated by the can_use_gym_management entitlement (fail-closed 403). Returns the persisted waiver row (version 1, active by default).
Store the waiver belongs to (also authorises the merchant).
Waiver title shown to members before they sign.
Full waiver body text the member agrees to.
Whether signers must re-sign annually. Defaults to true when omitted.
curl -X POST "https://www.membber.com/api/v1/waivers" \
-H "Authorization: Bearer $MEMBBER_TOKEN" \
-H "Idempotency-Key: 1f0e2d3c-4b5a-4678-9abc-def012345678" \
-H "Content-Type: application/json" \
-d '{
"store_id": "6659c139-0000-4000-8000-d0c500000066",
"title": "Morning class",
"content": "<content>"
}'import { createMembberClient } from "@membber/sdk-ts";
const membber = createMembberClient({
getAccessToken: () => process.env.MEMBBER_TOKEN,
});
const { data, error } = await membber.raw.POST("/api/v1/waivers", {
body: {
store_id: "6659c139-0000-4000-8000-d0c500000066",
title: "Morning class",
content: "<content>"
},
headers: { "Idempotency-Key": crypto.randomUUID() },
});
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.createWaiver(
body: .json(.init(
storeId: "6659c139-0000-4000-8000-d0c500000066",
title: "Morning class",
content: "<content>"
))
).ok.body.json
print(response){
"waiver": {
"id": "00000d1b-0000-4000-8000-d0c500000000",
"store_id": "6659c139-0000-4000-8000-d0c500000066",
"title": "Morning class",
"content": "<content>",
"version": 1,
"is_active": true,
"requires_annual_renewal": true,
"created_at": "<created_at>",
"updated_at": "<updated_at>"
}
}