Create a membership
Requires thememberships:write scope.
contactId(required) - the customer, from ContactsplanId(required) - the plan, from PlansstartDate(optional) - ISO date-time; defaults to nowendDate(optional) - omit to let the plan’s billing frequency decideautoRenew(optional) - defaults to the plan’s settingpayment.status(required) -paid(you collected the money) orunpaid(outstanding)overrides(optional) - see Overriding the plan
201 Created):
Idempotency-Key, so a timeout cannot produce two.
See Idempotency.
How payment decides the status
The membership starts life according to what is owed, not according to what you declare:paid- 1Club records a payment against the External / API payment method (no card is charged) and the membership becomesactive, orpendingwhen it starts in the future.unpaid- the charge is left outstanding and the membership sits atpending_payment. It grants no access until the money is settled in 1Club.- Nothing owed - a free plan with no joining fee is
activestraight away. There is no payment to wait for.
Overriding the plan
A membership keeps its own copy of the plan’s commercial terms, so a negotiated sale is a normal case. Send only what differs; anything omitted takes the plan’s value.amount- charged each period, instead of the plan’s pricesignupFee- the joining fee;0waives itmaxUses- session allowance;nullfor unlimitedusesRemaining- sessions left right now, which is how you migrate a package the customer has already partly used.nullmeans unlimited usage, so it is only valid when the allowance is unlimited too.sessionUnit-bookingorhour
usesRemaining can never exceed the allowance it draws from, whether that is a
maxUses you sent or the plan’s own. The same holds on update, against the state the
membership will be left in - so you cannot lower maxUses below a balance already on
it, and you cannot leave the balance unlimited under a finite allowance.
The two nulls are not the same.
maxUses: null is an unlimited allowance, which
nothing can exceed. usesRemaining: null is unlimited usage, so a ten-session
allowance rejects it - otherwise the allowance would mean nothing. Send both as
null for a genuinely unlimited membership.List memberships
Requires thememberships:read scope.
contactId(optional) - only this customer’s membershipsplanId(optional) - only memberships on this planstatus(optional) - one ofpending,active,expired,cancelled,used,paused,pending_paymentlimit(optional) - 1 to 100, defaults to 25offset(optional) - defaults to 0
status
is a 400, not an empty list.
Get a membership
Requires thememberships:read scope. Returns one membership by its 1Club id,
including usesRemaining - the sessions the customer has left.
Update a membership
Requires thememberships:write scope.
status on its own, optionally with the field that
configures it:
A detail change - any of
endDate, autoRenew, maxUses, usesRemaining. Use
usesRemaining to correct a balance after a migration.
cancelMode only applies to a cancellation and resumeAt only to a pause; sending
either with the wrong status is a 400 rather than being quietly ignored.
Statuses 1Club works out for itself -
expired, used, pending_payment -
cannot be set here. They follow from dates, usage, and payment.What this API does not do
- No plan changes. Moving a customer to a different plan is a priced change needing proration, invoicing, and possibly a refund. Do it in 1Club.
- No refunds. Cancelling releases the membership; it never returns money.
- No deletes. Cancel it instead, so the history stays intact.