Journey Docs
Members APIAuthentication

Add Verified Contact

Sync verified contact and link reservations

POST/members/me/auth/verified-contact

Overview

Call this endpoint after verifying a new email/phone via Clerk OTP to:

  1. Add the contact to verified contacts (if unique)
  2. Search for unlinked reservations matching this contact
  3. Link matching reservations with appropriate financial handling
  4. Return detailed results for client display

Authentication

Requires a valid Clerk JWT token in the Authorization header.

Request Body

typebodystringrequired

Contact type: "phone" or "email"

valuebodystringrequired

Phone number (E.164 format) or email address

claimReservationIdbodynumber

Optional specific reservation ID to claim during this verification

Request

curl -X POST "http://localhost:3000/v1/members/me/auth/verified-contact" \
  -H "Authorization: Bearer YOUR_CLERK_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "email",
    "value": "john.doe@example.com"
  }'

Response

contactobjectrequired

Contact sync result

properties
statusstringrequired

Contact status: "added", "exists", or "rejected"

reasonstring

Additional context for the status

reservationsLinkednumberrequired

Number of reservations successfully linked

totalCreditIssuednumberrequired

Total CREDIT points issued for future checkouts

totalValidAwardednumberrequired

Total VALID points awarded from escrow conversion

linkedReservationsarrayrequired

Details of each linked reservation

array items
reservationIdnumberrequired

Reservation ID

confirmationCodestringrequired

Reservation confirmation code

propertyNamestringrequired

Property name

checkInDatestringrequired

Check-in date

checkOutDatestringrequired

Check-out date

financialOutcomestringrequired

Financial result: "PENDING_FUTURE", "WITHIN_CLAIM_WINDOW", "CLAIM_WINDOW_EXPIRED"

pointsAwardednumberrequired

Points awarded for this reservation

awardContextstringrequired

Award context: "UNCLAIMED", "MEMBER_ENROLLED", "MEMBER_INELIGIBLE", "MEMBER_DIRECT", "MEMBER_INDIRECT"

Response

{
  "contact": {
    "status": "added",
    "reason": "Contact successfully verified and added"
  },
  "reservationsLinked": 2,
  "totalCreditIssued": 1500,
  "totalValidAwarded": 2500,
  "linkedReservations": [
    {
      "reservationId": 12345,
      "confirmationCode": "ABC123",
      "propertyName": "Luxury Resort & Spa",
      "checkInDate": "2024-05-15",
      "checkOutDate": "2024-05-18",
      "financialOutcome": "PENDING_FUTURE",
      "pointsAwarded": 1500,
      "awardContext": "MEMBER_ENROLLED"
    },
    {
      "reservationId": 12346,
      "confirmationCode": "XYZ789",
      "propertyName": "Downtown Hotel",
      "checkInDate": "2024-03-10",
      "checkOutDate": "2024-03-12",
      "financialOutcome": "WITHIN_CLAIM_WINDOW",
      "pointsAwarded": 2500,
      "awardContext": "MEMBER_ENROLLED"
    }
  ]
}

Financial Outcomes

Different financial outcomes based on reservation timing:

PENDING_FUTURE

  • When: Checkout date is in the future
  • Action: Issues CREDIT points for immediate spending
  • Points: Available immediately in member wallet

WITHIN_CLAIM_WINDOW

  • When: Recently checked out (within claim window)
  • Action: Converts escrow to VALID points
  • Points: Added to lifetime/tier-eligible totals

CLAIM_WINDOW_EXPIRED

  • When: Old checkout beyond claim window
  • Action: Link for data only, no points awarded
  • Points: 0 (window missed)

Award Contexts

Different scenarios based on member status at booking time:

UNCLAIMED

  • When: No member was linked at booking time
  • Award: 1x points from escrow holding tank

MEMBER_ENROLLED

  • When: First-time linking for new member
  • Award: One-time 1x award from Journey funding wallet

MEMBER_INELIGIBLE

  • When: Late-joiner but signup bonus already used
  • Award: 0x points (escrow voided)

MEMBER_DIRECT

  • When: Member existed before booking, direct channel
  • Award: 5x points multiplier

MEMBER_INDIRECT

  • When: Member existed before booking, non-direct channel
  • Award: 0x points (escrow voided)

On this page