AI Monorepo API

tRPC API Documentation

211
Total Endpoints
211
Public Endpoints
108 Queries β€’ 101 Mutations
0
Protected Endpoints
0 Queries β€’ 0 Mutations

Analytics

query
Scheduled Today analytics.scheduledToday
Analytics

Distinct talent, locations, and entry count for today's schedule.

Input Schema
{
  today: any
}
Output Schema
{
  talentCount: number
  locationCount: number
  scheduleCount: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Talent Count analytics.talentCount
Analytics

Roster size split into on-site (active) vs off-roster (hidden) talent.

Output Schema
{
  total: number
  active: number
  hidden: number
}
Test Endpoint
query
Weekly Breakdown analytics.weeklyBreakdown
Analytics

Schedule count per day for the current week (Mon–Sun).

Input Schema
{
  today: any
}
Output Schema
Array<{
  date: string
  value: number
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Weekly Talent Count analytics.weeklyTalentCount
Analytics

Distinct talent scheduled at least one day this week (Mon–Sun).

Input Schema
{
  today: any
}
Output Schema
number
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Talents by Location analytics.talentsByLocation
Analytics

Unique talent count per location for the current week.

Input Schema
{
  today: any
}
Output Schema
Array<{
  name: string
  value: number
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Incomplete Profiles analytics.incompleteProfiles
Analytics

Count of roster talent missing each profile field.

Output Schema
Array<{
  name: "Photos" | "Bio" | "Tagline" | "Age" | "Height" | "Weight" | "Measurements" | "Fees" | "Menus" | "Services" | "Notes"
  talents: string[]
}>
Test Endpoint
query
Talent Stats analytics.talentStats
Analytics

Each talent's all-time booking rhythm: calls per day worked, the same split by weekday, and the hours her calls start.

Output Schema
Array<{
  talentId: string
  nickname: string
  totalCalls: number
  daysWorked: number
  avgPerDay: number
  busiestWeekday: number | null
  busiestHour: number | null
  byWeekday: Array<{
    weekday: number
    calls: number
    daysWorked: number
    avgPerDay: number
  }>
  byHour: Array<{
    hour: number
    calls: number
  }>
}>
Test Endpoint

Appointment

query
Appointments by Schedule appointment.bySchedule
Appointment

A schedule with its appointments and the derived day totals β€” the daily tracker detail summary (Due / Paid / Balance + the Credit/Paid/Miss state)

Input Schema
{
  scheduleId: string
}
Output Schema
{
  schedule: {
    id: string
    talentId: string
    talentName: string
    locationId: string
    locationName: string
    locationDeleted: boolean
    city: string
    date: string | any
    category: "Hotel" | "Airbnb" | "Condo"
    talentBookOnFee: number | null
    flatFee: number | null
    bookOn: number | null
    notes?: string | null
    envelopeDroppedAt: string | any | null
  }
  appointments: Array<{
    id: string
    scheduleId: string
    startTime: string | null
    clientId: string
    clientName: string
    menuId: string | null
    menuLabel: string | null
    fee: number
    discount: number
    bookedByUserId: string | null
    bookerName: string | null
    bookerPay: number
    paidToUserId: string | null
    payeeName: string | null
    confirmed: boolean
    services: Array<{
      id: string
      appointmentId: string
      menuServiceId: string
      serviceName: string
      fee: number
    }>
    notes?: string | null
    cancelledAt: string | any | null
    isCarrier: boolean
    isIndy: boolean
    wrappedUpAt: string | any | null
    wrapUpNoShow: boolean
    wrapUpExtraMinutes: number
    wrapUpNotes: string | null
    wrapUpExtras: Array<{
      menuServiceId: string
      name: string
      price: number
    }>
    paid: number
  }>
  due: number
  paid: number
  balance: number
  status: "credit" | "paid" | "miss"
  cancellationIncome: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Appointments by Date appointment.byDate
Appointment

A day's live appointments across every schedule β€” the booking grid's one read (LUX-246); cancelled and carrier rows never appear

Input Schema
{
  date: any
}
Output Schema
Array<{
  id: string
  scheduleId: string
  startTime: string | null
  clientId: string
  clientName: string
  menuId: string | null
  menuLabel: string | null
  fee: number
  discount: number
  bookedByUserId: string | null
  bookerName: string | null
  bookerPay: number
  paidToUserId: string | null
  payeeName: string | null
  confirmed: boolean
  services: Array<{
    id: string
    appointmentId: string
    menuServiceId: string
    serviceName: string
    fee: number
  }>
  notes?: string | null
  cancelledAt: string | any | null
  isCarrier: boolean
  isIndy: boolean
  wrappedUpAt: string | any | null
  wrapUpNoShow: boolean
  wrapUpExtraMinutes: number
  wrapUpNotes: string | null
  wrapUpExtras: Array<{
    menuServiceId: string
    name: string
    price: number
  }>
  paid: number
  durationMinutes: number | null
  menuType: string | null
  menuPrice: number | null
  price: number
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Appointment by Id appointment.byId
Appointment

One appointment for the edit form

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  scheduleId: string
  startTime: string | null
  clientId: string
  clientName: string
  menuId: string | null
  menuLabel: string | null
  fee: number
  discount: number
  bookedByUserId: string | null
  bookerName: string | null
  bookerPay: number
  paidToUserId: string | null
  payeeName: string | null
  confirmed: boolean
  services: Array<{
    id: string
    appointmentId: string
    menuServiceId: string
    serviceName: string
    fee: number
  }>
  notes?: string | null
  cancelledAt: string | any | null
  isCarrier: boolean
  isIndy: boolean
  wrappedUpAt: string | any | null
  wrapUpNoShow: boolean
  wrapUpExtraMinutes: number
  wrapUpNotes: string | null
  wrapUpExtras: Array<{
    menuServiceId: string
    name: string
    price: number
  }>
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Appointments by Client appointment.byClient
Appointment

A client's appointments in this brand (newest first) β€” the picker for applying a credit to a booking (LUX-113)

Input Schema
{
  clientId: string
}
Output Schema
Array<{
  id: string
  date: string | any
  startTime: string | null
  talentName: string
  locationName: string
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create Appointment appointment.create
Appointment

Books an appointment; fee and per-line service fees are captured from the menu catalog, never from the client

Input Schema
{
  scheduleId: string
  clientId: string
  menuId: string
  bookedByUserId: string
  phoneNumberId?: string | null
  paidToUserId?: string | null
  startTime?: string | null
  discount: number
  confirmed: boolean
  isIndy: boolean
  notes?: string | null
  services: Array<{
    menuServiceId: string
  }>
}
Output Schema
{
  id: string
  scheduleId: string
  startTime: string | null
  clientId: string
  clientName: string
  menuId: string | null
  menuLabel: string | null
  fee: number
  discount: number
  bookedByUserId: string | null
  bookerName: string | null
  bookerPay: number
  paidToUserId: string | null
  payeeName: string | null
  confirmed: boolean
  services: Array<{
    id: string
    appointmentId: string
    menuServiceId: string
    serviceName: string
    fee: number
  }>
  notes?: string | null
  cancelledAt: string | any | null
  isCarrier: boolean
  isIndy: boolean
  wrappedUpAt: string | any | null
  wrapUpNoShow: boolean
  wrapUpExtraMinutes: number
  wrapUpNotes: string | null
  wrapUpExtras: Array<{
    menuServiceId: string
    name: string
    price: number
  }>
}
Test Endpoint
Optional fields (click to add):
phoneNumberId paidToUserId startTime notes
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Import a Day of Appointments appointment.importDay
Appointment

Historical import only (LUX-120): replaces a schedule-day's synthesized appointments + their payments, and upserts the day's book-on onto its daily report β€” one transaction, so the day lands whole or not at all (D92). The DOCUMENTED D67 EXCEPTION β€” the only write that accepts an explicit fee, because the sheet's total is history and re-capturing it from the talent's current Menu.fee would import today's price. Idempotent: only rows marked imported are replaced, never an operator's real booking. 404 unless the schedule belongs to the requesting company

Input Schema
{
  scheduleId: string
  clientId: string
  bookedByUserId?: string | null
  callCount: number
  serviceTotal: number
  payments: Array<{
    method: "EMT" | "AmazonGiftCard" | "Cash" | "TalentCredit"
    amount: number
  }>
  bookOn: number
  bookerSplit: Array<{
    bookedByUserId: string
    calls: number
  }>
  calls?: Array<{
    fee: number
    startTime?: string | null
    notes?: string | null
    isIndy: boolean
    menuId?: string | null
  }>
  cancellations: Array<{
    fee: number
    deposit: number
    startTime?: string | null
    notes?: string | null
    method?: "EMT" | "AmazonGiftCard" | "Cash" | "TalentCredit" | null
  }>
}
Output Schema
{
  replaced: number
  dayExisted: boolean
  appointments: Array<{
    id: string
    scheduleId: string
    startTime: string | null
    clientId: string
    clientName: string
    menuId: string | null
    menuLabel: string | null
    fee: number
    discount: number
    bookedByUserId: string | null
    bookerName: string | null
    bookerPay: number
    paidToUserId: string | null
    payeeName: string | null
    confirmed: boolean
    services: Array<{
      id: string
      appointmentId: string
      menuServiceId: string
      serviceName: string
      fee: number
    }>
    notes?: string | null
    cancelledAt: string | any | null
    isCarrier: boolean
    isIndy: boolean
    wrappedUpAt: string | any | null
    wrapUpNoShow: boolean
    wrapUpExtraMinutes: number
    wrapUpNotes: string | null
    wrapUpExtras: Array<{
      menuServiceId: string
      name: string
      price: number
    }>
  }>
}
Test Endpoint
Optional fields (click to add):
bookedByUserId calls
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Appointment appointment.update
Appointment

Edits an appointment; re-captures the fee and replaces the service lines

Input Schema
{
  scheduleId: string
  clientId: string
  menuId: string
  bookedByUserId: string
  phoneNumberId?: string | null
  paidToUserId?: string | null
  startTime?: string | null
  discount?: number
  confirmed?: boolean
  isIndy?: boolean
  notes?: string | null
  services?: Array<{
    menuServiceId: string
  }>
  id: string
}
Output Schema
{
  id: string
  scheduleId: string
  startTime: string | null
  clientId: string
  clientName: string
  menuId: string | null
  menuLabel: string | null
  fee: number
  discount: number
  bookedByUserId: string | null
  bookerName: string | null
  bookerPay: number
  paidToUserId: string | null
  payeeName: string | null
  confirmed: boolean
  services: Array<{
    id: string
    appointmentId: string
    menuServiceId: string
    serviceName: string
    fee: number
  }>
  notes?: string | null
  cancelledAt: string | any | null
  isCarrier: boolean
  isIndy: boolean
  wrappedUpAt: string | any | null
  wrapUpNoShow: boolean
  wrapUpExtraMinutes: number
  wrapUpNotes: string | null
  wrapUpExtras: Array<{
    menuServiceId: string
    name: string
    price: number
  }>
}
Test Endpoint
Optional fields (click to add):
phoneNumberId paidToUserId startTime discount confirmed isIndy notes services
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Appointment appointment.delete
Appointment

Removes an appointment

Input Schema
{
  id: string
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Daily Tracker List appointment.dailyTrackerList
Appointment

Schedules in a date range with the derived Due, Paid, Balance and the Credit/Paid/Miss state, computed server-side. An admin reads the whole range; a booker reads only the days she covered a line, Β±1 week of today (LUX-235)

Input Schema
{
  startDate: any
  endDate: any
}
Output Schema
Array<{
  scheduleId: string
  date: string | any
  talentName: string
  locationName: string
  city: string
  calls: number
  due: number
  paid: number
  balance: number
  status: "credit" | "paid" | "miss"
  bookOn: number | null
  cancellationIncome: number
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Appointments by Date Range appointment.byDateRange
Appointment

One page of appointments across the company's talents, joined to its schedule for display β€” the browse-by-date list. Every filter (date range, talent, search) is applied server-side; omitting both date bounds is 'All dates'

Input Schema
{
  page: number
  pageSize: number
  startDate?: any
  endDate?: any
  talentId?: string
  search?: string
}
Output Schema
{
  items: Array<{
    id: string
    scheduleId: string
    startTime: string | null
    clientId: string
    clientName: string
    menuId: string | null
    menuLabel: string | null
    fee: number
    discount: number
    bookedByUserId: string | null
    bookerName: string | null
    bookerPay: number
    paidToUserId: string | null
    payeeName: string | null
    confirmed: boolean
    services: Array<{
      id: string
      appointmentId: string
      menuServiceId: string
      serviceName: string
      fee: number
    }>
    notes?: string | null
    cancelledAt: string | any | null
    isCarrier: boolean
    isIndy: boolean
    wrappedUpAt: string | any | null
    wrapUpNoShow: boolean
    wrapUpExtraMinutes: number
    wrapUpNotes: string | null
    wrapUpExtras: Array<{
      menuServiceId: string
      name: string
      price: number
    }>
    date: string | any
    talentId: string
    talentName: string
    locationName: string
    city: string
  }>
  total: number
}
Test Endpoint
Optional fields (click to add):
startDate endDate talentId search
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Auth

mutation
Login auth.login
Auth

Authenticate with email and password

Input Schema
{
  email: string
  password: string
}
Output Schema
{
  token: string | null
  user: {
    id: string
    email: string
    name: string | null
    image: string | null
    emailVerified: boolean
  }
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Booker

query
List Bookers booker.list
Bookers

Returns all bookers (Users with role 'booker'), name ascending, each with its pay rate (null until set)

Output Schema
Array<{
  id: string
  name: string
  payRate: number | null
  active: boolean
}>
Test Endpoint
mutation
Set Booker Active booker.setActive
Bookers

Deactivates a booker or brings her back (LUX-250). Deactivating ends her login and clears her phone coverage from `today` on; her bookings, pay rate and payroll history are untouched, and the days she already worked stay on the grid. Bookers only β€” any other role is NOT_FOUND. Deactivating your own account is FORBIDDEN

Input Schema
{
  userId: string
  active: boolean
  today: any
}
Output Schema
any
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Set Booker Pay Rate booker.setPayRate
Bookers

Sets a booker's pay rate β€” whole dollars per booked appointment (D76); upserts by user. New appointments stamp this rate; past ones are unchanged

Input Schema
{
  userId: string
  amount: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Booker Payroll booker.payroll
Bookers

Per-booker Mon–Sun weeks: calls booked, pay owed (Ξ£ stamped bookerPay), and whether the week has been paid β€” most recent first (D76/D77)

Output Schema
Array<{
  userId: string
  bookerName: string
  weekStart: string | any
  weekEnd: string | any
  calls: number
  amount: number
  cancellationPay: number
  paidOn: string | any | null
  paidAmount: number | null
}>
Test Endpoint
mutation
Confirm Booker Paid booker.confirmPaid
Bookers

Marks one booker's Mon–Sun week as paid, snapshotting the amount the server computes for that week; confirming the same week again overwrites rather than double-paying

Input Schema
{
  userId: string
  weekStart: string | any
  paidOn: string | any
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

BookerSchedule

query
List Booker Schedule bookerSchedule.list
Bookers

Returns booker coverage entries for an inclusive date range, date then startsAt ascending

Input Schema
{
  from: any
  to: any
}
Output Schema
Array<{
  id: string
  userId: string
  phoneNumberId: string
  date: string | any
  startsAt: string
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Set Booker Schedule Day bookerSchedule.setDay
Bookers

Replaces one number+date's coverage wholesale β€” the final list of takeovers for that day; empty clears it. A booker already covering another number that day is a CONFLICT (one shift per day)

Input Schema
{
  phoneNumberId: string
  date: any
  shifts: Array<{
    userId: string
    startsAt: string
  }>
}
Output Schema
any
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

City

query
List Cities city.list
Cities

Returns the requesting company's cities in display order

Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string
  sortOrder: number
}>
Test Endpoint
mutation
Reorder Cities city.reorder
Cities

Batch-update the display order of city sections for the requesting company

Input Schema
{
  orderedIds: string[]
}
Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string
  sortOrder: number
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create City city.create
Cities

Onboards a city by name for the requesting company; returns the existing city if the name is already used

Input Schema
{
  name: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string
  sortOrder: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Rename City city.rename
Cities

Renames a city owned by the requesting company; 404 unless it belongs to the company, 409 if the name is already used

Input Schema
{
  id: string
  name: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string
  sortOrder: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete City city.delete
Cities

Deletes a city owned by the requesting company; 404 unless it belongs to the company, 400 while it still has locations

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string
  sortOrder: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Client

query
List Clients client.list
Clients

One page of clients (global across brands), identity fields only, with the total matching the search

Input Schema
{
  page: number
  pageSize: number
  search?: string
}
Output Schema
{
  items: Array<{
    id: string
    code: string
    name: string | null
    phone: string
    cafHandle: string | null
    perbHandle: string | null
    isBlacklisted: boolean
    isConfirmed: boolean
  }>
  total: number
}
Test Endpoint
Optional fields (click to add):
search
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
List All Clients client.listAll
Clients

Returns every client unpaginated, identity fields only β€” for the importer’s phone dedup index; the admin list uses `client.list`

Output Schema
Array<{
  id: string
  code: string
  name: string | null
  phone: string
  cafHandle: string | null
  perbHandle: string | null
  isBlacklisted: boolean
  isConfirmed: boolean
}>
Test Endpoint
query
Get Clients by IDs client.byIds
Clients

Returns the named clients in the list projection. Ids are deduped and unknown ids are OMITTED, so the result may be shorter than the input β€” it is never an error

Input Schema
{
  ids: string[]
}
Output Schema
Array<{
  id: string
  code: string
  name: string | null
  phone: string
  cafHandle: string | null
  perbHandle: string | null
  isBlacklisted: boolean
  isConfirmed: boolean
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Client by ID client.byId
Clients

Returns a client by ID, with the brands they booked through

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  code: string
  name: string | null
  phone: string
  email: string | null
  city: string | null
  ageRange: string | null
  ethnicity: string | null
  notes: string | null
  cafHandle: string | null
  perbHandle: string | null
  isBlacklisted: boolean
  blacklistReason: "NoShow" | "TimeWaster" | "Aggressive" | "NoDeposit" | "NonCooperative" | "HygieneIssues" | null
  isConfirmed: boolean
  brands: string[]
  otherPhones: string[]
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Client Booking History client.visits
Clients

How many times a client has booked and the few bookings that matter while answering them β€” upcoming soonest-first, then recent past. Across every brand, cancellations excluded. `today` is the caller's local date.

Input Schema
{
  clientId: string
  today: any
}
Output Schema
{
  total: number
  visits: Array<{
    id: string
    date: string | any
    startTime: string | null
    talentName: string
    locationName: string | null
    city: string | null
    upcoming: boolean
    locationId: string | null
  }>
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Client Booking Profile client.bookingProfile
Clients

What a client usually books, ranked most-requested first: package, extras, and the talent they book. Counts exactly what `client.visits` counts β€” every non-cancelled booking across every brand, upcoming included β€” so the two never disagree.

Input Schema
{
  clientId: string
}
Output Schema
{
  total: number
  firstBookedAt: string | any | null
  packages: Array<{
    label: string
    count: number
  }>
  extras: Array<{
    label: string
    count: number
  }>
  talent: Array<{
    label: string
    count: number
    lastBooked: string | any
  }>
  visits: Array<{
    id: string
    date: string | any
    startTime: string | null
    talentName: string
    locationName: string | null
    city: string | null
    menuLabel: string | null
    extras: string[]
  }>
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create Client client.create
Clients

Creates a client β€” phone is the global dedup key

Input Schema
{
  name?: any | null
  phone: string
  email?: string | null
  city?: string | null
  ageRange?: "20-30" | "30-40" | "40-50" | "50+" | null
  ethnicity?: string | null
  notes?: string | null
  cafHandle?: string | null
  perbHandle?: string | null
  isBlacklisted?: boolean
  blacklistReason?: "NoShow" | "TimeWaster" | "Aggressive" | "NoDeposit" | "NonCooperative" | "HygieneIssues" | null
  isConfirmed?: boolean
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  code: string
  name: string | null
  phone: string
  email: string | null
  city: string | null
  ageRange: string | null
  ethnicity: string | null
  notes: string | null
  cafHandle: string | null
  perbHandle: string | null
  isBlacklisted: boolean
  blacklistReason: "NoShow" | "TimeWaster" | "Aggressive" | "NoDeposit" | "NonCooperative" | "HygieneIssues" | null
  isConfirmed: boolean
}
Test Endpoint
Optional fields (click to add):
name email city ageRange ethnicity notes cafHandle perbHandle isBlacklisted blacklistReason isConfirmed
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Client client.update
Clients

Updates a client

Input Schema
{
  name?: any | null
  phone?: string
  email?: string | null
  city?: string | null
  ageRange?: "20-30" | "30-40" | "40-50" | "50+" | null
  ethnicity?: string | null
  notes?: string | null
  cafHandle?: string | null
  perbHandle?: string | null
  isBlacklisted?: boolean
  blacklistReason?: "NoShow" | "TimeWaster" | "Aggressive" | "NoDeposit" | "NonCooperative" | "HygieneIssues" | null
  isConfirmed?: boolean
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  code: string
  name: string | null
  phone: string
  email: string | null
  city: string | null
  ageRange: string | null
  ethnicity: string | null
  notes: string | null
  cafHandle: string | null
  perbHandle: string | null
  isBlacklisted: boolean
  blacklistReason: "NoShow" | "TimeWaster" | "Aggressive" | "NoDeposit" | "NonCooperative" | "HygieneIssues" | null
  isConfirmed: boolean
}
Test Endpoint
Optional fields (click to add):
name phone email city ageRange ethnicity notes cafHandle perbHandle isBlacklisted blacklistReason isConfirmed
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Merge Client Profiles client.merge
Clients

Folds one client profile into another and retires it: bookings, credits, conversations and the Don't-See list move to the surviving client, whose code and phone are kept, and the retired profile's number stays linked so texts from it resolve to the survivor. Irreversible.

Input Schema
{
  keepClientId: string
  mergeClientId: string
}
Output Schema
{
  keptCode: string
  retiredCode: string
  linkedPhone: string
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
List Client Exclusions client.listExclusions
Clients

Returns the ids of talents on a client's Don't-See list

Input Schema
{
  clientId: string
}
Output Schema
string[]
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Add Client Exclusions client.addExclusions
Clients

Adds talents to a client's Don't-See list, removing none β€” returns how many were new

Input Schema
{
  clientId: string
  talentIds: string[]
}
Output Schema
{
  added: number
  talentIds: string[]
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Mark Client Confirmed client.markConfirmed
Clients

Marks a client as confirmed, never the reverse β€” returns whether this call changed it

Input Schema
{
  clientId: string
}
Output Schema
{
  promoted: boolean
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Mark Client Blacklisted client.markBlacklisted
Clients

Blocks a client who carries no reason, never re-categorizing one who does β€” returns whether this call changed it

Input Schema
{
  clientId: string
  blacklistReason: "NoShow" | "TimeWaster" | "Aggressive" | "NoDeposit" | "NonCooperative" | "HygieneIssues"
}
Output Schema
{
  blocked: boolean
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Set Client City client.setCity
Clients

Places a client who has no city, never moving one who does β€” returns whether this call changed it

Input Schema
{
  clientId: string
  city: string
}
Output Schema
{
  filled: boolean
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Set Client Exclusions client.setExclusions
Clients

Replaces a client's Don't-See list β€” the talents who won't see this client

Input Schema
{
  clientId: string
  talentIds: string[]
}
Output Schema
string[]
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

ClientCredit

query
Client Credits clientCredit.byClient
ClientCredit

A client's prepaid / cancellation credits in this brand, newest first

Input Schema
{
  clientId: string
}
Output Schema
Array<{
  id: string
  clientId: string
  amount: number
  method: "EMT" | "AmazonGiftCard" | "Cash" | "Credit" | "TalentCredit" | null
  status: "held" | "applied" | "cancellationFee"
  talentAmount: number | null
  bookerFee: number | null
  agencyAmount: number | null
  note: string | null
  createdAt: string | any
  appliedBooking: {
    id: string
    date: string | any
    talentName: string
    locationName: string
  } | any | null
  cancelledBooking: {
    id: string
    date: string | any
    talentName: string
    locationName: string
  } | any | null
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Record Client Credit clientCredit.create
ClientCredit

Records a client prepayment as a held credit (>= $50 minimum, D87) β€” never a Payment

Input Schema
{
  clientId: string
  amount: number
  method: "EMT" | "AmazonGiftCard" | "Cash"
  note?: string
}
Output Schema
{
  id: string
  clientId: string
  amount: number
  method: "EMT" | "AmazonGiftCard" | "Cash" | "Credit" | "TalentCredit" | null
  status: "held" | "applied" | "cancellationFee"
  talentAmount: number | null
  bookerFee: number | null
  agencyAmount: number | null
  note: string | null
  createdAt: string | any
  appliedBooking: {
    id: string
    date: string | any
    talentName: string
    locationName: string
  } | any | null
  cancelledBooking: {
    id: string
    date: string | any
    talentName: string
    locationName: string
  } | any | null
}
Test Endpoint
Optional fields (click to add):
note
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Apply Client Credit clientCredit.applyToBooking
ClientCredit

Applies a held credit to a booking β€” creates a Payment(method:Credit) for the full amount so the tracker Paid rolls up (D87)

Input Schema
{
  id: string
  appointmentId: string
}
Output Schema
{
  id: string
  clientId: string
  amount: number
  method: "EMT" | "AmazonGiftCard" | "Cash" | "Credit" | "TalentCredit" | null
  status: "held" | "applied" | "cancellationFee"
  talentAmount: number | null
  bookerFee: number | null
  agencyAmount: number | null
  note: string | null
  createdAt: string | any
  appliedBooking: {
    id: string
    date: string | any
    talentName: string
    locationName: string
  } | any | null
  cancelledBooking: {
    id: string
    date: string | any
    talentName: string
    locationName: string
  } | any | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Elect Cancellation Fee clientCredit.electCancellationFee
ClientCredit

Uses a held credit as a cancellation fee behind a specific cancelled booking β€” stamps the talent Β½ / booker $25 / agency surplus split and links the booking so the talent-day income + booker-week $25 report; no Payment (D87/D95)

Input Schema
{
  id: string
  cancelledAppointmentId: string
}
Output Schema
{
  id: string
  clientId: string
  amount: number
  method: "EMT" | "AmazonGiftCard" | "Cash" | "Credit" | "TalentCredit" | null
  status: "held" | "applied" | "cancellationFee"
  talentAmount: number | null
  bookerFee: number | null
  agencyAmount: number | null
  note: string | null
  createdAt: string | any
  appliedBooking: {
    id: string
    date: string | any
    talentName: string
    locationName: string
  } | any | null
  cancelledBooking: {
    id: string
    date: string | any
    talentName: string
    locationName: string
  } | any | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Client Credit clientCredit.delete
ClientCredit

Removes a mistaken held credit β€” a consumed (applied / cancellation-fee) credit is immutable

Input Schema
{
  id: string
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Company

query
List Companies company.list
Companies

Returns all companies

Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string
  slug: string
  defaultPhoneNumberId: string | null
  imageBrand: "LuxWatermark" | "Clean"
}>
Test Endpoint
query
Current Company Default Phone company.currentDefaultPhone
Companies

Returns the requesting company's default (house) phone, or null when unset β€” the public fallback for talent contact numbers

Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string | null
  number: string
} | null
Test Endpoint
mutation
Create Company company.create
Companies

Creates a new company

Input Schema
{
  name: string
  slug: string
  defaultPhoneNumberId?: string | null
  imageBrand?: "LuxWatermark" | "Clean"
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string
  slug: string
  defaultPhoneNumberId: string | null
  imageBrand: "LuxWatermark" | "Clean"
}
Test Endpoint
Optional fields (click to add):
defaultPhoneNumberId imageBrand
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Company company.update
Companies

Updates a company

Input Schema
{
  name?: string
  slug?: string
  defaultPhoneNumberId?: string | null
  imageBrand?: "LuxWatermark" | "Clean"
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string
  slug: string
  defaultPhoneNumberId: string | null
  imageBrand: "LuxWatermark" | "Clean"
}
Test Endpoint
Optional fields (click to add):
name slug defaultPhoneNumberId imageBrand
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Company company.delete
Companies

Blocked β€” companies cannot be deleted via the API

Input Schema
{
  id: string
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Events

subscription
Live Change Stream events.onChange
Events

SSE stream that emits whenever something changed that other operators should see β€” an SMS, a booking, a payment, a roster edit. Carries the topic only; refetch on event.

Test Endpoint

Expense

query
Expenses by Date Range expense.byDateRange
Expense

Ad-hoc expenses in a date range (by the date incurred), newest first β€” the list + the weekly report money-out

Input Schema
{
  startDate: any
  endDate: any
}
Output Schema
Array<{
  id: string
  amount: number
  category: "Admin" | "Cleaning" | "Photoshoot" | "Marketing" | "Owner" | "Supplies" | "InitialSetup" | "Accommodation"
  incurredOn: string | any
  note: string | null
  payrollUserId: string | null
  allocations: Array<{
    locationId: string
    locationName: string
    city: string
    amount: number
  }>
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Expense expense.byId
Expense

One expense with its allocations, or null when not this company’s

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  amount: number
  category: "Admin" | "Cleaning" | "Photoshoot" | "Marketing" | "Owner" | "Supplies" | "InitialSetup" | "Accommodation"
  incurredOn: string | any
  note: string | null
  payrollUserId: string | null
  allocations: Array<{
    locationId: string
    locationName: string
    city: string
    amount: number
  }>
} | null
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create Expense expense.create
Expense

Records an expense across 0/1/many locations β€” the server splits the amount evenly (0 locations = a general cost); allocation shares are derived, never client-sent

Input Schema
{
  amount: number
  category: "Admin" | "Cleaning" | "Photoshoot" | "Marketing" | "Owner" | "Supplies" | "InitialSetup" | "Accommodation"
  incurredOn: any
  note?: string
  locationIds: string[]
  payrollUserId?: string | null
}
Output Schema
{
  id: string
  amount: number
  category: "Admin" | "Cleaning" | "Photoshoot" | "Marketing" | "Owner" | "Supplies" | "InitialSetup" | "Accommodation"
  incurredOn: string | any
  note: string | null
  payrollUserId: string | null
  allocations: Array<{
    locationId: string
    locationName: string
    city: string
    amount: number
  }>
}
Test Endpoint
Optional fields (click to add):
note payrollUserId
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Expense expense.update
Expense

Updates an expense and replaces its allocation; 404 unless it belongs to the requesting company

Input Schema
{
  amount: number
  category: "Admin" | "Cleaning" | "Photoshoot" | "Marketing" | "Owner" | "Supplies" | "InitialSetup" | "Accommodation"
  incurredOn: any
  note?: string
  locationIds?: string[]
  payrollUserId?: string | null
  id: string
}
Output Schema
{
  id: string
  amount: number
  category: "Admin" | "Cleaning" | "Photoshoot" | "Marketing" | "Owner" | "Supplies" | "InitialSetup" | "Accommodation"
  incurredOn: string | any
  note: string | null
  payrollUserId: string | null
  allocations: Array<{
    locationId: string
    locationName: string
    city: string
    amount: number
  }>
}
Test Endpoint
Optional fields (click to add):
note locationIds payrollUserId
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Expense expense.delete
Expense

Removes an expense and its allocations

Input Schema
{
  id: string
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

FinanceDashboard

query
Finance Dashboard financeDashboard.byPeriod
FinanceDashboard

Owner business-health roll-up over a period (day / week / month / quarter / year): gross (Ξ£ Due), expenses (ad-hoc + prorated fixed costs), net, and collected cash β€” each with a delta vs the prior period, plus a trend, by-city and by-category breakdown

Input Schema
{
  periodKind: "day" | "week" | "month" | "quarter" | "year"
  anchorDate: string
}
Output Schema
{
  periodKind: "day" | "week" | "month" | "quarter" | "year"
  range: {
    startDate: string | any
    endDate: string | any
  }
  kpis: {
    gross: {
      value: number
      previous: number
      delta: number
    }
    expenses: {
      value: number
      previous: number
      delta: number
    }
    net: {
      value: number
      previous: number
      delta: number
    }
    collectedCash: {
      value: number
      previous: number
      delta: number
    }
    cashProfit: {
      value: number
      previous: number
      delta: number
    }
  }
  trend: Array<{
    date: string | any
    gross: number
    expenses: number
    net: number
    collectedCash: number
  }>
  byCity: Array<{
    city: string
    gross: number
    spend: number
    net: number
  }>
  businessWide: number
  byCategory: Array<{
    category: "Admin" | "Cleaning" | "Photoshoot" | "Marketing" | "Owner" | "Supplies" | "InitialSetup" | "Accommodation" | "Rent" | "Utilities" | "Internet" | "Insurance" | "Misc"
    amount: number
  }>
  bookerPay: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Finance Locations financeDashboard.locations
FinanceDashboard

Per-location leaderboard over a period: each non-Hotel location’s revenue (Ξ£ Due), prorated fixed costs, allocated expenses, profit and booked-day utilization β€” ranked client-side by profit / margin / profit-per-booked-day

Input Schema
{
  periodKind: "day" | "week" | "month" | "quarter" | "year"
  anchorDate: string
}
Output Schema
Array<{
  locationId: string
  locationName: string
  city: string
  revenue: number
  collectedCash: number
  fixedCosts: number
  allocatedExpenses: number
  bookerPay: number
  profit: number
  cashProfit: number
  bookedDays: number
  daysInPeriod: number
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Finance Location Detail financeDashboard.locationDetail
FinanceDashboard

One location’s monthly trend (revenue vs expenses), cost composition (fixed lines + assigned expenses), cumulative investment-vs-return (payback), and booked-day utilization over the last 12 months

Input Schema
{
  locationId: string
  anchorDate: string
}
Output Schema
{
  locationId: string
  locationName: string
  city: string
  months: Array<{
    period: string
    revenue: number
    expenses: number
    fixedCosts: number
    allocatedExpenses: number
    bookerPay: number
    bookedDays: number
    daysInMonth: number
  }>
  costComposition: {
    rent: number
    utilities: number
    internet: number
    insurance: number
    cleaning: number
    supplies: number
    misc: number
    allocatedExpenses: number
    bookerPay: number
  }
  costCompositionByMonth: Array<{
    rent: number
    utilities: number
    internet: number
    insurance: number
    cleaning: number
    supplies: number
    misc: number
    allocatedExpenses: number
    bookerPay: number
    period: string
  }>
  investmentReturn: Array<{
    period: string
    cumulativeInvested: number
    cumulativeRevenue: number
  }>
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

DailyReport

mutation
Save Daily Report dailyReport.save
DailyReport

Upserts a schedule-day's book-on (+ the airbnb/hotel per-date flat fee). The book-on is stored as sent β€” an editable per-day override (D64). 404 unless the schedule belongs to the requesting company

Input Schema
{
  scheduleId: string
  flatFee?: number | null
  bookOn: number
}
Output Schema
{
  id: string
  scheduleId: string
  flatFee: number | null
  bookOn: number
}
Test Endpoint
Optional fields (click to add):
flatFee
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

File

query
List Failed Images file.listFailed
Files

Returns root images with failed processing status

Output Schema
any[]
Test Endpoint
mutation
Retry Image Processing file.retryProcessing
Files

Retries processing for a failed image by re-generating missing variants

Input Schema
{
  imageId: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  fileId: string
  talentId: string
  variant: "Original" | "Thumbnail" | "Large"
  imageBrand: "LuxWatermark" | "Clean" | null
  status: "Processing" | "Completed" | "Failed"
  errorMessage: string | null
  width: number | null
  height: number | null
  sortOrder: number
  sourceImageId: string | null
  file: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string
    mimeType: string
    size: number
    blobKey: string
    container: string
    url: string | null
    uploadedById: string | null
  } | null
  variants: any[]
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Debug

query
Sentry Test debug.sentryTest
Debug

Throws a test error for Sentry

Test Endpoint

Image

query
Get Images by Talent image.byTalent
Images

Returns all images for a talent belonging to the requesting company

Input Schema
{
  talentId: string
}
Output Schema
any[]
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Talent Thumbnails image.thumbnails
Images

Returns talentId β†’ thumbnail URL for the requesting company's talents, in the company's image brand

Output Schema
Record<string, string | null>
Test Endpoint
query
Get Talent Thumbnails (Admin) image.thumbnailsAll
Images

Returns talentId β†’ thumbnail URL across all companies' talents, in the requesting company's image brand β€” the admin lists show non-members too

Output Schema
Record<string, string | null>
Test Endpoint
mutation
Create Image image.create
Images

Creates a new image

Input Schema
{
  fileId: string
  variant?: "Original" | "Thumbnail" | "Large"
  imageBrand?: "LuxWatermark" | "Clean" | null
  width?: number | null
  height?: number | null
  sortOrder?: number
  talentId: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  fileId: string
  talentId: string
  variant: "Original" | "Thumbnail" | "Large"
  imageBrand: "LuxWatermark" | "Clean" | null
  status: "Processing" | "Completed" | "Failed"
  errorMessage: string | null
  width: number | null
  height: number | null
  sortOrder: number
  sourceImageId: string | null
  file: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string
    mimeType: string
    size: number
    blobKey: string
    container: string
    url: string | null
    uploadedById: string | null
  } | null
  variants: any[]
}
Test Endpoint
Optional fields (click to add):
variant imageBrand width height sortOrder
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Image image.update
Images

Updates an existing image

Input Schema
{
  width?: number | null
  height?: number | null
  sortOrder?: number
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  fileId: string
  talentId: string
  variant: "Original" | "Thumbnail" | "Large"
  imageBrand: "LuxWatermark" | "Clean" | null
  status: "Processing" | "Completed" | "Failed"
  errorMessage: string | null
  width: number | null
  height: number | null
  sortOrder: number
  sourceImageId: string | null
  file: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string
    mimeType: string
    size: number
    blobKey: string
    container: string
    url: string | null
    uploadedById: string | null
  } | null
  variants: any[]
}
Test Endpoint
Optional fields (click to add):
width height sortOrder
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Reorder Images image.reorder
Images

Batch-update sort order for a set of images

Input Schema
{
  orderedIds: string[]
}
Output Schema
any[]
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Image Download URL image.downloadUrl
Images

Returns a short-lived SAS URL for downloading the original blob

Input Schema
{
  id: string
}
Output Schema
{
  url: string
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Reprocess Talent Images image.reprocessForTalent
Images

Re-derives a talent's photos for every brand their companies display (e.g. the clean set after adding a LUX model to VIP Kitty). Idempotent β€” only missing brand variants are rendered.

Input Schema
{
  talentId: string
}
Output Schema
{
  rendered: number
  skipped: number
  failed: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Image image.delete
Images

Deletes an image and its variants from DB and blob storage

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  fileId: string
  talentId: string
  variant: "Original" | "Thumbnail" | "Large"
  imageBrand: "LuxWatermark" | "Clean" | null
  status: "Processing" | "Completed" | "Failed"
  errorMessage: string | null
  width: number | null
  height: number | null
  sortOrder: number
  sourceImageId: string | null
  file: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string
    mimeType: string
    size: number
    blobKey: string
    container: string
    url: string | null
    uploadedById: string | null
  } | null
  variants: any[]
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Location

query
List Locations location.list
Locations

Returns the requesting company's locations

Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  city: string | any
  name: string
  category: "Hotel" | "Airbnb" | "Condo"
  hotelName: string | null
  unitNumber: string | null
  street: string | null
  province: "AB" | "BC" | "MB" | "NB" | "NL" | "NS" | "NT" | "NU" | "ON" | "PE" | "QC" | "SK" | "YT" | null
  postalCode: string | null
  phoneNumberId: string | null
  phoneNumber?: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string | null
    number: string
  } | null
  capacity: number | null
  arrivalInstructions1: string | null
  arrivalInstructions2: string | null
  emergencyPlan: string | null
  garbageLocation: string | null
  checkInInstructions: string | null
  safeLocation: string | null
  parkingInstructions: string | null
  wifi: string | null
  additionalInfo: string | null
  houseGuidelines: string[]
  faq: Array<{
    question: string
    answer: string
  }>
  tenancyEndedAt: string | any | null
}>
Test Endpoint
query
List Locations for the Schedule Grid location.listForScheduleGrid
Locations

Returns every live location as a schedule-grid bucket (id, display name, city), ordered city-then-location, with no schedule entries. Condos past their move-out date are excluded (LUX-240) β€” an ended tenancy takes no new bookings; weeks where it has rows still show it via schedule.weekEntriesAdmin. Takes no date range: it is the same for every week, so the schedule page paints its location list before any week loads and keeps it across week switches. Pair with schedule.weekEntriesAdmin, which supplies that week's days.

Output Schema
Array<{
  locationId: string
  locationName: string
  city: string
  cityId: string
}>
Test Endpoint
query
Get Location by ID location.byId
Locations

Returns a location by ID; 404 unless it belongs to the requesting company

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  city: string | any
  name: string
  category: "Hotel" | "Airbnb" | "Condo"
  hotelName: string | null
  unitNumber: string | null
  street: string | null
  province: "AB" | "BC" | "MB" | "NB" | "NL" | "NS" | "NT" | "NU" | "ON" | "PE" | "QC" | "SK" | "YT" | null
  postalCode: string | null
  phoneNumberId: string | null
  phoneNumber?: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string | null
    number: string
  } | null
  capacity: number | null
  arrivalInstructions1: string | null
  arrivalInstructions2: string | null
  emergencyPlan: string | null
  garbageLocation: string | null
  checkInInstructions: string | null
  safeLocation: string | null
  parkingInstructions: string | null
  wifi: string | null
  additionalInfo: string | null
  houseGuidelines: string[]
  faq: Array<{
    question: string
    answer: string
  }>
  tenancyEndedAt: string | any | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create Location location.create
Locations

Creates a location owned by the requesting company

Input Schema
{
  city: string
  name: string
  category: "Hotel" | "Airbnb" | "Condo"
  hotelName?: string | null
  unitNumber?: string | null
  street?: string | null
  province?: "AB" | "BC" | "MB" | "NB" | "NL" | "NS" | "NT" | "NU" | "ON" | "PE" | "QC" | "SK" | "YT" | null
  postalCode?: string | "" | null
  arrivalInstructions1?: string | null
  arrivalInstructions2?: string | null
  emergencyPlan?: string | null
  garbageLocation?: string | null
  checkInInstructions?: string | null
  safeLocation?: string | null
  parkingInstructions?: string | null
  wifi?: string | null
  additionalInfo?: string | null
  houseGuidelines?: string[]
  faq?: Array<{
    question: string
    answer: string
  }>
  capacity?: number | null
  phoneNumberId?: string | null
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  city: string | any
  name: string
  category: "Hotel" | "Airbnb" | "Condo"
  hotelName: string | null
  unitNumber: string | null
  street: string | null
  province: "AB" | "BC" | "MB" | "NB" | "NL" | "NS" | "NT" | "NU" | "ON" | "PE" | "QC" | "SK" | "YT" | null
  postalCode: string | null
  phoneNumberId: string | null
  phoneNumber?: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string | null
    number: string
  } | null
  capacity: number | null
  arrivalInstructions1: string | null
  arrivalInstructions2: string | null
  emergencyPlan: string | null
  garbageLocation: string | null
  checkInInstructions: string | null
  safeLocation: string | null
  parkingInstructions: string | null
  wifi: string | null
  additionalInfo: string | null
  houseGuidelines: string[]
  faq: Array<{
    question: string
    answer: string
  }>
  tenancyEndedAt: string | any | null
}
Test Endpoint
Optional fields (click to add):
hotelName unitNumber street province postalCode arrivalInstructions1 arrivalInstructions2 emergencyPlan garbageLocation checkInInstructions safeLocation parkingInstructions wifi additionalInfo houseGuidelines faq capacity phoneNumberId
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Reorder Locations location.reorder
Locations

Batch-update the display order of locations within a city for the requesting company

Input Schema
{
  orderedIds: string[]
}
Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  city: string | any
  name: string
  category: "Hotel" | "Airbnb" | "Condo"
  hotelName: string | null
  unitNumber: string | null
  street: string | null
  province: "AB" | "BC" | "MB" | "NB" | "NL" | "NS" | "NT" | "NU" | "ON" | "PE" | "QC" | "SK" | "YT" | null
  postalCode: string | null
  phoneNumberId: string | null
  phoneNumber?: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string | null
    number: string
  } | null
  capacity: number | null
  arrivalInstructions1: string | null
  arrivalInstructions2: string | null
  emergencyPlan: string | null
  garbageLocation: string | null
  checkInInstructions: string | null
  safeLocation: string | null
  parkingInstructions: string | null
  wifi: string | null
  additionalInfo: string | null
  houseGuidelines: string[]
  faq: Array<{
    question: string
    answer: string
  }>
  tenancyEndedAt: string | any | null
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Location location.update
Locations

Updates a location owned by the requesting company

Input Schema
{
  city?: string
  name?: string
  category?: "Hotel" | "Airbnb" | "Condo"
  hotelName?: string | null
  unitNumber?: string | null
  street?: string | null
  province?: "AB" | "BC" | "MB" | "NB" | "NL" | "NS" | "NT" | "NU" | "ON" | "PE" | "QC" | "SK" | "YT" | null
  postalCode?: string | "" | null
  arrivalInstructions1?: string | null
  arrivalInstructions2?: string | null
  emergencyPlan?: string | null
  garbageLocation?: string | null
  checkInInstructions?: string | null
  safeLocation?: string | null
  parkingInstructions?: string | null
  wifi?: string | null
  additionalInfo?: string | null
  houseGuidelines?: string[]
  faq?: Array<{
    question: string
    answer: string
  }>
  capacity?: number | null
  phoneNumberId?: string | null
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  city: string | any
  name: string
  category: "Hotel" | "Airbnb" | "Condo"
  hotelName: string | null
  unitNumber: string | null
  street: string | null
  province: "AB" | "BC" | "MB" | "NB" | "NL" | "NS" | "NT" | "NU" | "ON" | "PE" | "QC" | "SK" | "YT" | null
  postalCode: string | null
  phoneNumberId: string | null
  phoneNumber?: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string | null
    number: string
  } | null
  capacity: number | null
  arrivalInstructions1: string | null
  arrivalInstructions2: string | null
  emergencyPlan: string | null
  garbageLocation: string | null
  checkInInstructions: string | null
  safeLocation: string | null
  parkingInstructions: string | null
  wifi: string | null
  additionalInfo: string | null
  houseGuidelines: string[]
  faq: Array<{
    question: string
    answer: string
  }>
  tenancyEndedAt: string | any | null
}
Test Endpoint
Optional fields (click to add):
city name category hotelName unitNumber street province postalCode arrivalInstructions1 arrivalInstructions2 emergencyPlan garbageLocation checkInInstructions safeLocation parkingInstructions wifi additionalInfo houseGuidelines faq capacity phoneNumberId
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
End Location Tenancy location.endTenancy
Locations

Ends a condo's tenancy at a move-out date, or resumes it with null β€” a dated deactivation, never a delete (D104). Condo only: Airbnb/Hotel are always active

Input Schema
{
  id: string
  tenancyEndedAt: any | null
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  city: string | any
  name: string
  category: "Hotel" | "Airbnb" | "Condo"
  hotelName: string | null
  unitNumber: string | null
  street: string | null
  province: "AB" | "BC" | "MB" | "NB" | "NL" | "NS" | "NT" | "NU" | "ON" | "PE" | "QC" | "SK" | "YT" | null
  postalCode: string | null
  phoneNumberId: string | null
  phoneNumber?: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string | null
    number: string
  } | null
  capacity: number | null
  arrivalInstructions1: string | null
  arrivalInstructions2: string | null
  emergencyPlan: string | null
  garbageLocation: string | null
  checkInInstructions: string | null
  safeLocation: string | null
  parkingInstructions: string | null
  wifi: string | null
  additionalInfo: string | null
  houseGuidelines: string[]
  faq: Array<{
    question: string
    answer: string
  }>
  tenancyEndedAt: string | any | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
List Emergency-Plan Media location.emergencyMedia
Locations

Returns a location's emergency-plan pictures/videos (LUX-212); scoped to the requesting company

Input Schema
{
  locationId: string
}
Output Schema
Array<{
  id: string
  locationId: string
  file: {
    name: string
    mimeType: string
    url: string | null
  }
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Emergency-Plan Media location.deleteEmergencyMedia
Locations

Deletes one emergency-plan picture/video, including its blob; 404 unless its location belongs to the requesting company

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  locationId: string
  file: {
    name: string
    mimeType: string
    url: string | null
  }
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Location location.delete
Locations

Deletes a location owned by the requesting company

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  city: string | any
  name: string
  category: "Hotel" | "Airbnb" | "Condo"
  hotelName: string | null
  unitNumber: string | null
  street: string | null
  province: "AB" | "BC" | "MB" | "NB" | "NL" | "NS" | "NT" | "NU" | "ON" | "PE" | "QC" | "SK" | "YT" | null
  postalCode: string | null
  phoneNumberId: string | null
  phoneNumber?: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string | null
    number: string
  } | null
  capacity: number | null
  arrivalInstructions1: string | null
  arrivalInstructions2: string | null
  emergencyPlan: string | null
  garbageLocation: string | null
  checkInInstructions: string | null
  safeLocation: string | null
  parkingInstructions: string | null
  wifi: string | null
  additionalInfo: string | null
  houseGuidelines: string[]
  faq: Array<{
    question: string
    answer: string
  }>
  tenancyEndedAt: string | any | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
List Deleted Locations location.listDeleted
Locations

The requesting company's soft-deleted locations, recoverable via location.restore (LUX-203)

Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  city: string | any
  name: string
  category: "Hotel" | "Airbnb" | "Condo"
  hotelName: string | null
  unitNumber: string | null
  street: string | null
  province: "AB" | "BC" | "MB" | "NB" | "NL" | "NS" | "NT" | "NU" | "ON" | "PE" | "QC" | "SK" | "YT" | null
  postalCode: string | null
  phoneNumberId: string | null
  phoneNumber?: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string | null
    number: string
  } | null
  capacity: number | null
  arrivalInstructions1: string | null
  arrivalInstructions2: string | null
  emergencyPlan: string | null
  garbageLocation: string | null
  checkInInstructions: string | null
  safeLocation: string | null
  parkingInstructions: string | null
  wifi: string | null
  additionalInfo: string | null
  houseGuidelines: string[]
  faq: Array<{
    question: string
    answer: string
  }>
  tenancyEndedAt: string | any | null
  deletedAt: string | any
}>
Test Endpoint
mutation
Restore Location location.restore
Locations

Restores a soft-deleted location owned by the requesting company (LUX-203); NOT_FOUND when the id is not deleted or not owned

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  city: string | any
  name: string
  category: "Hotel" | "Airbnb" | "Condo"
  hotelName: string | null
  unitNumber: string | null
  street: string | null
  province: "AB" | "BC" | "MB" | "NB" | "NL" | "NS" | "NT" | "NU" | "ON" | "PE" | "QC" | "SK" | "YT" | null
  postalCode: string | null
  phoneNumberId: string | null
  phoneNumber?: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string | null
    number: string
  } | null
  capacity: number | null
  arrivalInstructions1: string | null
  arrivalInstructions2: string | null
  emergencyPlan: string | null
  garbageLocation: string | null
  checkInInstructions: string | null
  safeLocation: string | null
  parkingInstructions: string | null
  wifi: string | null
  additionalInfo: string | null
  houseGuidelines: string[]
  faq: Array<{
    question: string
    answer: string
  }>
  tenancyEndedAt: string | any | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

LocationFixedCost

query
Get Location Fixed Costs locationFixedCost.byPeriod
LocationFixedCost

A location's operating costs for a month (YYYY-MM), or null when none are set

Input Schema
{
  locationId: string
  period: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  locationId: string
  period: string
  rent: number
  utilities: number
  internet: number
  insurance: number
  cleaning: number
  supplies: number
  misc: number
} | null
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Latest Fixed Costs (excluding a month) locationFixedCost.latest
LocationFixedCost

The nearest month with costs β€” the most recent one before the given month, or failing that the nearest later one (backfill) β€” the source for "copy latest month"; null when no other month has costs

Input Schema
{
  locationId: string
  period: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  locationId: string
  period: string
  rent: number
  utilities: number
  internet: number
  insurance: number
  cleaning: number
  supplies: number
  misc: number
} | null
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Save Location Fixed Costs locationFixedCost.save
LocationFixedCost

Upserts a month's operating costs; 404 unless the location belongs to the requesting company

Input Schema
{
  locationId: string
  period: string
  rent: number
  utilities: number
  internet: number
  insurance: number
  cleaning: number
  supplies: number
  misc: number
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  locationId: string
  period: string
  rent: number
  utilities: number
  internet: number
  insurance: number
  cleaning: number
  supplies: number
  misc: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

LocationNote

query
Get Location Notes for a Week (Admin) locationNote.week
Location Notes

Returns the requesting company's location notes whose date falls in the window, scoped via location ownership.

Input Schema
{
  startDate: any
  endDate: any
}
Output Schema
Array<{
  id: string
  createdAt: string | any
  locationId: string
  date: string | any
  text: string
  createdByName: string | null
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Location Note History for a Day (Admin) locationNote.history
Location Notes

Every add, edit and delete a location's day has seen β€” including notes that were deleted. Newest first, scoped via location ownership.

Input Schema
{
  locationId: string
  date: any
}
Output Schema
Array<{
  id: string
  noteId: string
  action: "Created" | "Updated" | "Deleted"
  text: string
  createdByName: string | null
  createdAt: string | any
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create Location Note locationNote.create
Location Notes

Creates a note pinned to one of the requesting company's locations on a specific day.

Input Schema
{
  locationId: string
  date: any
  text: string
}
Output Schema
{
  id: string
  createdAt: string | any
  locationId: string
  date: string | any
  text: string
  createdByName: string | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Location Note locationNote.update
Location Notes

Updates a note on one of the requesting company's locations.

Input Schema
{
  text?: string
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  locationId: string
  date: string | any
  text: string
  createdByName: string | null
}
Test Endpoint
Optional fields (click to add):
text
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Location Note locationNote.delete
Location Notes

Deletes a note on one of the requesting company's locations.

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  locationId: string
  date: string | any
  text: string
  createdByName: string | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

LocationPnl

query
Location P&L locationPnl.byPeriod
LocationPnl

Per-location profit for a month on both bases β€” earned (Ξ£ Due, incl. book-on) and cash (Ξ£ Paid) β€” each less fixed costs, allocated expenses and booker pay, plus the off-roster reconciling line

Input Schema
{
  period: string
}
Output Schema
{
  rows: Array<{
    locationId: string
    locationName: string
    city: string
    revenue: number
    collectedCash: number
    fixedCosts: number
    allocatedExpenses: number
    bookerPay: number
    profit: number
    cashProfit: number
  }>
  offRoster: {
    revenue: number
    collectedCash: number
    fixedCosts: number
    allocatedExpenses: number
    bookerPay: number
    profit: number
    cashProfit: number
  }
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Menu

MenuService

Notification

query
List Notifications notification.list
Notification

One page of the signed-in user’s notifications, newest first.

Input Schema
{
  page: number
  pageSize: number
}
Output Schema
{
  items: Array<{
    id: string
    createdAt: string | any
    updatedAt: string | any
    type: "SmsReceived" | "TalentChangeRequested" | "BookingCreated"
    entityId: string
    title: string
    body: string | null
    readAt: string | any | null
  }>
  total: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Read One Notification notification.byId
Notification

One of the signed-in user's notifications by id β€” null for anyone else's.

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  type: "SmsReceived" | "TalentChangeRequested" | "BookingCreated"
  entityId: string
  title: string
  body: string | null
  readAt: string | any | null
} | null
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Count Unread Notifications notification.unreadCount
Notification

How many notifications the signed-in user has not read.

Output Schema
{
  count: number
}
Test Endpoint
mutation
Mark a Notification Read notification.markRead
Notification

Marks one of the signed-in user’s notifications read. Idempotent.

Input Schema
{
  id: string
}
Output Schema
any
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Mark All Notifications Read notification.markAllRead
Notification

Marks every unread notification of the signed-in user.

Output Schema
any
Test Endpoint
query
Web Push Public Key notification.pushPublicKey
Notification

VAPID public key the browser subscribes under; null while web push is unconfigured.

Output Schema
{
  publicKey: string | null
}
Test Endpoint
mutation
Subscribe Web Push notification.subscribePush
Notification

Registers this browser’s push subscription for the signed-in user. Idempotent per endpoint.

Input Schema
{
  endpoint: string
  keys: {
    p256dh: string
    auth: string
  }
}
Output Schema
any
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Unsubscribe Web Push notification.unsubscribePush
Notification

Removes this browser’s push subscription. Another user’s endpoint is a silent no-op.

Input Schema
{
  endpoint: string
}
Output Schema
any
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
subscription
Notification Stream notification.onNew
Notification

SSE stream that emits whenever the signed-in user gets a notification.

Test Endpoint

Payment

query
Payments by Appointment payment.byAppointment
Payment

An appointment's recorded payment lines (the Payments card) β€” one or many per appointment, e.g. an e-transfer + cash split

Input Schema
{
  appointmentId: string
}
Output Schema
Array<{
  id: string
  appointmentId: string
  method: "EMT" | "AmazonGiftCard" | "Cash" | "Credit" | "TalentCredit"
  amount: number
  isDeposit: boolean
  emtSenderName: string | null
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Record Payment payment.create
Payment

Records a payment line against an appointment. Only the first line may be a deposit; the client comes from the appointment, never sent

Input Schema
{
  appointmentId: string
  method: "EMT" | "AmazonGiftCard" | "Cash" | "TalentCredit"
  amount: number
  isDeposit: boolean
  emtSenderName?: string
}
Output Schema
{
  id: string
  appointmentId: string
  method: "EMT" | "AmazonGiftCard" | "Cash" | "Credit" | "TalentCredit"
  amount: number
  isDeposit: boolean
  emtSenderName: string | null
}
Test Endpoint
Optional fields (click to add):
emtSenderName
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Record Payment on a Day payment.createForSchedule
Payment

Records a payment against a schedule-day with no booking (LUX-206) β€” e.g. a talent settling a carried balance on a day she took no calls. The day's carrier booking is found-or-created (the import's money-only-day rule) and the line lands on it; carriers are skipped by every call count

Input Schema
{
  scheduleId: string
  method: "EMT" | "AmazonGiftCard" | "Cash" | "TalentCredit"
  amount: number
  emtSenderName?: string
}
Output Schema
{
  id: string
  appointmentId: string
  method: "EMT" | "AmazonGiftCard" | "Cash" | "Credit" | "TalentCredit"
  amount: number
  isDeposit: boolean
  emtSenderName: string | null
}
Test Endpoint
Optional fields (click to add):
emtSenderName
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Payment payment.delete
Payment

Removes a payment line

Input Schema
{
  id: string
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Payroll

query
My Payroll payroll.me
Payroll

The requesting user's own payroll: their booker Mon–Sun weeks (same aggregation as the admin Booker Payroll screen, filtered to them) and the expenses tagged to their payroll β€” never anyone else's

Output Schema
{
  weeks: Array<{
    userId: string
    bookerName: string
    weekStart: string | any
    weekEnd: string | any
    calls: number
    amount: number
    cancellationPay: number
    paidOn: string | any | null
    paidAmount: number | null
  }>
  expenses: Array<{
    id: string
    amount: number
    category: "Admin" | "Cleaning" | "Photoshoot" | "Marketing" | "Owner" | "Supplies" | "InitialSetup" | "Accommodation"
    incurredOn: string | any
    note: string | null
    payrollUserId: string | null
    allocations: Array<{
      locationId: string
      locationName: string
      city: string
      amount: number
    }>
  }>
}
Test Endpoint

PhoneNumber

query
List Phone Numbers phoneNumber.list
Phone Numbers

Returns all phone numbers

Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string | null
  number: string
}>
Test Endpoint
query
Get Phone Number by ID phoneNumber.getById
Phone Numbers

Returns a phone number by ID

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string | null
  number: string
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create Phone Number phoneNumber.create
Phone Numbers

Creates a new phone number

Input Schema
{
  name?: string | null
  number: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string | null
  number: string
}
Test Endpoint
Optional fields (click to add):
name
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Phone Number phoneNumber.update
Phone Numbers

Updates an existing phone number

Input Schema
{
  name?: string | null
  number?: string
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string | null
  number: string
}
Test Endpoint
Optional fields (click to add):
name number
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Phone Number phoneNumber.delete
Phone Numbers

Deletes a phone number

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string | null
  number: string
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Review

query
List Reviews by Talent review.byTalent
Reviews

Returns all reviews for a talent, newest first

Input Schema
{
  talentId: string
}
Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  talentId: string
  content: string
  createdByName: string | null
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create Review review.create
Reviews

Creates a new talent review

Input Schema
{
  talentId: string
  content: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  talentId: string
  content: string
  createdByName: string | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Review review.update
Reviews

Updates a review

Input Schema
{
  content: string
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  talentId: string
  content: string
  createdByName: string | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Review review.delete
Reviews

Deletes a review

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  talentId: string
  content: string
  createdByName: string | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Schedule

query
Get Today's Schedules schedule.forToday
Schedules

Returns the requesting company's schedules for today with talent data

Input Schema
{
  today: any
}
Output Schema
Array<{
  id: string
  locationId: string
  date: string | any
  startTime: string | null
  endTime: string | null
  location: {
    id: string
    city: string | any
    name: string
    phoneNumberId: string | null
    phoneNumber?: {
      id: string
      name: string | null
      number: string
    } | null
    tenancyEndedAt: string | any | null
    deletedAt: string | any | null
  }
  talentId: string
  talent: {
    id: string
    nickname: string
  }
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Visiting Soon schedule.visitingSoon
Schedules

Returns pre-grouped visiting-soon entries (next 60 days)

Input Schema
{
  today: any
}
Output Schema
Array<{
  talentId: string
  nickname: string
  city: string
  dateLabel: string
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Schedules by Date Range schedule.byDateRange
Schedules

Returns the requesting company's schedules in a date range with talent and location data

Input Schema
{
  startDate: any
  endDate: any
}
Output Schema
Array<{
  id: string
  locationId: string
  date: string | any
  startTime: string | null
  endTime: string | null
  location: {
    id: string
    city: string | any
    name: string
    phoneNumberId: string | null
    phoneNumber?: {
      id: string
      name: string | null
      number: string
    } | null
    tenancyEndedAt: string | any | null
    deletedAt: string | any | null
  }
  talentId: string
  talent: {
    id: string
    nickname: string
  }
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Week Grid (Public) schedule.weekGrid
Schedules

Returns a week of the requesting company's schedules pre-grouped by city β†’ location β†’ date. Drops soft-deleted-location rows.

Input Schema
{
  startDate: any
  endDate: any
}
Output Schema
Array<{
  city: string
  locations: Array<{
    locationId: string
    locationName: string
    deleted: boolean
    days: Array<{
      date: string | any
      entries: Array<{
        id: string
        locationId: string
        date: string | any
        startTime: string | null
        endTime: string | null
        location: {
          id: string
          city: string | any
          name: string
          phoneNumberId: string | null
          phoneNumber?: {
            id: string
            name: string | null
            number: string
          } | null
          tenancyEndedAt: string | any | null
          deletedAt: string | any | null
        }
        talentId: string
        talent: {
          id: string
          nickname: string
        }
      }>
    }>
  }>
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Schedules by Talent schedule.byTalent
Schedules

Returns all schedules for a talent

Input Schema
{
  talentId: string
}
Output Schema
Array<{
  id: string
  locationId: string
  date: string | any
  startTime: string | null
  endTime: string | null
  notes: string | null
  location: {
    id: string
    city: string | any
    name: string
    phoneNumberId: string | null
    phoneNumber?: {
      id: string
      name: string | null
      number: string
    } | null
    tenancyEndedAt: string | any | null
    deletedAt: string | any | null
  }
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Schedules by Location schedule.byLocation
Schedules

Returns all schedules for a location

Input Schema
{
  locationId: string
}
Output Schema
Array<{
  id: string
  locationId: string
  date: string | any
  startTime: string | null
  endTime: string | null
  notes: string | null
  location: {
    id: string
    city: string | any
    name: string
    phoneNumberId: string | null
    phoneNumber?: {
      id: string
      name: string | null
      number: string
    } | null
    tenancyEndedAt: string | any | null
    deletedAt: string | any | null
  }
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Week Entries (Admin) schedule.weekEntriesAdmin
Schedules

Returns a week's schedule entries bucketed by date, one bucket per POPULATED location β€” the locations without rows come from location.listForScheduleGrid. Soft-deleted locations appear only when they have rows in the window (flagged deleted), carrying their city so the client can place them.

Input Schema
{
  startDate: any
  endDate: any
}
Output Schema
Array<{
  locationId: string
  locationName: string
  city: string
  cityId: string
  deleted: boolean
  days: Array<{
    date: string | any
    entries: Array<{
      id: string
      locationId: string
      date: string | any
      startTime: string | null
      endTime: string | null
      notes: string | null
      location: {
        id: string
        city: string | any
        name: string
        phoneNumberId: string | null
        phoneNumber?: {
          id: string
          name: string | null
          number: string
        } | null
        tenancyEndedAt: string | any | null
        deletedAt: string | any | null
      }
      talentId: string
      talent: {
        id: string
        nickname: string
      }
    }>
  }>
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Week Booking Counts (Admin) schedule.weekBookingsAdmin
Schedules

How booked each scheduled day in the window is: the live calls actually taken on it, and what the talent's history says to expect there. One row per schedule, keyed by `scheduleId` so it joins onto schedule.weekEntriesAdmin. `expected` is null for a talent who has never worked β€” an absence, not a forecast of none.

Input Schema
{
  startDate: any
  endDate: any
}
Output Schema
Array<{
  scheduleId: string
  booked: number
  expected: number | null
  basis: "weekday" | "overall"
  sampleDays: number
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Location Booking History (Admin) schedule.locationHistoryAdmin
Schedules

A location's all-time booking history: every talent who has worked it with her calls-per-day there, best first, and each weekday's norm (null under three samples β€” an absence, not a norm of zero). Feeds the schedule grid's day hover card.

Input Schema
{
  locationId: string
}
Output Schema
{
  talent: Array<{
    talentId: string
    nickname: string
    avgHere: number
    daysHere: number
  }>
  weekdays: Array<{
    weekday: number
    avg: number | null
    sampleDays: number
  }>
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Location Ranking (Admin) schedule.locationRankingAdmin
Schedules

Every location that has ever been staffed, ranked by all-time calls per staffed calendar date, best first. Feeds the Talent dashboard location list; pair with schedule.locationHistoryAdmin for one location’s detail.

Output Schema
Array<{
  locationId: string
  name: string
  avgPerDay: number
  daysWorked: number
}>
Test Endpoint
query
Get Schedules by Date Range (Admin) schedule.byDateRangeAll
Schedules

Returns the selected company's schedules in a date range (admin; location-ownership, no roster gate)

Input Schema
{
  startDate: any
  endDate: any
}
Output Schema
Array<{
  id: string
  locationId: string
  date: string | any
  startTime: string | null
  endTime: string | null
  notes: string | null
  location: {
    id: string
    city: string | any
    name: string
    phoneNumberId: string | null
    phoneNumber?: {
      id: string
      name: string | null
      number: string
    } | null
    tenancyEndedAt: string | any | null
    deletedAt: string | any | null
  }
  talentId: string
  talent: {
    id: string
    nickname: string
  }
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create Schedule schedule.create
Schedules

Creates a new schedule

Input Schema
{
  locationId: string
  date: any
  startTime?: string | null
  endTime?: string | null
  notes?: string | null
  talentId: string
}
Output Schema
{
  id: string
  locationId: string
  date: string | any
  startTime: string | null
  endTime: string | null
  notes: string | null
  location: {
    id: string
    city: string | any
    name: string
    phoneNumberId: string | null
    phoneNumber?: {
      id: string
      name: string | null
      number: string
    } | null
    tenancyEndedAt: string | any | null
    deletedAt: string | any | null
  }
}
Test Endpoint
Optional fields (click to add):
startTime endTime notes
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Upsert Schedule schedule.upsert
Schedules

Get-or-create a schedule by its natural key (talent + location + date). Idempotent β€” returns the row and whether it was newly created. The historical import (LUX-120) uses this as its per-day anchor.

Input Schema
{
  locationId: string
  date: any
  startTime?: string | null
  endTime?: string | null
  notes?: string | null
  talentId: string
}
Output Schema
{
  created: boolean
  schedule: {
    id: string
    locationId: string
    date: string | any
    startTime: string | null
    endTime: string | null
    notes: string | null
    location: {
      id: string
      city: string | any
      name: string
      phoneNumberId: string | null
      phoneNumber?: {
        id: string
        name: string | null
        number: string
      } | null
      tenancyEndedAt: string | any | null
      deletedAt: string | any | null
    }
  }
}
Test Endpoint
Optional fields (click to add):
startTime endTime notes
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Schedule schedule.update
Schedules

Updates an existing schedule. Passing `talentId` re-points the day to another talent (LUX-188) β€” its appointments and money hang off the schedule, so they follow. Rejects a re-point onto an occupied (talent, location, date) with CONFLICT rather than merging two days.

Input Schema
{
  talentId?: string
  locationId?: string
  date?: any
  startTime?: string | null
  endTime?: string | null
  notes?: string | null
  id: string
}
Output Schema
{
  id: string
  locationId: string
  date: string | any
  startTime: string | null
  endTime: string | null
  notes: string | null
  location: {
    id: string
    city: string | any
    name: string
    phoneNumberId: string | null
    phoneNumber?: {
      id: string
      name: string | null
      number: string
    } | null
    tenancyEndedAt: string | any | null
    deletedAt: string | any | null
  }
}
Test Endpoint
Optional fields (click to add):
talentId locationId date startTime endTime notes
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Schedule schedule.delete
Schedules

Deletes a schedule

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  locationId: string
  date: string | any
  startTime: string | null
  endTime: string | null
  notes: string | null
  location: {
    id: string
    city: string | any
    name: string
    phoneNumberId: string | null
    phoneNumber?: {
      id: string
      name: string | null
      number: string
    } | null
    tenancyEndedAt: string | any | null
    deletedAt: string | any | null
  }
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Service

query
List Services service.list
Services

Returns all services with talent counts

Output Schema
Array<{
  id: string
  name: string
  createdAt: string | any
  talentCount: number
}>
Test Endpoint
query
Get Service by ID service.byId
Services

Returns a service by ID

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  name: string
  createdAt: string | any
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create Service service.create
Services

Creates a new service

Input Schema
{
  name: string
}
Output Schema
{
  id: string
  name: string
  createdAt: string | any
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Service service.update
Services

Updates a service

Input Schema
{
  name?: string
  id: string
}
Output Schema
{
  id: string
  name: string
  createdAt: string | any
}
Test Endpoint
Optional fields (click to add):
name
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Service service.delete
Services

Deletes a service

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  name: string
  createdAt: string | any
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

MessageRewrite

query
List Message Rewrites messageRewrite.list
Message Rewrites

Returns all message rewrite rules

Output Schema
Array<{
  id: string
  word: string | null
  replacement: string
  serviceId: string | null
  createdAt: string | any
  service: {
    id: string
    name: string
  } | null
}>
Test Endpoint
query
Get Message Rewrite by ID messageRewrite.byId
Message Rewrites

Returns a message rewrite rule by ID

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  word: string | null
  replacement: string
  serviceId: string | null
  createdAt: string | any
  service: {
    id: string
    name: string
  } | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create Message Rewrite messageRewrite.create
Message Rewrites

Creates a new message rewrite rule

Input Schema
{
  word?: string | null
  replacement: string
  serviceId?: string | null
}
Output Schema
{
  id: string
  word: string | null
  replacement: string
  serviceId: string | null
  createdAt: string | any
  service: {
    id: string
    name: string
  } | null
}
Test Endpoint
Optional fields (click to add):
word serviceId
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Message Rewrite messageRewrite.update
Message Rewrites

Updates a message rewrite rule

Input Schema
{
  word?: string | null
  replacement: string
  serviceId?: string | null
  id: string
}
Output Schema
{
  id: string
  word: string | null
  replacement: string
  serviceId: string | null
  createdAt: string | any
  service: {
    id: string
    name: string
  } | null
}
Test Endpoint
Optional fields (click to add):
word serviceId
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Message Rewrite messageRewrite.delete
Message Rewrites

Deletes a message rewrite rule

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  word: string | null
  replacement: string
  serviceId: string | null
  createdAt: string | any
  service: {
    id: string
    name: string
  } | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Sms

query
List SMS Messages sms.list
SMS

One page of SMS messages, newest first, optionally filtered to one of our lines or one client. Renders both the inbox and a single thread.

Input Schema
{
  page: number
  pageSize: number
  phoneNumberId?: string
  clientId?: string
}
Output Schema
{
  items: Array<{
    id: string
    threadId: string
    direction: "Inbound" | "Outbound"
    status: "Received" | "Queued" | "Sent" | "Delivered" | "Undelivered" | "Failed"
    errorCode: number | null
    fromNumber: string
    toNumber: string
    body: string
    readAt: string | any | null
    createdAt: string | any
    client: {
      id: string
      code: string
      name: string | null
      phone: string
      isConfirmed: boolean
      isBlacklisted: boolean
      hasLinkedNumbers: boolean
    } | null
    phoneNumber: {
      id: string
      name: string | null
      number: string
    } | null
    sentBy: {
      id: string
      name: string
    } | null
  }>
  total: number
}
Test Endpoint
Optional fields (click to add):
phoneNumberId clientId
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
List SMS Conversations sms.listThreads
SMS

One page of conversations β€” a client and one of our lines β€” most recently active first, each with its newest message and unread count.

Input Schema
{
  page: number
  pageSize: number
  phoneNumberId?: string
  search?: string
}
Output Schema
{
  items: Array<{
    id: string
    clientId: string | null
    phoneNumberId: string | null
    unreadCount: number
    lastMessage: {
      id: string
      threadId: string
      direction: "Inbound" | "Outbound"
      status: "Received" | "Queued" | "Sent" | "Delivered" | "Undelivered" | "Failed"
      errorCode: number | null
      fromNumber: string
      toNumber: string
      body: string
      readAt: string | any | null
      createdAt: string | any
      client: {
        id: string
        code: string
        name: string | null
        phone: string
        isConfirmed: boolean
        isBlacklisted: boolean
        hasLinkedNumbers: boolean
      } | null
      phoneNumber: {
        id: string
        name: string | null
        number: string
      } | null
      sentBy: {
        id: string
        name: string
      } | null
    }
  }>
  total: number
}
Test Endpoint
Optional fields (click to add):
phoneNumberId search
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Count Unread Messages sms.unreadCount
SMS

Inbound messages nobody has read yet, across the whole inbox β€” the sidebar badge. Read state is global.

Output Schema
{
  count: number
}
Test Endpoint
query
Read an SMS Conversation sms.threadMessages
SMS

One conversation, oldest-first within the page. Page 1 is the most recent messages.

Input Schema
{
  page: number
  pageSize: number
  threadId: string
}
Output Schema
{
  items: Array<{
    id: string
    threadId: string
    direction: "Inbound" | "Outbound"
    status: "Received" | "Queued" | "Sent" | "Delivered" | "Undelivered" | "Failed"
    errorCode: number | null
    fromNumber: string
    toNumber: string
    body: string
    readAt: string | any | null
    createdAt: string | any
    client: {
      id: string
      code: string
      name: string | null
      phone: string
      isConfirmed: boolean
      isBlacklisted: boolean
      hasLinkedNumbers: boolean
    } | null
    phoneNumber: {
      id: string
      name: string | null
      number: string
    } | null
    sentBy: {
      id: string
      name: string
    } | null
  }>
  total: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
SMS Conversation Timeline Events sms.threadEvents
SMS

The non-message rows of one conversation, oldest first β€” the client's bookings and payments. Client-scoped, not thread-scoped: nothing records which conversation an event belongs to, so a client who texts two of our lines sees the same event on both. Imported rows are excluded from both, cancelled bookings from the bookings; a payment on a cancelled booking still shows, and system-created credit payments do not.

Input Schema
{
  threadId: string
}
Output Schema
{
  events: Array<{
    type: "booking" | "payment"
    id: string
    at: string | any
    appointmentId: string
    talentName: string
    date: string | any
    startTime?: string | null
    amount?: number
    isDeposit?: boolean
    method?: "EMT" | "AmazonGiftCard" | "Cash" | "Credit" | "TalentCredit"
  }>
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Mark an SMS Conversation Read sms.markThreadRead
SMS

Clears the unread flag on every inbound message in one conversation. Read state is global β€” the inbox is one shared queue.

Input Schema
{
  threadId: string
}
Output Schema
{
  count: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Reply to an SMS Conversation sms.reply
SMS

Sends a text to a client from one of our lines and records it against the sending user.

Input Schema
{
  threadId: string
  body: string
}
Output Schema
{
  id: string
  threadId: string
  direction: "Inbound" | "Outbound"
  status: "Received" | "Queued" | "Sent" | "Delivered" | "Undelivered" | "Failed"
  errorCode: number | null
  fromNumber: string
  toNumber: string
  body: string
  readAt: string | any | null
  createdAt: string | any
  client: {
    id: string
    code: string
    name: string | null
    phone: string
    isConfirmed: boolean
    isBlacklisted: boolean
    hasLinkedNumbers: boolean
  } | null
  phoneNumber: {
    id: string
    name: string | null
    number: string
  } | null
  sentBy: {
    id: string
    name: string
  } | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Tag

query
List Tags tag.list
Tags

Returns all tags

Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string
}>
Test Endpoint
query
Get Tag by ID tag.byId
Tags

Returns a tag by ID

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create Tag tag.create
Tags

Creates a new tag

Input Schema
{
  name: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Tag tag.update
Tags

Updates a tag

Input Schema
{
  name?: string
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string
}
Test Endpoint
Optional fields (click to add):
name
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Tag tag.delete
Tags

Deletes a tag

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  name: string
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

Talent

query
List Talents talent.list
Talents

Returns the requesting company’s talents for the public roster, including service names for the filter UI

Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  nickname: string
  age: number | null
  height: string | null
  weight: string | null
  measurements: string | null
  nationality: string | null
  hair: string | null
  eyes: string | null
  tattoos: boolean | null
  enhanced: boolean | null
  cupSize: string | null
  duos: boolean | null
  tagline: string | null
  bio: string | null
  badge: "Visiting" | "Star" | "Vip" | "New" | null
  tags: Array<{
    tag: {
      id: string
      createdAt: string | any
      updatedAt: string | any
      name: string
    }
  }>
  images: any[]
  menuServices: Array<{
    service: {
      name: string
    }
  }>
}>
Test Endpoint
query
Available Today talent.availableToday
Talents

Returns the requesting company’s talents (with images) scheduled for today, including the city they are in today

Input Schema
{
  today: any
}
Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  nickname: string
  age: number | null
  height: string | null
  weight: string | null
  measurements: string | null
  nationality: string | null
  hair: string | null
  eyes: string | null
  tattoos: boolean | null
  enhanced: boolean | null
  cupSize: string | null
  duos: boolean | null
  tagline: string | null
  bio: string | null
  badge: "Visiting" | "Star" | "Vip" | "New" | null
  tags: Array<{
    tag: {
      id: string
      createdAt: string | any
      updatedAt: string | any
      name: string
    }
  }>
  images: any[]
  city: string
  startTime: string | null
  endTime: string | null
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Talent by ID talent.byId
Talents

Returns a talent by ID with relations; 404 unless the talent belongs to the requesting company

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  nickname: string
  age: number | null
  height: string | null
  weight: string | null
  measurements: string | null
  nationality: string | null
  hair: string | null
  eyes: string | null
  tattoos: boolean | null
  enhanced: boolean | null
  cupSize: string | null
  duos: boolean | null
  tagline: string | null
  bio: string | null
  badge: "Visiting" | "Star" | "Vip" | "New" | null
  defaultPhoneNumberId: string | null
  phoneNumberExpiresAt: string | any | null
  defaultPhoneNumber?: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string | null
    number: string
  } | null
  tags: Array<{
    tag: {
      id: string
      createdAt: string | any
      updatedAt: string | any
      name: string
    }
  }>
  menus: Array<{
    id: string
    createdAt: string | any
    updatedAt: string | any
    type: "Regular" | "Vip"
    durationMinutes: number
    price: number
  }>
  menuServices: Array<{
    id: string
    serviceId: string
    excludedFromPromo: boolean
    includedInVip: boolean
    price: number | null
    service: {
      id: string
      name: string
      createdAt: string | any
    }
  }>
  schedules: Array<{
    id: string
    locationId: string
    date: string | any
    startTime: string | null
    endTime: string | null
    location: {
      id: string
      city: string | any
      name: string
      phoneNumberId: string | null
      phoneNumber?: {
        id: string
        name: string | null
        number: string
      } | null
      tenancyEndedAt: string | any | null
      deletedAt: string | any | null
    }
  }>
  images: any[]
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Talent by Nickname talent.byNickname
Talents

Returns a talent by nickname with relations; 404 unless the talent belongs to the requesting company

Input Schema
{
  nickname: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  nickname: string
  age: number | null
  height: string | null
  weight: string | null
  measurements: string | null
  nationality: string | null
  hair: string | null
  eyes: string | null
  tattoos: boolean | null
  enhanced: boolean | null
  cupSize: string | null
  duos: boolean | null
  tagline: string | null
  bio: string | null
  badge: "Visiting" | "Star" | "Vip" | "New" | null
  defaultPhoneNumberId: string | null
  phoneNumberExpiresAt: string | any | null
  defaultPhoneNumber?: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string | null
    number: string
  } | null
  tags: Array<{
    tag: {
      id: string
      createdAt: string | any
      updatedAt: string | any
      name: string
    }
  }>
  menus: Array<{
    id: string
    createdAt: string | any
    updatedAt: string | any
    type: "Regular" | "Vip"
    durationMinutes: number
    price: number
  }>
  menuServices: Array<{
    id: string
    serviceId: string
    excludedFromPromo: boolean
    includedInVip: boolean
    price: number | null
    service: {
      id: string
      name: string
      createdAt: string | any
    }
  }>
  schedules: Array<{
    id: string
    locationId: string
    date: string | any
    startTime: string | null
    endTime: string | null
    location: {
      id: string
      city: string | any
      name: string
      phoneNumberId: string | null
      phoneNumber?: {
        id: string
        name: string | null
        number: string
      } | null
      tenancyEndedAt: string | any | null
      deletedAt: string | any | null
    }
  }>
  images: any[]
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
List Talent Summaries talent.listSummary
Talents

Returns lightweight talent list (all companies) with a `member` flag for the requesting company

Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  nickname: string
  badge: "Visiting" | "Star" | "Vip" | "New" | null
  tagline: string | null
  member: boolean
  companies: string[]
}>
Test Endpoint
query
Get Talent by Nickname (Admin) talent.byNicknameAll
Talents

Returns a talent by nickname across all companies, with a `member` flag for the requesting company

Input Schema
{
  nickname: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  nickname: string
  age: number | null
  height: string | null
  weight: string | null
  measurements: string | null
  nationality: string | null
  hair: string | null
  eyes: string | null
  tattoos: boolean | null
  enhanced: boolean | null
  cupSize: string | null
  duos: boolean | null
  tagline: string | null
  bio: string | null
  badge: "Visiting" | "Star" | "Vip" | "New" | null
  defaultPhoneNumberId: string | null
  phoneNumberExpiresAt: string | any | null
  defaultPhoneNumber?: {
    id: string
    createdAt: string | any
    updatedAt: string | any
    name: string | null
    number: string
  } | null
  tags: Array<{
    tag: {
      id: string
      createdAt: string | any
      updatedAt: string | any
      name: string
    }
  }>
  menus: Array<{
    id: string
    createdAt: string | any
    updatedAt: string | any
    type: "Regular" | "Vip"
    durationMinutes: number
    price: number
  }>
  menuServices: Array<{
    id: string
    serviceId: string
    excludedFromPromo: boolean
    includedInVip: boolean
    price: number | null
    service: {
      id: string
      name: string
      createdAt: string | any
    }
  }>
  schedules: Array<{
    id: string
    locationId: string
    date: string | any
    startTime: string | null
    endTime: string | null
    notes: string | null
    location: {
      id: string
      city: string | any
      name: string
      phoneNumberId: string | null
      phoneNumber?: {
        id: string
        name: string | null
        number: string
      } | null
      tenancyEndedAt: string | any | null
      deletedAt: string | any | null
    }
  }>
  images: any[]
  member: boolean
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Talent Notes (Admin) talent.notesById
Talents

Admin-only forum-ad notes for a talent

Input Schema
{
  id: string
}
Output Schema
{
  notes: string | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
List Talent Memberships talent.memberships
Talents

Returns the companies a talent belongs to

Input Schema
{
  talentId: string
}
Output Schema
Array<{
  companyId: string
  companySlug: string
  companyName: string
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Set Talent Membership talent.setMembership
Talents

Adds a talent to or removes a talent from a company; returns the updated membership list

Input Schema
{
  talentId: string
  companyId: string
  member: boolean
}
Output Schema
Array<{
  companyId: string
  companySlug: string
  companyName: string
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
List Talent Exclusions talent.listExclusions
Talents

Returns the ids of clients on a talent's Don't-See list

Input Schema
{
  talentId: string
}
Output Schema
string[]
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Set Talent Exclusions talent.setExclusions
Talents

Replaces a talent's Don't-See list β€” the clients this talent won't see

Input Schema
{
  talentId: string
  clientIds: string[]
}
Output Schema
string[]
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get Talent Login talent.login
Talents

Returns the linked login's phone number β€” null means the talent cannot sign in to the staff portal

Input Schema
{
  talentId: string
}
Output Schema
{
  phoneNumber: string | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Set Talent Login Phone talent.setLoginPhone
Talents

Sets or removes the phone number this talent signs in to the staff portal with (LUX-276). Setting a number mints a login if she has none; removing it revokes her sessions

Input Schema
{
  talentId: string
  phoneNumber: any | null
}
Output Schema
{
  phoneNumber: string | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
My Talent Profile talent.me
Talents

The requesting user's own talent profile β€” the talent linked to their account, never anyone else's; null for an admin with no talent link

Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  nickname: string
  age: number | null
  height: string | null
  weight: string | null
  measurements: string | null
  nationality: string | null
  hair: string | null
  eyes: string | null
  tattoos: boolean | null
  enhanced: boolean | null
  cupSize: string | null
  duos: boolean | null
  tagline: string | null
  bio: string | null
  badge: "Visiting" | "Star" | "Vip" | "New" | null
  defaultPhoneNumberId: string | null
  phoneNumberExpiresAt: string | any | null
} | null
Test Endpoint
query
My Schedule Week talent.mySchedule
Talents

The requesting talent's own Mon–Sun week: each scheduled day's venue, shift times, live booking count and her own book-on fee

Input Schema
{
  weekStart: any
}
Output Schema
{
  startDate: string | any
  endDate: string | any
  days: Array<{
    scheduleId: string
    date: string | any
    locationId: string
    locationPhone: string | null
    locationName: string
    city: string
    street: string | null
    startTime: string | null
    endTime: string | null
    bookingCount: number
    bookOnFee: number | null
    envelopeDroppedAt: string | any | null
  }>
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
My Tour Calendar Month talent.myTourCalendar
Talents

The requesting talent's own scheduled days over one calendar month β€” the Tours calendar's schedule side (LUX-268)

Input Schema
{
  month: string
}
Output Schema
{
  startDate: string | any
  endDate: string | any
  days: Array<{
    scheduleId: string
    date: string | any
    locationId: string
    locationPhone: string | null
    locationName: string
    city: string
    street: string | null
    startTime: string | null
    endTime: string | null
    bookingCount: number
    bookOnFee: number | null
    envelopeDroppedAt: string | any | null
  }>
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
My Locations talent.myLocations
Talents

The venues on the requesting talent's own roster, each with its talent-facing content: getting-in text, house guidelines, FAQ and the emergency plan with its pictures

Output Schema
Array<{
  id: string
  name: string
  city: string
  street: string | null
  unitNumber: string | null
  phone: string | null
  checkInInstructions: string | null
  houseGuidelines: string[]
  faq: Array<{
    question: string
    answer: string
  }>
  emergencyPlan: string | null
  emergencyMedia: Array<{
    id: string
    url: string
    mimeType: string
  }>
}>
Test Endpoint
query
My Appointments talent.myAppointments
Talents

The requesting talent's own bookings on one day, each with its client display, services, payments and owed/paid balance

Input Schema
{
  date: any
}
Output Schema
Array<{
  id: string
  scheduleId: string
  startTime: string | null
  clientName: string
  menuLabel: string | null
  fee: number
  discount: number
  confirmed: boolean
  notes?: string | null
  cancelledAt: string | any | null
  bookerName: string | null
  isIndy: boolean
  wrappedUpAt: string | any | null
  wrapUpNoShow: boolean
  wrapUpExtraMinutes: number
  wrapUpNotes: string | null
  wrapUpExtras: Array<{
    menuServiceId: string
    name: string
    price: number
  }>
  clientCode: string
  date: string | any
  locationId: string
  locationName: string
  services: Array<{
    id: string
    serviceName: string
    price: number
  }>
  payments: Array<{
    id: string
    method: "EMT" | "AmazonGiftCard" | "Cash" | "Credit" | "TalentCredit"
    amount: number
    isDeposit: boolean
  }>
  owed: number
  paid: number
  balance: number
}>
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
My Appointment talent.myAppointment
Talents

One of the requesting talent's own bookings β€” NOT_FOUND when it isn't theirs

Input Schema
{
  appointmentId: string
}
Output Schema
{
  id: string
  scheduleId: string
  startTime: string | null
  clientName: string
  menuLabel: string | null
  fee: number
  discount: number
  confirmed: boolean
  notes?: string | null
  cancelledAt: string | any | null
  bookerName: string | null
  isIndy: boolean
  wrappedUpAt: string | any | null
  wrapUpNoShow: boolean
  wrapUpExtraMinutes: number
  wrapUpNotes: string | null
  wrapUpExtras: Array<{
    menuServiceId: string
    name: string
    price: number
  }>
  clientCode: string
  date: string | any
  locationId: string
  locationName: string
  services: Array<{
    id: string
    serviceName: string
    price: number
  }>
  payments: Array<{
    id: string
    method: "EMT" | "AmazonGiftCard" | "Cash" | "Credit" | "TalentCredit"
    amount: number
    isDeposit: boolean
  }>
  owed: number
  paid: number
  balance: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
My Pay talent.myPay
Talents

The requesting talent's own Mon–Sun pay week: services/extras/cancellation totals and the per-booking breakdown

Input Schema
{
  date: any
}
Output Schema
{
  startDate: string | any
  endDate: string | any
  services: number
  extras: number
  cancellations: number
  total: number
  rows: Array<{
    appointmentId: string
    date: string | any
    clientCode: string
    clientName: string
    service: string
    locationName: string
    methods: "EMT" | "AmazonGiftCard" | "Cash" | "Credit" | "TalentCredit"[]
    total: number
    startTime: string | null
    wrappedUpAt: string | any | null
  }>
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
My Extras talent.myExtras
Talents

The requesting talent's own priced add-ons, for the wrap-up screen's chips

Output Schema
Array<{
  menuServiceId: string
  name: string
  price: number
}>
Test Endpoint
mutation
Wrap Up Appointment talent.wrapUpAppointment
Talents

Close out one of the requesting talent's own bookings: what she actually provided, the add-ons she sold and a private note for the office. Same-day or past only, once per booking, and never a pay change β€” a reported difference is flagged, not recalculated

Input Schema
{
  appointmentId: string
  today: any
  noShow: boolean
  extraMinutes: 0 | 15 | 30
  extras: string[]
  notes?: string
}
Output Schema
{
  id: string
  scheduleId: string
  startTime: string | null
  clientName: string
  menuLabel: string | null
  fee: number
  discount: number
  confirmed: boolean
  notes?: string | null
  cancelledAt: string | any | null
  bookerName: string | null
  isIndy: boolean
  wrappedUpAt: string | any | null
  wrapUpNoShow: boolean
  wrapUpExtraMinutes: number
  wrapUpNotes: string | null
  wrapUpExtras: Array<{
    menuServiceId: string
    name: string
    price: number
  }>
  clientCode: string
  date: string | any
  locationId: string
  locationName: string
  services: Array<{
    id: string
    serviceName: string
    price: number
  }>
  payments: Array<{
    id: string
    method: "EMT" | "AmazonGiftCard" | "Cash" | "Credit" | "TalentCredit"
    amount: number
    isDeposit: boolean
  }>
  owed: number
  paid: number
  balance: number
}
Test Endpoint
Optional fields (click to add):
notes
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Drop Envelope talent.dropEnvelope
Talents

Close out the requesting talent's own scheduled day β€” she declares the cash envelope handed in. Same-day or past only, once per day, and never a money change: the office sees the flag on the daily tracker

Input Schema
{
  scheduleId: string
  today: any
}
Output Schema
{
  envelopeDroppedAt: string | any
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create Talent talent.create
Talents

Creates a new talent

Input Schema
{
  nickname: string
  age?: number | null
  height?: string | null
  weight?: string | null
  measurements?: string | null
  nationality?: string | null
  hair?: string | null
  eyes?: string | null
  tattoos?: boolean | null
  enhanced?: boolean | null
  cupSize?: string | null
  duos?: boolean | null
  tagline?: string | null
  bio?: string | null
  badge?: "Visiting" | "Star" | "Vip" | "New" | null
  defaultPhoneNumberId?: string | null
  phoneNumberExpiresAt?: any | null
  notes?: string | null
  tags?: string[]
  menus?: Array<{
    type: "Regular" | "Vip"
    durationMinutes: number
    price: number
  }>
  menuServices?: Array<{
    serviceId: string
    price?: number | null
  }>
  images?: Array<{
    fileId: string
    variant?: "Original" | "Thumbnail" | "Large"
    imageBrand?: "LuxWatermark" | "Clean" | null
    width?: number | null
    height?: number | null
    sortOrder?: number
  }>
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  nickname: string
  age: number | null
  height: string | null
  weight: string | null
  measurements: string | null
  nationality: string | null
  hair: string | null
  eyes: string | null
  tattoos: boolean | null
  enhanced: boolean | null
  cupSize: string | null
  duos: boolean | null
  tagline: string | null
  bio: string | null
  badge: "Visiting" | "Star" | "Vip" | "New" | null
  defaultPhoneNumberId: string | null
  phoneNumberExpiresAt: string | any | null
}
Test Endpoint
Optional fields (click to add):
age height weight measurements nationality hair eyes tattoos enhanced cupSize duos tagline bio badge defaultPhoneNumberId phoneNumberExpiresAt notes tags menus menuServices images
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update Talent talent.update
Talents

Updates an existing talent

Input Schema
{
  nickname?: string
  age?: number | null
  height?: string | null
  weight?: string | null
  measurements?: string | null
  nationality?: string | null
  hair?: string | null
  eyes?: string | null
  tattoos?: boolean | null
  enhanced?: boolean | null
  cupSize?: string | null
  duos?: boolean | null
  tagline?: string | null
  bio?: string | null
  badge?: "Visiting" | "Star" | "Vip" | "New" | null
  defaultPhoneNumberId?: string | null
  phoneNumberExpiresAt?: any | null
  notes?: string | null
  tags?: string[]
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  nickname: string
  age: number | null
  height: string | null
  weight: string | null
  measurements: string | null
  nationality: string | null
  hair: string | null
  eyes: string | null
  tattoos: boolean | null
  enhanced: boolean | null
  cupSize: string | null
  duos: boolean | null
  tagline: string | null
  bio: string | null
  badge: "Visiting" | "Star" | "Vip" | "New" | null
  defaultPhoneNumberId: string | null
  phoneNumberExpiresAt: string | any | null
}
Test Endpoint
Optional fields (click to add):
nickname age height weight measurements nationality hair eyes tattoos enhanced cupSize duos tagline bio badge defaultPhoneNumberId phoneNumberExpiresAt notes tags
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Delete Talent talent.delete
Talents

Deletes a talent

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  nickname: string
  age: number | null
  height: string | null
  weight: string | null
  measurements: string | null
  nationality: string | null
  hair: string | null
  eyes: string | null
  tattoos: boolean | null
  enhanced: boolean | null
  cupSize: string | null
  duos: boolean | null
  tagline: string | null
  bio: string | null
  badge: "Visiting" | "Star" | "Vip" | "New" | null
  defaultPhoneNumberId: string | null
  phoneNumberExpiresAt: string | any | null
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Send a Change Request talent.createRequest
Talents

Asks the office for a schedule change, a tour in one of the company cities, supplies for one of her own venues, an edit to her own profile or anything else. A request is a ticket β€” it never edits the schedule or the profile

Input Schema
{
  type: "scheduleChange" | "profileChange" | "tour" | "supplies" | "other"
  startDate?: "" | string
  endDate?: "" | string
  cityId?: string | null
  locationId?: string | null
  note?: string | null
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  type: "timeOff" | "scheduleChange" | "profileChange" | "tour" | "supplies" | "other"
  status: "open" | "approved" | "declined"
  talentId: string | null
  talentName: string
  startDate: string | any | null
  endDate: string | any | null
  cityId: string | null
  cityName: string | null
  locationId: string | null
  locationName: string | null
  note: string | null
  decisionNote: string | null
  decidedAt: string | any | null
}
Test Endpoint
Optional fields (click to add):
startDate endDate cityId locationId note
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
My Change Requests talent.myRequests
Talents

The requesting talent's own change requests, newest first, each with the office's answer once decided

Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  type: "timeOff" | "scheduleChange" | "profileChange" | "tour" | "supplies" | "other"
  status: "open" | "approved" | "declined"
  talentId: string | null
  talentName: string
  startDate: string | any | null
  endDate: string | any | null
  cityId: string | null
  cityName: string | null
  locationId: string | null
  locationName: string | null
  note: string | null
  decisionNote: string | null
  decidedAt: string | any | null
}>
Test Endpoint
query
Tour Capacity Preview talent.capacityPreview
Talents

The days a tour ask would land over the city's capacity (LUX-271) β€” advisory only, the form shows it as a warning and the request always goes through

Input Schema
{
  cityId: string
  startDate: any
  endDate: any
}
Output Schema
{
  days: Array<{
    date: string | any
    scheduled: number
    capacity: number
  }>
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Talent Change Request Queue talent.requestQueue
Talents

Change requests from talent for the requesting company, newest first, optionally filtered by status

Input Schema
{
  status?: "open" | "approved" | "declined"
}
Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  type: "timeOff" | "scheduleChange" | "profileChange" | "tour" | "supplies" | "other"
  status: "open" | "approved" | "declined"
  talentId: string | null
  talentName: string
  startDate: string | any | null
  endDate: string | any | null
  cityId: string | null
  cityName: string | null
  locationId: string | null
  locationName: string | null
  note: string | null
  decisionNote: string | null
  decidedAt: string | any | null
}>
Test Endpoint
Optional fields (click to add):
status
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Decide a Change Request talent.decideRequest
Talents

Approves or declines an open change request with an optional note. Approving does not touch the schedule β€” the office applies the change by hand

Input Schema
{
  id: string
  status: "approved" | "declined"
  decisionNote?: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  type: "timeOff" | "scheduleChange" | "profileChange" | "tour" | "supplies" | "other"
  status: "open" | "approved" | "declined"
  talentId: string | null
  talentName: string
  startDate: string | any | null
  endDate: string | any | null
  cityId: string | null
  cityName: string | null
  locationId: string | null
  locationName: string | null
  note: string | null
  decisionNote: string | null
  decidedAt: string | any | null
}
Test Endpoint
Optional fields (click to add):
decisionNote
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.

User

query
Get Current User user.me
Users

Returns the authenticated user profile

Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  email: string
  name: string | null
  role: string | null
  phoneNumber?: string | null
  talentId?: string | null
  seenTours: string[]
}
Test Endpoint
mutation
Update Own Profile user.updateSelf
Users

Updates the authenticated user profile (name, email) β€” the settings page. Role and phone are out of reach: role changes are admin-only, phone changes go through the SMS-verify flow.

Input Schema
{
  email?: string
  name?: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  email: string
  name: string | null
  role: string | null
  phoneNumber?: string | null
  talentId?: string | null
  seenTours: string[]
}
Test Endpoint
Optional fields (click to add):
email name
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Mark Tour Seen user.markTourSeen
Users

Records an onboarding tour as seen so it never auto-starts again. A no-op while impersonating β€” standing in as someone must not mark their tours.

Input Schema
{
  tourId: "welcome-admin" | "welcome-booker" | "notifications" | "complete-profile"
}
Output Schema
any
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Create User user.create
Users

Creates a new user via the auth admin API

Input Schema
{
  email: string
  name: string
  password: string
  role: "user" | "admin" | "booker" | "talent" | "support"
  payRate?: number | null
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  email: string
  name: string | null
  role: string | null
  phoneNumber?: string | null
  talentId?: string | null
  seenTours: string[]
}
Test Endpoint
Optional fields (click to add):
payRate
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
Get User by ID user.getById
Users

Returns a user by their ID

Input Schema
{
  id: string
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  email: string
  name: string | null
  role: string | null
  phoneNumber?: string | null
  talentId?: string | null
  seenTours: string[]
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Update User user.update
Users

Updates an existing user

Input Schema
{
  id: string
  data: {
    email?: string
    name?: string
    role?: "user" | "admin" | "booker" | "talent" | "support"
    phoneNumber?: any | null
    talentId?: string | null
  }
}
Output Schema
{
  id: string
  createdAt: string | any
  updatedAt: string | any
  email: string
  name: string | null
  role: string | null
  phoneNumber?: string | null
  talentId?: string | null
  seenTours: string[]
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Set User Password user.setPassword
Users

Sets a new password for a user via the auth admin API

Input Schema
{
  userId: string
  newPassword: string
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
mutation
Merge Users user.merge
Users

Folds one user into another and deletes it: bookings, sent texts, payroll rows and uploads move to the survivor; overlapping weekly-payment receipts are summed. The retired login (sessions, passkeys) is destroyed. Irreversible.

Input Schema
{
  keepUserId: string
  mergeUserId: string
}
Output Schema
{
  keptName: string
  retiredName: string
  appointmentsMoved: number
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.
query
List Users user.list
Users

Returns all users

Output Schema
Array<{
  id: string
  createdAt: string | any
  updatedAt: string | any
  email: string
  name: string | null
  role: string | null
  phoneNumber?: string | null
}>
Test Endpoint

WeeklyReport

query
Weekly Report weeklyReport.byWeek
WeeklyReport

Collected cash (by rail, per city), booker pay, and expenses (by category) rolled up over a week β€” the Mon–Sun bounds are sent by the client

Input Schema
{
  startDate: any
  endDate: any
}
Output Schema
{
  weekStart: string | any
  weekEnd: string | any
  moneyIn: {
    cash: number
    emt: number
    giftCard: number
    credit: number
    total: number
  }
  bookerPay: number
  cancellationAgency: number
  talentCredit: number
  expensesByCategory: Record<string, number>
  totalExpenses: number
  generalExpenses: number
  totalOut: number
  net: number
  cities: Array<{
    city: string
    moneyIn: {
      cash: number
      emt: number
      giftCard: number
      credit: number
      total: number
    }
    bookerPay: number
    cancellationAgency: number
    talentCredit: number
    expenses: number
  }>
}
Test Endpoint
πŸ’‘ Tip: Schema is pre-filled with required fields. Click badges above to add optional fields.