Memberships

Overview

Memberships let you offer group subscriptions where one owner pays for multiple members. The owner handles all billing and controls who has access. Members share the same entitlements as the owner but never see invoices or payment details.

When the owner cancels or their subscription expires, all members immediately lose access.


How It Works

  1. Owner subscribes - A customer purchases a membership plan with a specified number of seats
  2. Owner adds members - The owner invites people by email, or configures automatic access by IP address or email domain
  3. Members get access - Invited members register or log in to activate their access

Example: A university library purchases a 500-seat subscription. They configure their campus IP range (128.112.0.0/16) for automatic access. Students on campus get access without logging in. The library can also invite specific researchers by email for off-campus access.


API Endpoints

MethodEndpointDescription
GETList membersRetrieve a paginated list of membership records
POSTCreate memberAdd an existing customer as a member of a group subscription
POSTInvite memberSend an email invitation to join a group subscription
GETGet memberRetrieve details for a specific membership
PUTUpdate memberUpdate a membership record (address)
DELETEDelete memberRemove a member from a group subscription
POSTIP authorizationCheck if an IP address has membership access

Important Behaviors

  • Soft delete: Removing a member soft-deletes the record and frees up a seat for another member.
  • Pending activation: If a pending invitation exists for a customer's email, the create endpoint activates it instead of creating a new record (returns 200 instead of 201).
  • Seat capacity: Adding or inviting members is subject to the subscription's member_seat_capacity limit.
  • Address ownership: The address_id must belong to the member's customer.
  • Expand behavior: The subscription field returns an integer (subscription_id) by default. Pass expand=subscription to get the full object. Same for user/user_id.

Member Statuses

StatusWhat It Means
pendingInvitation sent, waiting for the member to register or log in
activeMember has access to the subscription's entitlements

Membership Object

AttributeTypeDescription
idintegerUnique identifier for the membership
user_idinteger|nullID of the member. Null for pending invitations. (expandable)
subscriptioninteger|objectSubscription ID by default. Full object when expand=subscription is used.
subscription_idintegerID of the parent subscription (always integer)
site_idintegerID of the site
address_idintegerID of the member's address. Returns 0 when not set.
statusstringMembership status: pending or active
created_atintegerUnix timestamp of creation
updated_atintegerUnix timestamp of last update