My Rider

Developer Docs

Integrate My Rider guest preference data directly into your PMS, POS, or CRM. Pull verified preferences, AI insights, and ready-made revenue opportunities for any guest who has shared their MRN with you.

REST API · JSON
API access requires Pro or Growth plan

Authentication

All API requests must include your API key as a Bearer token in the Authorization header. Your API key is available in the My Rider partner portal after signing in.

Request header
Authorization: Bearer mk_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

⚠️ Keep your API key private. Do not expose it in client-side code or public repositories. If compromised, contact us to rotate it.

Base URL

https://buildmyrider.com

All endpoints are versioned under /api/v1/. Prefix every path below with the base URL above.

Endpoints

GET/api/v1/rider/:mrn

Fetch full preference profile for a guest by their My Rider Number.

GET/api/v1/rider/:mrn/opportunities

Fetch AI insights and revenue opportunities for a guest's most recent rider.

GET /api/v1/rider/:mrn

Returns the full preference profile for the guest with the given MRN. Guests may have multiple riders (one per trip mode). Use the trip_mode query parameter to filter to a specific one.

Path parameters

:mrnstringThe guest's My Rider Number, e.g. MYR-AB12CD. Case-insensitive.

Query parameters

trip_modeoptionalstringFilter riders by mode. One of: leisure, business, family, adventure, romance. Omit to return all.

Example request

curl
curl -X GET "https://buildmyrider.com/api/v1/rider/MYR-AB12CD" \
  -H "Authorization: Bearer mk_your_api_key"

Example response

200 OK · application/json
{
  "mrn": "MYR-AB12CD",
  "name": "Jane Smith",
  "birthday": { "month": "3", "day": "14" },
  "favorite_travel": "Beach destinations",
  "retrieved_by": "The Grand Hotel",
  "retrieved_at": "2026-04-23T10:00:00.000Z",
  "riders": [
    {
      "trip_mode": "leisure",
      "vibe": "luxury",
      "breakfast": "Avocado toast and fresh juice",
      "juice": "Green juice",
      "coffee": "Oat milk flat white",
      "activity": "Morning yoga",
      "news": "The New York Times",
      "snack": "Dark chocolate",
      "beverage": "Sparkling water",
      "liquor": "Champagne",
      "indulgence": "Long bath with candles",
      "gift": "Fresh flowers",
      "scent": "Jasmine",
      "children": null,
      "partner_mrn": "MYR-XY99ZZ",
      "share_id": "abc123"
    }
  ]
}

Response fields

mrnstringThe guest's My Rider Number.
namestringGuest's display name.
birthdayobject | nullBirth month and day (no year). Null if not provided.
favorite_travelstring | nullGuest's self-described travel style.
retrieved_bystringYour business name, confirming the request was attributed correctly.
retrieved_atstringISO 8601 timestamp of this API call.
ridersarrayAll riders for this guest (or filtered by trip_mode). May be empty.
riders[].trip_modestringOne of: leisure, business, family, adventure, romance.
riders[].vibestringGuest personality: comfort, explorer, wellness, luxury, adventure, headsdown.
riders[].breakfaststringPreferred breakfast.
riders[].coffeestringCoffee or tea preference.
riders[].juicestringMorning juice preference.
riders[].activitystringMorning activity or ritual.
riders[].snackstringPreferred snack.
riders[].beveragestringNon-alcoholic afternoon beverage.
riders[].liquorstringAlcoholic drink preference. May be 'none'.
riders[].indulgencestringSignature personal indulgence.
riders[].giftstringIdeal welcome gift.
riders[].scentstringPreferred room scent.
riders[].newsstringPreferred news source.
riders[].partner_mrnstring | nullLinked partner's MRN, if the guest connected a partner rider.
riders[].childrenarray | nullChild preference objects (name, age, breakfast, snack, drink, activity, allergies). Null if no children.

GET /api/v1/rider/:mrn/opportunities

Returns AI-generated preference insights and personalized revenue opportunities for the guest's most recent rider. Each opportunity includes a ready-to-use email template. Ideal for triggering pre-arrival upsell emails automatically from your PMS.

Query parameters

trip_modeoptionalstringFilter to a specific rider. Same values as above.

Example request

curl
curl -X GET "https://buildmyrider.com/api/v1/rider/MYR-AB12CD/opportunities" \
  -H "Authorization: Bearer mk_your_api_key"

Example response

200 OK · application/json
{
  "mrn": "MYR-AB12CD",
  "name": "Jane Smith",
  "trip_mode": "leisure",
  "vibe": "luxury",
  "retrieved_by": "The Grand Hotel",
  "retrieved_at": "2026-04-23T10:00:00.000Z",
  "insights": [
    {
      "icon": "🌱",
      "label": "Morning Drink",
      "value": "Plant-based preference — have oat or almond milk available."
    },
    {
      "icon": "🧘",
      "label": "Morning Ritual",
      "value": "Wellness-oriented — offer a quiet space or yoga mat on request."
    }
  ],
  "opportunities": [
    {
      "category": "Wellness",
      "icon": "🧘",
      "title": "In-room yoga or meditation session",
      "description": "Jane practices yoga. Offer a private in-room session with a local instructor.",
      "revenue_estimate": "$50–150 per session",
      "email_subject": "Your peaceful morning — in-room yoga available during your stay",
      "email_body": "Hi Jane,\n\nWe noticed you enjoy yoga..."
    }
  ],
  "opportunity_summary": {
    "total_count": 3,
    "categories": ["Wellness", "Food & Beverage", "Welcome"],
    "estimated_revenue_range": "$20–150 per stay"
  }
}

Response fields

insightsarrayAI-generated preference notes. Each has icon, label, value.
opportunitiesarrayPersonalized upsell opportunities.
opportunities[].categorystringOne of: Food & Beverage, Experiences, Wellness, Upgrades, Family, Welcome.
opportunities[].revenue_estimatestringEstimated revenue range, e.g. '$50–150 per session'.
opportunities[].email_subjectstringReady-to-send email subject line.
opportunities[].email_bodystringReady-to-send email body, personalized with guest name and your property name.
opportunity_summaryobjectQuick summary: total count, categories, and combined revenue range.

Error codes

401 UnauthorizedAPI key is missing or invalid. Check your Authorization header.
403 ForbiddenYour API key is valid but the account is inactive. Contact support.
404 Not FoundNo rider found for this MRN, or the MRN doesn't exist.
400 Bad RequestMalformed request (e.g. invalid query parameter).
500 Internal Server ErrorSomething went wrong on our end. Try again or contact support.

All error responses follow the shape: { "error": "message" }

Trip mode values

Use these exact strings with the trip_mode query parameter:

leisure🌴Leisure / holiday travel
business💼Business travel
family👨‍👩‍👧Family trips — includes children preferences
adventure🧗Adventure / outdoor travel
romance💑Couples / romantic travel

Code examples

Node.js

node.js
const MRN = 'MYR-AB12CD'
const API_KEY = process.env.MY_RIDER_API_KEY

const res = await fetch(
  `https://buildmyrider.com/api/v1/rider/${MRN}`,
  { headers: { Authorization: `Bearer ${API_KEY}` } }
)

if (!res.ok) {
  const { error } = await res.json()
  throw new Error(error)
}

const guest = await res.json()
console.log(guest.name, guest.riders[0].coffee)

Python

python
import os, requests

MRN = "MYR-AB12CD"
API_KEY = os.environ["MY_RIDER_API_KEY"]

response = requests.get(
    f"https://buildmyrider.com/api/v1/rider/{MRN}",
    headers={"Authorization": f"Bearer {API_KEY}"}
)
response.raise_for_status()

guest = response.json()
print(guest["name"], guest["riders"][0]["coffee"])

Fetch opportunities & auto-send email

node.js — pre-arrival trigger
// Run this when a reservation is confirmed
async function sendPreArrivalEmail(mrn, guestEmail) {
  const res = await fetch(
    `https://buildmyrider.com/api/v1/rider/${mrn}/opportunities`,
    { headers: { Authorization: `Bearer ${process.env.MY_RIDER_API_KEY}` } }
  )
  const data = await res.json()

  if (!data.opportunities?.length) return

  // Pick the highest-value opportunity
  const top = data.opportunities[0]

  await sendEmail({
    to: guestEmail,
    subject: top.email_subject,
    body: top.email_body,
  })
}

Rate limits & tiers

API access is available on Pro ($99/mo) and Growth ($299/mo) plans. Starter plan ($29/mo) includes manual portal lookup only.

PlanMonthly lookupsAPI accessWebhooks
Starter50
Pro300
Growth1,000

Need more than 1,000 lookups/month? Contact us for Enterprise pricing.

Ready to integrate?

Sign up for a Pro or Growth plan to get your API key.

Create a partner account →