Journey Docs
Members APIMember Data

Get Member Details

Get comprehensive member data including profile, wallet, loyalty, and contacts

GET/members/me

Overview

Returns comprehensive member data in a single response, including:

  • Member core data (names, status, member code)
  • Profile preferences (if set)
  • Verified contacts (phone numbers, emails)
  • Wallet balances (spendable points, tier-eligible points)
  • Loyalty status (tier level, progression, expiration)

This is the primary endpoint for fetching member data on app launch or profile pages.

Authentication

Requires a valid Clerk JWT token in the Authorization header.

Query Parameters

fieldsquerystring

Comma-separated list of fields to include. By default, all fields are returned.

Use -fieldName to exclude specific fields.

Examples:

  • ?fields=member,wallet - Only return member and wallet data
  • ?fields=-profile,-contacts - Return everything except profile and contacts

Request

curl -X GET "http://localhost:3000/v1/members/me" \
  -H "Authorization: Bearer YOUR_CLERK_JWT"

Response

memberobjectrequired

Core member information

properties
externalIdstringrequired

External ID (matches Clerk user ID)

memberCodestringrequired

Unique member code for display

legacyJourneyUserIdstring | nullrequired

Legacy system user ID if migrated

displayNamestring | nullrequired

Display name (computed from first/last or email)

firstNamestring | nullrequired

First name from Clerk profile

lastNamestring | nullrequired

Last name from Clerk profile

avatarUrlstring | nullrequired

Avatar image URL

statusstringrequired

Member status: "active", "suspended", etc.

enrolledAtstringrequired

ISO 8601 enrollment timestamp

memberSincestringrequired

Human-readable member since date

onboardingCompletedAtstring | nullrequired

ISO 8601 onboarding completion timestamp

createdAtstringrequired

ISO 8601 creation timestamp

updatedAtstringrequired

ISO 8601 last update timestamp

profileobject | nullrequired

Extended profile preferences (null if not set)

properties
dateOfBirthstring | null

Date of birth in YYYY-MM-DD format

genderstring | null

Gender identity

nationalitystring | null

Nationality

timezonestring | null

IANA timezone

languagestring | null

Preferred language code

biostring | null

Member biography

socialLinksobject | null

Social media links

properties
linkedinstring

LinkedIn profile URL

instagramstring

Instagram handle

twitterstring

Twitter/X handle

facebookstring

Facebook profile

travelPreferencesobject | null

Travel preferences

properties
preferredAirlinesstring[]

Preferred airline names

frequentFlyerProgramsobject[]

Frequent flyer details

seatPreferencestring

Seat preference: window, aisle, middle

mealPreferencestring

Meal preference

travelClassstring

Travel class preference

travelCompanionsstring[]

Common travel companions

passportCountrystring

Passport country code

contactsarrayrequired

Verified contact information

array items
typestringrequired

Contact type: "phone" or "email"

valuestringrequired

Phone number (E.164) or email address

isPrimarybooleanrequired

Whether this is the primary contact

verifiedAtstringrequired

ISO 8601 verification timestamp

walletobjectrequired

Wallet balance summary

properties
spendablePointsnumberrequired

Total spendable points (validBalance + creditBalance)

validBalancenumberrequired

VALID asset balance (earned points)

creditBalancenumberrequired

CREDIT asset balance (promotional points)

tierEligiblePointsnumberrequired

Points earned this calendar year that count toward tier

loyaltyobjectrequired

Loyalty tier and progression information

properties
tierLevelnumberrequired

Current tier level (1 = Traveler/base)

tierNamestringrequired

Current tier name

lifetimePointsnumberrequired

Total lifetime points earned

pointsToNextTiernumber | nullrequired

Points needed to reach next tier (null if at max)

nextTierNamestring | nullrequired

Name of next tier (null if at max)

earnYearnumber | nullrequired

Year the current tier was earned (null for base tier)

currentYearnumberrequired

Current calendar year

currentYearPointsnumberrequired

Points earned in current calendar year

statusValidThroughstring | nullrequired

Human-readable expiration date (null for base tier)

pointsToMaintainTiernumberrequired

Points needed to re-qualify for current tier (0 if already re-qualified or base tier)

tiersarrayrequired

All tier definitions for progress rendering

array items
tierLevelnumberrequired

Tier level number

tierNamestringrequired

Tier name

minPointsnumberrequired

Minimum points required

Response

{
  "member": {
    "externalId": "user_2abc123def456",
    "memberCode": "JRN123456",
    "legacyJourneyUserId": null,
    "displayName": "John Doe",
    "firstName": "John",
    "lastName": "Doe",
    "avatarUrl": "https://example.com/avatar.jpg",
    "status": "active",
    "enrolledAt": "2023-01-15T10:30:00Z",
    "memberSince": "January 2023",
    "onboardingCompletedAt": "2023-01-16T14:22:00Z",
    "createdAt": "2023-01-15T10:30:00Z",
    "updatedAt": "2024-04-20T09:15:00Z"
  },
  "profile": {
    "dateOfBirth": "1990-01-15",
    "gender": "male",
    "nationality": "United States",
    "timezone": "America/Los_Angeles",
    "language": "en",
    "bio": "Frequent traveler and points enthusiast",
    "socialLinks": {
      "linkedin": "https://linkedin.com/in/johndoe",
      "instagram": "@johndoe"
    },
    "travelPreferences": {
      "preferredAirlines": ["United", "Delta"],
      "frequentFlyerPrograms": [
        {
          "airline": "United",
          "number": "UA123456789"
        }
      ],
      "seatPreference": "aisle",
      "mealPreference": "vegetarian",
      "travelClass": "business",
      "travelCompanions": ["Jane Doe"],
      "passportCountry": "US"
    }
  },
  "contacts": [
    {
      "type": "email",
      "value": "john.doe@example.com",
      "isPrimary": true,
      "verifiedAt": "2023-01-15T10:30:00Z"
    },
    {
      "type": "phone",
      "value": "+15551234567",
      "isPrimary": true,
      "verifiedAt": "2023-01-15T10:35:00Z"
    }
  ],
  "wallet": {
    "spendablePoints": 25000,
    "validBalance": 23000,
    "creditBalance": 2000,
    "tierEligiblePoints": 15000
  },
  "loyalty": {
    "tierLevel": 2,
    "tierName": "Explorer",
    "lifetimePoints": 75000,
    "pointsToNextTier": 25000,
    "nextTierName": "Voyager",
    "earnYear": 2023,
    "currentYear": 2024,
    "currentYearPoints": 15000,
    "statusValidThrough": "December 31, 2025",
    "pointsToMaintainTier": 5000,
    "tiers": [
      {
        "tierLevel": 1,
        "tierName": "Traveler",
        "minPoints": 0
      },
      {
        "tierLevel": 2,
        "tierName": "Explorer",
        "minPoints": 20000
      },
      {
        "tierLevel": 3,
        "tierName": "Voyager",
        "minPoints": 50000
      },
      {
        "tierLevel": 4,
        "tierName": "Pioneer",
        "minPoints": 100000
      }
    ]
  }
}

Display State Logic

The loyalty data provides information for 4 different display states on the client:

  1. Traveler (Base Tier): tierLevel == 1
  2. Earn Year: tierLevel > 1 && currentYear == earnYear
  3. Status Year: tierLevel > 1 && currentYear == earnYear + 1
  4. Fallback: Treat as Traveler

Progress Bar Logic

  • If pointsToMaintainTier > 0: Show X / Y pts to keep {tierName}
  • If pointsToMaintainTier == 0: Show X / Y pts toward {nextTierName}
  • If nextTierName == null: Max tier celebration state

On this page