program_id when adjusting), but the group itself can participate across programs.
Creating a Group
Membership
Adding members
Removing members
LEFT status. Use include_former=true when listing to see former members. Removing a member does not affect the group’s balance.
Roles
The last
ADMIN in a group cannot be demoted or removed.
Group Balances
Adjust a group’s balance directly via the API:GET /v1/groups/{id}/balances includes available, held, and deferred amounts. The balance field remains as a deprecated compatibility total equal to the sum of those buckets. Use the bucket fields for reconciliation. Hold, release, and forfeit each have a group endpoint for moving or removing value.
Crediting Groups from Rules
Rules can credit a group’s balance instead of the participant’s by adding atarget to the action. This rule pools purchase points into a family group:
Groups in CEL Conditions
When a rule evaluates, thegroups variable contains a list of groups the participant belongs to. Each entry has:
groups is a list because a participant can belong to multiple groups. Prefer groups.exists(g, ...) over assuming a specific list position.Group State
Groups support the same state types as participants: tags, counters, and attributes.PUT on a counter sets an absolute value and is last-write-wins; increment adds delta atomically, so concurrent writers never lose updates, and negative deltas decrement. See Increment a group counter.
Group state is available in CEL via the groups variable and can be updated from rule actions using "target": {"type": "GROUP", "id": "{group_id}"}.
Archiving Groups
include_archived=true is set. Archived groups cannot be modified.