Get Member Details
Get comprehensive member data including profile, wallet, loyalty, and contacts
/members/meOverview
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
fieldsquerystringComma-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
memberobjectrequiredCore member information
properties
externalIdstringrequiredExternal ID (matches Clerk user ID)
memberCodestringrequiredUnique member code for display
legacyJourneyUserIdstring | nullrequiredLegacy system user ID if migrated
displayNamestring | nullrequiredDisplay name (computed from first/last or email)
firstNamestring | nullrequiredFirst name from Clerk profile
lastNamestring | nullrequiredLast name from Clerk profile
avatarUrlstring | nullrequiredAvatar image URL
statusstringrequiredMember status: "active", "suspended", etc.
enrolledAtstringrequiredISO 8601 enrollment timestamp
memberSincestringrequiredHuman-readable member since date
onboardingCompletedAtstring | nullrequiredISO 8601 onboarding completion timestamp
createdAtstringrequiredISO 8601 creation timestamp
updatedAtstringrequiredISO 8601 last update timestamp
profileobject | nullrequiredExtended profile preferences (null if not set)
properties
dateOfBirthstring | nullDate of birth in YYYY-MM-DD format
genderstring | nullGender identity
nationalitystring | nullNationality
timezonestring | nullIANA timezone
languagestring | nullPreferred language code
biostring | nullMember biography
socialLinksobject | nullSocial media links
properties
linkedinstringLinkedIn profile URL
instagramstringInstagram handle
twitterstringTwitter/X handle
facebookstringFacebook profile
travelPreferencesobject | nullTravel preferences
properties
preferredAirlinesstring[]Preferred airline names
frequentFlyerProgramsobject[]Frequent flyer details
seatPreferencestringSeat preference: window, aisle, middle
mealPreferencestringMeal preference
travelClassstringTravel class preference
travelCompanionsstring[]Common travel companions
passportCountrystringPassport country code
contactsarrayrequiredVerified contact information
array items
typestringrequiredContact type: "phone" or "email"
valuestringrequiredPhone number (E.164) or email address
isPrimarybooleanrequiredWhether this is the primary contact
verifiedAtstringrequiredISO 8601 verification timestamp
walletobjectrequiredWallet balance summary
properties
spendablePointsnumberrequiredTotal spendable points (validBalance + creditBalance)
validBalancenumberrequiredVALID asset balance (earned points)
creditBalancenumberrequiredCREDIT asset balance (promotional points)
tierEligiblePointsnumberrequiredPoints earned this calendar year that count toward tier
loyaltyobjectrequiredLoyalty tier and progression information
properties
tierLevelnumberrequiredCurrent tier level (1 = Traveler/base)
tierNamestringrequiredCurrent tier name
lifetimePointsnumberrequiredTotal lifetime points earned
pointsToNextTiernumber | nullrequiredPoints needed to reach next tier (null if at max)
nextTierNamestring | nullrequiredName of next tier (null if at max)
earnYearnumber | nullrequiredYear the current tier was earned (null for base tier)
currentYearnumberrequiredCurrent calendar year
currentYearPointsnumberrequiredPoints earned in current calendar year
statusValidThroughstring | nullrequiredHuman-readable expiration date (null for base tier)
pointsToMaintainTiernumberrequiredPoints needed to re-qualify for current tier (0 if already re-qualified or base tier)
tiersarrayrequiredAll tier definitions for progress rendering
array items
tierLevelnumberrequiredTier level number
tierNamestringrequiredTier name
minPointsnumberrequiredMinimum 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:
- Traveler (Base Tier):
tierLevel == 1 - Earn Year:
tierLevel > 1 && currentYear == earnYear - Status Year:
tierLevel > 1 && currentYear == earnYear + 1 - Fallback: Treat as Traveler
Progress Bar Logic
- If
pointsToMaintainTier > 0: ShowX / Y pts to keep {tierName} - If
pointsToMaintainTier == 0: ShowX / Y pts toward {nextTierName} - If
nextTierName == null: Max tier celebration state
Related Endpoints
- Update Member - Update member display name
- Get Profile - Get profile data only
- Update Profile - Update profile preferences
- Get Wallet - Get detailed wallet information
- Validate Auth - Provision member account