Membership model
Members, tiers, and lifecycle — the core records every other NextWave concept hangs off of. Read them, create them, and renew them from a single nwp command.
Members
A member is the central record in NextWave. Every NFC card, redemption, check-in, and wallet pass ties back to exactly one member. A member belongs to a single tier, which determines what they're entitled to and when their access expires.
The core fields you'll work with:
| Field | Meaning |
|---|---|
id | Stable numeric identifier — use it everywhere |
name | The member's display name |
email | Unique contact address |
tier_id | The tier this member belongs to — drives benefits and expiry |
status | Lifecycle state — active or expired |
expires_at | ISO date access lapses, or null for a lifetime membership |
List your members, then fetch one by id:
$ nwp members list --output json$ nwp members get 42 --output jsonEvery NextWave response is an envelope — success tells you whether the call worked, and data carries the payload:
{
"success": true,
"data": {
"id": 42,
"name": "Ada Lovelace",
"email": "ada@example.com",
"tier_id": 3,
"status": "active",
"expires_at": "2027-01-15",
"attributed_to": 17
}
}Attribution chain
NextWave tracks who introduced whom. The attributed_to field points at the member who referred this one, forming a referral chain you can walk to understand how your community grew. Lifetime founders sit at the root with attributed_to: null; everyone they brought in points back to them. Use it to credit ambassadors, build referral leaderboards, or map your network.
Tiers
A tier is a membership level. NextWave supports a free tier alongside paid, Stripe-backed tiers. Each tier carries a price and a duration_months that decides how long membership lasts before it needs renewing.
duration_months: 12— a member added today gets anexpires_attwelve months out.duration_months: 0— lifetime. The member'sexpires_atisnulland never lapses.
Lifetime is zero, not infinity
0 on a tier's duration_months means “never expires.” That maps straight through to a member's expires_at being null. If you see a null expiry, the member is lifetime — not broken.Lifecycle & status
A member moves through a small, predictable set of states:
- Active —
status: "active"and either a futureexpires_ator a lifetimenull. Benefits redeem, cards tap, passes stay valid. - Expired —
expires_athas passed. The member flips tostatus: "expired"and loses access until renewed. - Renewed — a renewal pushes
expires_atforward by the tier'sduration_monthsand returns the member toactive. Paid renewals are settled through Stripe.
Because lifetime members carry a null expiry, they never enter the expired state — there's nothing to renew.
Where to go next