Journey Docs
Members APIReservations

Concierge Booking Request

Submit a concierge-assisted booking request for alliance properties

POST/members/me/reservations/concierge-request

Overview

Submit a booking request for an alliance property that requires concierge assistance. The API snapshots the property and stay context the member saw, alerts the Journey concierge team via Slack, and returns a booking external ID.

This endpoint is used for alliance/partner properties where real-time online booking is not available. The concierge team follows up to complete the reservation.

This is not a direct booking endpoint — it queues a concierge action. The member will be contacted to confirm the booking.

Authentication

Requires a valid Clerk JWT token.

Request Body

propertyExternalIdbodystringrequired

Property's stable external identifier (Strapi/PMS external ID)

propertyNamebodystringrequired

Property name as shown to the member at time of request (max 200 chars)

pageTemplateTypebodystring

Hotel or STR — whether this is a multi-room hotel or short-term rental. Used by the concierge to set expectations.

checkInbodystringrequired

Check-in date in YYYY-MM-DD format (ISO 8601)

checkOutbodystringrequired

Check-out date in YYYY-MM-DD format (ISO 8601)

adultsbodynumberrequired

Number of adult guests (1–20)

childrenbodynumberrequired

Number of children (0–20)

infantsbodynumber

Number of infants ages 0–2 (0–20). Forwarded to concierge for crib/setup requests. Defaults to 0.

petsbodynumber

Number of pets (0–20). Defaults to 0.

pointsRequiredbodynumber

Points total shown to the member. When provided, the server validates this matches the server-computed cost — a mismatch returns 400 POINTS_COST_MISMATCH so the client can refresh pricing before re-confirming.

cashTotalbodynumber

Cash total in USD shown to the member (≤ 2 decimal places). Same mismatch validation as pointsRequired — a 400 TOTAL_COST_MISMATCH tells the client to refresh pricing.

notesbodystring

Free-text message from the member ("anything else we should know?"). Max 500 chars.

voiceNoteTranscriptbodystring

Deepgram STT transcript of a spoken voice note. Max 5000 chars. Surfaced alongside booking details in the Slack alert.

voiceNoteDurationSecondsbodynumber

Duration of the voice note in seconds (non-negative integer). Rendered as H:MM:SS in the Slack alert.

Response

statusstringrequired

Always "received" on success

bookingExternalIdstringrequired

Stable UUID for the created booking record. Use this for any subsequent member-facing lookups. The internal numeric ID is not exposed.

totalPointCostnumberrequired

Server-computed, validated points cost. Treat this as canonical — may differ from pointsRequired if pricing shifted.

totalCostUsdnumberrequired

Server-computed member cash total for the stay (USD). Canonical — may differ from cashTotal.

Request

curl -X POST "https://api.journey.com/members/me/reservations/concierge-request" \
  -H "Authorization: Bearer YOUR_CLERK_JWT" \
  -H "Content-Type: application/json" \
  -d '{
    "propertyExternalId": "prop_ext_abc123",
    "propertyName": "The Surf Club",
    "pageTemplateType": "Hotel",
    "checkIn": "2026-07-10",
    "checkOut": "2026-07-14",
    "adults": 2,
    "children": 0,
    "pointsRequired": 12000,
    "cashTotal": 450.00,
    "notes": "Celebrating an anniversary — any room upgrades appreciated"
  }'

Response

{
  "status": "received",
  "bookingExternalId": "12345678-1234-5678-9012-123456789012",
  "totalPointCost": 12000,
  "totalCostUsd": 450.00
}

Error Codes

CodeMeaning
POINTS_COST_MISMATCHpointsRequired doesn't match server-computed cost — refresh pricing and retry
TOTAL_COST_MISMATCHcashTotal doesn't match server-computed total — refresh pricing and retry

On this page