externalUserID. From your backend you upsert a member’s profile and
tier, read a full summary of their wallet and redemption
activity, and remove them when needed.
Upsert a member
setMember(externalUserID, {...}) calls PUT /v1/members/{externalUserID} and
creates the member if they do not exist or updates them if they do. PUT is
idempotent by HTTP semantics, so replaying the same body is safe.
Optional display name stored on the member profile.
A free-form tier string you define (for example
gold, vip). It flows into
member-mode eligibility to gate offers.Free-form JSON for your own metadata. Stored as-is and returned on
getMember.curl
SetMemberResponse:
| Field | Type | Description |
|---|---|---|
externalUserID | string | Your stable identifier for the member. |
displayName | string | null | The stored display name, or null if unset. |
tier | string | The member’s tier. |
attributes | object | null | Your free-form metadata, or null if unset. |
tier is a string you define - Expys does not enforce a fixed set. Keep tier
names consistent with the conditions you check in
eligibility.Read a member summary
getMember(externalUserID) calls GET /v1/members/{externalUserID} and returns
a MemberSummary: the profile plus the member’s wallet and a per-status count of
their redemptions.
curl
Your stable identifier for the member.
The stored display name, or
null if unset.The member’s tier.
Your free-form metadata, or
null if unset.The member’s points wallet.
A map of redemption status to count for this member.
Wallet
| Field | Type | Description |
|---|---|---|
balance | number | Current points balance. |
amountReceived | number | Total points ever credited. |
amountSpent | number | Total points ever spent. |
currency.name | string | Display name of the points currency. |
currency.symbol | string | Symbol of the points currency. |
Redemption counts
redemptionCounts is a per-status count of the member’s redemptions across the
booking lifecycle:
| Key | Meaning |
|---|---|
SUBMITTED | Redemptions submitted. |
OPEN | Redemptions in the open state. |
AWAITING_VENDOR | Waiting on the vendor. |
AWAITING_CUSTOMER | Waiting on the customer. |
PURCHASED | Purchased (sometimes called confirmed). |
COMPLETED | Completed experiences. |
CANCELED | Canceled redemptions. |
Remove a member
removeMember(externalUserID, { retainBalance? }) calls
DELETE /v1/members/{externalUserID} and archives the member. The optional
retainBalance query parameter controls whether the points balance is kept.
When
true, the member’s points balance is retained on the archived record.
When omitted or false, the balance is not retained.curl
RemoveMemberResponse:
| Field | Type | Description |
|---|---|---|
externalUserID | string | The member that was removed. |
archived | boolean | true when the member was archived. |
balanceRetained | boolean | Whether the points balance was kept (reflects retainBalance). |
Removal archives rather than hard-deletes the member, so historical
redemptions and analytics remain consistent.
In code
The server client is constructed with the Org-API-Key. The example below upserts a member;getMember and removeMember are called the same way.
Next steps
Eligibility
How a member’s
tier gates which offers they can redeem in member mode.Points and wallet
Mint and credit points into the wallet returned by
getMember.