List my memberships

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.

Recent Requests
Log in to see full request history
TimeStatusUser Agent
Retrieving recent requests…
LoadingLoading…

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 no meta envelope field, and data is an object containing memberships rather than a bare array. It is shaped differently from the other collection endpoints — read data.memberships.

FieldMeaning
campaign_idThe campaign the membership belongs to
activeWhether it currently confers benefits
typeTier — e.g. GOLD, SILVER. null when the campaign issues untyped memberships
activated_atWhen it was activated
activated_byWhat activated it — typically the voucher code. null when unknown
last_updatedLast state change

Check active, not presence

An 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

Campaigns 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

Usually 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

StatustypeMeaning
401Token missing, expired or invalid
500membership-lookup-failedMemberships 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 campaign claim 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.
Headers
uuid
required

Campaign scope for this request. Filters content to the specified campaign.

string
enum
Defaults to application/json

Generated from available response content types

Allowed:
Responses

Language
Credentials
Bearer
JWT
URL
LoadingLoading…
Response
Click Try It! to start a request and see the response here! Or choose an example:
application/json
application/problem+json