Returns the memberships held by the authenticated end-user within
the campaign resolved from the JWT. Each membership row carries
its activation source (e.g. the voucher code that activated it)
and an optional type discriminator for campaigns that issue
multiple membership tiers from a single discount configuration.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Why this endpoint exists
On campaigns whose discount mechanism is CLUB_MEMBERSHIP, the customer's discount comes from being a member rather than from a balance or a code. This is how your storefront finds out whether they are one.
Use it to show membership state — "you are a Gold member, prices below include your discount" — and to decide whether to prompt someone to activate a membership with a voucher.
Request
curl https://api.acc.funtrips.io/v2/me/memberships \
-H "x-campaign-id: $CAMPAIGN_ID" \
-H "Authorization: Bearer $END_USER_TOKEN"Response
{
"data": {
"memberships": [
{
"campaign_id": "3c1e5a90-7b2d-4f61-9a83-1d4e7f2b8c05",
"active": true,
"type": "GOLD",
"activated_at": "2026-06-14T08:22:19Z",
"activated_by": "WELCOME2026",
"last_updated": "2026-06-14T08:22:19Z"
}
]
}
}
This response has nometaenvelope field, anddatais an object containingmembershipsrather than a bare array. It is shaped differently from the other collection endpoints — readdata.memberships.
| Field | Meaning |
|---|---|
campaign_id | The campaign the membership belongs to |
active | Whether it currently confers benefits |
type | Tier — e.g. GOLD, SILVER. null when the campaign issues untyped memberships |
activated_at | When it was activated |
activated_by | What activated it — typically the voucher code. null when unknown |
last_updated | Last state change |
Check active, not presence
active, not presenceAn inactive membership still appears in the list. A non-empty array does not mean the customer has benefits — read active on each row.
const isMember = data.memberships.some(m => m.active);Keeping inactive rows visible is deliberate: it lets you show "your membership lapsed on …" rather than silently pretending it never existed, which is a much better conversation with a customer who thinks they still have a discount.
type may be null
type may be nullCampaigns that issue a single kind of membership leave it unset. Campaigns that issue tiers from one discount configuration use it to distinguish them.
Do not render null as a tier name, and do not assume the field is present.
activated_by is a provenance trail
activated_by is a provenance trailUsually the voucher code that activated the membership. It answers "how did I become a member?" — useful on an account page and in support conversations, since it links the membership back to a specific redemption.
You do not apply the discount
There is no "use membership" call. When a checkout is created with an authenticated member, the platform resolves the entitlement and applies it server-side; it appears on the checkout lines as a CLUB_MEMBERSHIP entry in discounts.
The source on that discount is empty for memberships — unlike vouchers, which carry their code, and loyalty, which carries wallet. There is nothing more specific to attribute it to than the membership itself.
Errors
| Status | type | Meaning |
|---|---|---|
401 | — | Token missing, expired or invalid |
500 | membership-lookup-failed | Memberships could not be read. Retryable |
A customer with no memberships gets 200 with an empty memberships array. There is no 404.
Notes
- Campaign-scoped. The token's
campaignclaim bounds the result; a membership in another campaign is not returned here. - Activation is via voucher. On membership campaigns, redeeming a voucher is what activates the membership — the voucher carries no value of its own, the campaign's discount type defines the action.
