Skip to content

GraphQL reference

The full Developer API schema below is generated from the SDL that backs the endpoint, so it always matches what the endpoint serves.

All operations are sent as POST to the dated GraphQL endpoint with your install's runtime token as a bearer credential:

Authorization: Bearer <runtime-token>

The runtime token is issued once when you run stayblox app install --team <slug>. See Getting started for the full install step.

Core API

Beyond the payment and channel mutations, the API exposes queries over the installing team's data (plus rate and booking writes), gated by scopes your app declares in app.toml:

ScopeUnlocks
read_bookingsbooking, bookings
read_contactscontact: guest PII
read_conversationsconversation, message
read_propertiesproperty, properties, unitTypes: inventory discovery
read_ratesunitTypeRates, bookingQuote: per-day rates, restrictions, availability, and priced stay quotes
write_ratesratesUpdate: set nightly rates and stay restrictions
create_bookingsbookingCreate: place an instant booking or file a booking request
read_taskstask, tasks, propertyTaskCalendar: operational work, checklists, custom fields
write_taskstaskCreate, taskUpdate, taskAssign, taskTransitionStatus, taskComplete, taskCancel, taskAddChecklistItem, taskSetChecklistItemDone, taskSetCustomField
provide_inbox_channelProvide a messaging channel: inject inbound guest messages via inboundMessageCreate and receive outbound delivery commands at your message_send endpoint.
provide_channelchannelIntegrations, channelIntegrationCreate, channelIntegrationDisconnect, channelListingLink, channelListingUnlink, reservationUpsert: register OTA connections, receive ARI pushes at your ari_push endpoint, and submit reservations. See Channel apps.

An operation without its scope fails with a GraphQL error naming the missing scope. PII is gated separately: Booking.contact requires read_contacts in addition to read_bookings, so a bookings-only app never sees guest details.

Mechanics worth knowing:

  • bookings, properties, and unitTypes are forward-paginated by id cursor; pass first and feed pageInfo.endCursor back as after until hasNextPage is false.
  • unitTypeRates serves forward-looking windows of at most 366 days per call; page longer ranges by date.
  • Discover inventory with properties / unitTypes (each unit type carries a unitsCount), then feed a unitTypeId into unitTypeRates or ratesUpdate.
  • unitTypes[].kind is standard for an ordinary room type or entire_property for a listing that books the whole property; both kinds support the same queries and mutations.

Writing rates

ratesUpdate sets the nightly rate and stay restrictions (minStay, maxStay, closedToArrival, closedToDeparture, stopSell) for one unit type across an inclusive date range of at most 366 days. It goes through the same pipeline as host edits, so connected channels sync and a rates.updated webhook digest is emitted.

Field semantics: a field you omit keeps its current value; a field you send as null clears that override back to the unit type's base value. Invalid input is returned in userErrors (with the offending field path) rather than as a GraphQL error.

Note that your own app also receives the resulting rates.updated digest; deliveries are not filtered by which actor caused the change. Guard against update loops by not reacting to digests for changes you just wrote.

Creating bookings

bookingQuote prices and validates a stay, returning itemised fees and taxes plus any blocking violations, without committing it; gated by read_rates. To transact, bookingCreate (scope create_bookings) reuses the host's own booking pipeline: on instant-book storefronts it places a held, unpaid booking and returns a paymentUrl where the guest pays; on review storefronts it files a booking request the host approves. outcome (HELD or INQUIRY) tells you which ran, and instantBook on the quote lets you label the action ahead of time. Pass a stable idempotencyKey so a retried call returns the original booking instead of a duplicate.

The generated reference below carries every type and field. These queries pair with webhooks: the event tells you what changed, these queries return its current state.

Try it

Run queries against the live endpoint right here. Paste your install's runtime token, adjust the endpoint if needed, and explore the schema with autocomplete.

GraphQL API — 2026-01

The complete schema for the 2026-01 Developer API, generated from the SDL in the app repo (graphql/developer/2026-01/). All operations are served from POST /developer/api/2026-01/graphql.

Queries

channelIntegrations

OTA integrations owned by this app, with listing links and sync status.

graphql
channelIntegrations(first: Int = 50, after: ID): ChannelIntegrationConnection!
ArgumentTypeDefaultDescription
firstInt50
afterID

contact

A guest contact by id. Requires the read_contacts scope.

graphql
contact(id: ID!): Contact
ArgumentTypeDefaultDescription
idID!

booking

A booking by id. Requires the read_bookings scope.

graphql
booking(id: ID!): Booking
ArgumentTypeDefaultDescription
idID!

bookings

Bookings, oldest id first, forward-paginated by id cursor. Requires read_bookings.

graphql
bookings(status: String, checkInFrom: String, checkInTo: String, first: Int! = 50, after: ID): BookingConnection!
ArgumentTypeDefaultDescription
statusString
checkInFromString
checkInToString
firstInt!50
afterID

conversation

A conversation with its messages (latest 100, oldest first). Requires read_conversations.

graphql
conversation(id: ID!): Conversation
ArgumentTypeDefaultDescription
idID!

message

A single message by id. Requires read_conversations.

graphql
message(id: ID!): Message
ArgumentTypeDefaultDescription
idID!

unitTypeRates

Per-day rate, restrictions and available-unit count for a unit type. Window max 366 days. Requires read_rates.

graphql
unitTypeRates(unitTypeId: ID!, from: String!, to: String!): [UnitTypeRateDay!]!
ArgumentTypeDefaultDescription
unitTypeIdID!
fromString!
toString!

property

A property by id with its unit types. Requires read_properties.

graphql
property(id: ID!): Property
ArgumentTypeDefaultDescription
idID!

properties

Properties, oldest id first, forward-paginated by id cursor. Requires read_properties.

graphql
properties(first: Int! = 50, after: ID): PropertyConnection!
ArgumentTypeDefaultDescription
firstInt!50
afterID

unitTypes

Unit types with unit counts, oldest id first, forward-paginated by id cursor. Requires read_properties.

graphql
unitTypes(propertyId: ID, first: Int! = 50, after: ID): UnitTypeConnection!
ArgumentTypeDefaultDescription
propertyIdID
firstInt!50
afterID

bookingQuote

Price and validate a stay without committing it. Returns itemized totals (mandatory fees and added taxes included) plus any stay-restriction violations that would block a booking. instantBook reflects the host's booking mode, so a caller can label the action "Book now" vs "Request to book". Requires read_rates.

graphql
bookingQuote(input: BookingQuoteInput!): BookingQuote!
ArgumentTypeDefaultDescription
inputBookingQuoteInput!

task

A task by id. Requires read_tasks.

graphql
task(id: ID!): Task
ArgumentTypeDefaultDescription
idID!

tasks

Tasks, oldest id first, forward-paginated by id cursor. Filterable; pass filter.updatedSince to resync after downtime (returns everything changed at/after that instant, still id-ordered). Requires read_tasks.

graphql
tasks(filter: TaskFilterInput, first: Int! = 50, after: ID): TaskConnection!
ArgumentTypeDefaultDescription
filterTaskFilterInput
firstInt!50
afterID

propertyTaskCalendar

Tasks for one property within a due-date window (inclusive, max 366 days), ordered by due time — for calendar rendering. Requires read_tasks.

graphql
propertyTaskCalendar(propertyId: ID!, from: String!, to: String!): [Task!]!
ArgumentTypeDefaultDescription
propertyIdID!
fromString!
toString!

aiModels

Models available for aiGenerate: active, priced catalog models. Requires ai_inference.

graphql
aiModels: [AiModelInfo!]!

apiVersion

The API version served by this endpoint.

graphql
apiVersion: String!

currentApp

The app making the request, resolved from the bearer token. Null if unauthenticated.

graphql
currentApp: App

Mutations

paymentSessionResolve

Mark a payment session as successfully paid.

graphql
paymentSessionResolve(id: ID!, providerReference: String, amount: Float): PaymentSessionMutationResult!
ArgumentTypeDefaultDescription
idID!
providerReferenceString
amountFloat

paymentSessionReject

Mark a payment session as failed/declined.

graphql
paymentSessionReject(id: ID!, reason: String): PaymentSessionMutationResult!
ArgumentTypeDefaultDescription
idID!
reasonString

paymentSessionPending

Mark a payment session as still pending an asynchronous outcome.

graphql
paymentSessionPending(id: ID!, providerReference: String): PaymentSessionMutationResult!
ArgumentTypeDefaultDescription
idID!
providerReferenceString

channelIntegrationCreate

Register (or re-activate) an OTA connection for a property this app manages.

graphql
channelIntegrationCreate(input: ChannelIntegrationCreateInput!): ChannelIntegrationResult!
ArgumentTypeDefaultDescription
inputChannelIntegrationCreateInput!

channelIntegrationDisconnect

Disconnect an OTA connection. Sync stops; history is preserved.

graphql
channelIntegrationDisconnect(id: ID!): ChannelIntegrationResult!
ArgumentTypeDefaultDescription
idID!

Link a unit type to an external room type / rate plan. Triggers an initial full ARI push.

graphql
channelListingLink(input: ChannelListingLinkInput!): ChannelListingResult!
ArgumentTypeDefaultDescription
inputChannelListingLinkInput!

Unlink a unit type from its external listing.

graphql
channelListingUnlink(id: ID!): ChannelListingResult!
ArgumentTypeDefaultDescription
idID!

reservationUpsert

Create or revise a reservation that originated on the external channel. Idempotent per externalId; stale revisions are ignored.

graphql
reservationUpsert(input: ReservationInput!): ReservationResult!
ArgumentTypeDefaultDescription
inputReservationInput!

ratesUpdate

Set the nightly rate and/or stay restrictions for a unit type across a date range (inclusive, max 366 days). Omitted fields keep their current value; an explicit null clears that override back to the unit type's base value. Changes sync to connected channels and emit a rates.updated webhook digest. Requires write_rates.

graphql
ratesUpdate(input: RatesUpdateInput!): RatesUpdateResult!
ArgumentTypeDefaultDescription
inputRatesUpdateInput!

metafieldSet

Set an app-owned metafield on a booking, property or contact. Key must be declared in the app manifest; rides on the owner's read scope.

graphql
metafieldSet(ownerType: String!, ownerId: ID!, key: String!, value: String!): MetafieldMutationResult!
ArgumentTypeDefaultDescription
ownerTypeString!
ownerIdID!
keyString!
valueString!

metafieldDelete

Delete an app-owned metafield.

graphql
metafieldDelete(ownerType: String!, ownerId: ID!, key: String!): MetafieldDeleteResult!
ArgumentTypeDefaultDescription
ownerTypeString!
ownerIdID!
keyString!

messageSend

Send a guest-facing message in a conversation. Requires write_conversations.

graphql
messageSend(conversationId: ID!, body: String): MessageSendResult!
ArgumentTypeDefaultDescription
conversationIdID!
bodyString

bookingFlagSet

Set (or replace) this app's flag on a booking, shown to the host as a badge. Requires write_bookings.

graphql
bookingFlagSet(bookingId: ID!, level: String!, message: String): BookingFlagResult!
ArgumentTypeDefaultDescription
bookingIdID!
levelString!
messageString

bookingChargeAdd

Add a charge line to a booking through the fees engine. Rejected once an invoice is issued. Requires write_charges.

graphql
bookingChargeAdd(bookingId: ID!, label: String!, amount: String!, currency: String!): BookingChargeResult!
ArgumentTypeDefaultDescription
bookingIdID!
labelString!
amountString!
currencyString!

bookingCreate

Create a booking for a unit type and date range. On instant-book hosts this holds a PENDING, unpaid booking and returns paymentUrl (the guest pays on the host's own storefront); on review hosts it files an inquiry the host approves manually. outcome says which path ran. Pass a stable idempotencyKey so retries return the original result instead of double-booking. Requires create_bookings.

graphql
bookingCreate(input: BookingCreateInput!): BookingCreatePayload!
ArgumentTypeDefaultDescription
inputBookingCreateInput!

taskCreate

Create a task. Requires write_tasks.

graphql
taskCreate(input: TaskCreateInput!): TaskMutationResult!
ArgumentTypeDefaultDescription
inputTaskCreateInput!

taskUpdate

Update a task's non-status fields. Requires write_tasks.

graphql
taskUpdate(input: TaskUpdateInput!): TaskMutationResult!
ArgumentTypeDefaultDescription
inputTaskUpdateInput!

taskAssign

Assign a task to an actor and write back identifiers. The provider-app write-back path of the assignment handshake. Returns userErrors[].code ALREADY_ASSIGNED when the task is already assigned by anyone other than the calling app (host, fallback, or another app) — re-assigning your own assignment is allowed. Requires write_tasks.

graphql
taskAssign(input: TaskAssignInput!): TaskMutationResult!
ArgumentTypeDefaultDescription
inputTaskAssignInput!

taskTransitionStatus

Transition a task to a canonical status. Invalid transitions return userErrors[].code INVALID_TRANSITION. Requires write_tasks.

graphql
taskTransitionStatus(id: ID!, status: TaskStatus!): TaskMutationResult!
ArgumentTypeDefaultDescription
idID!
statusTaskStatus!

taskComplete

Mark a task completed. Returns userErrors[].code INVALID_TRANSITION when COMPLETED isn't reachable from the task's current status. Requires write_tasks.

graphql
taskComplete(id: ID!): TaskMutationResult!
ArgumentTypeDefaultDescription
idID!

taskCancel

Cancel a task. Returns userErrors[].code INVALID_TRANSITION when CANCELLED isn't reachable from the task's current status. Requires write_tasks.

graphql
taskCancel(id: ID!): TaskMutationResult!
ArgumentTypeDefaultDescription
idID!

taskAddChecklistItem

Append a checklist item to a task. Requires write_tasks.

graphql
taskAddChecklistItem(taskId: ID!, label: String!): TaskMutationResult!
ArgumentTypeDefaultDescription
taskIdID!
labelString!

taskSetChecklistItemDone

Mark a checklist item done or not. Requires write_tasks.

graphql
taskSetChecklistItemDone(itemId: ID!, done: Boolean!): TaskMutationResult!
ArgumentTypeDefaultDescription
itemIdID!
doneBoolean!

taskSetCustomField

Set a namespaced, typed custom field on a task (e.g. turno.project_id). value is parsed per type. Requires write_tasks.

graphql
taskSetCustomField(taskId: ID!, namespace: String!, key: String!, type: String!, value: String!): TaskMutationResult!
ArgumentTypeDefaultDescription
taskIdID!
namespaceString!
keyString!
typeString!
valueString!

aiGenerate

Run a text completion billed to the store's AI credits. The app composes its own context into the prompt; the response reports the exact fractional credits charged. Refusals come back as coded userErrors. Requires ai_inference.

graphql
aiGenerate(input: AiGenerateInput!): AiGeneratePayload!
ArgumentTypeDefaultDescription
inputAiGenerateInput!

inboundMessageCreate

Inject an inbound guest message received on a channel this app provides.

graphql
inboundMessageCreate(input: InboundMessageInput!): InboundMessageResult!
ArgumentTypeDefaultDescription
inputInboundMessageInput!

messageStatusUpdate

Report a delivery/read status change for a message this app sent.

graphql
messageStatusUpdate(input: MessageStatusInput!): MessageStatusResult!
ArgumentTypeDefaultDescription
inputMessageStatusInput!

Object types

PaymentSessionMutationResult

FieldTypeDescription
paymentSessionPaymentSessionThe affected session, or null when the input was invalid.
userErrors[UserError!]!Per-field problems with the request; empty on success.

PaymentSession

FieldTypeDescription
idID!
statusString!
amountString!
currencyString!
providerReferenceString

UserError

FieldTypeDescription
field[String!]Path to the offending argument.
messageString!
codeStringMachine-readable error code, when the mutation provides one.

ChannelIntegration

FieldTypeDescription
idID!
propertyIdID!
externalPropertyIdString!
statusString!active, disabled, error or pending.
lastSyncedAtString
lastErrorString
listings[ChannelListing!]!

ChannelListing

FieldTypeDescription
idID!
unitTypeIdID!
externalRoomTypeIdString!
externalRatePlanIdString

ChannelIntegrationConnection

FieldTypeDescription
nodes[ChannelIntegration!]!
pageInfoPageInfo!

ChannelIntegrationResult

FieldTypeDescription
integrationChannelIntegration
userErrors[UserError!]!

ChannelListingResult

FieldTypeDescription
listingChannelListing
userErrors[UserError!]!

Reservation

FieldTypeDescription
idID!
externalIdString!
statusString!synced, unmapped or cancelled.
bookingIdIDThe platform booking created for this reservation, once mapped.

ReservationResult

FieldTypeDescription
reservationReservation
userErrors[UserError!]!

RatesUpdateResult

FieldTypeDescription
okBoolean!
userErrors[UserError!]!

MessageSendResult

FieldTypeDescription
messageMessage
userErrors[UserError!]!

Metafield

An app-owned metafield value on a record.

FieldTypeDescription
keyString!
valueString
typeString!
visibilityString!

MetafieldMutationResult

FieldTypeDescription
metafieldMetafield
userErrors[UserError!]!

MetafieldDeleteResult

FieldTypeDescription
deletedBoolean!
userErrors[UserError!]!

BookingFlag

FieldTypeDescription
levelString!
messageString

BookingFlagResult

FieldTypeDescription
flagBookingFlag
userErrors[UserError!]!

BookingChargeLine

FieldTypeDescription
idID!
labelString
amountString!
currencyString!

BookingChargeResult

FieldTypeDescription
chargeBookingChargeLine
userErrors[UserError!]!

Property

A property, scoped to the installing team.

FieldTypeDescription
idID!
nameString!
typeString!hotel or rental.
addressString
cityString
countryString
countryCodeStringISO 3166-1 alpha-2.
latFloat
lngFloat
activeBoolean!
descriptionStringListing content for channel apps.
cancellationPolicyString
checkInTimeStringHH:MM, property local convention.
checkOutTimeString
imageUrlString
facilities[FacilityItem!]!
unitTypes[UnitType!]!
metafields[Metafield!]!This app's own metafields on this record.

PropertyConnection

FieldTypeDescription
nodes[Property!]!
pageInfoPageInfo!

UnitType

A bookable unit type; pass its id to unitTypeRates / ratesUpdate.

FieldTypeDescription
idID!
propertyIdID!
nameString
kindString!Sellable kind: standard room type, or entire_property (books the whole property).
maxGuestsInt
baseRateFloat
unitsCountInt!Number of physical units of this type.
activeBoolean!
descriptionStringListing content for channel apps.
occAdultsInt!
occChildrenInt!
occInfantsInt!
photoUrls[String!]!Ordered public photo URLs.
facilities[FacilityItem!]!
bedConfigurations[BedConfigurationItem!]!

UnitTypeConnection

FieldTypeDescription
nodes[UnitType!]!
pageInfoPageInfo!

Booking

A booking, scoped to the installing team. Guest PII lives on the contact field (read_contacts).

FieldTypeDescription
idID!
statusString!
checkInString
checkOutString
totalAmountString
currencyString
paymentStatusString
createdAtString!
units[BookingUnitLine!]!
contactIdID
contactContactGuest PII — requires the read_contacts scope in addition to read_bookings.
metafields[Metafield!]!This app's own metafields on this record.

BookingUnitLine

A distinct unit line on a booking (bookings store one row per unit per night).

FieldTypeDescription
unitTypeIdID!
unitIdID
unitTypeNameString

BookingConnection

FieldTypeDescription
nodes[Booking!]!
pageInfoPageInfo!

PageInfo

FieldTypeDescription
hasNextPageBoolean!
endCursorIDThe last node's id; pass as after for the next page.

Conversation

FieldTypeDescription
idID!
channelString!
statusString!
contactIdID
createdAtString!
messages[Message!]!

Message

FieldTypeDescription
idID!
conversationIdID!
directionString!
bodyString
deliveryStatusStringDelivery lifecycle: queued, sent, delivered, read, failed, draft, discarded. 'draft' means the host's autonomy policy held this app's send for approval.
createdAtString!

UnitTypeRateDay

FieldTypeDescription
dateString!
rateFloat
availableInt!
minStayInt
maxStayInt
closedToArrivalBoolean
closedToDepartureBoolean
stopSellBoolean

Contact

A guest contact, scoped to the installing team.

FieldTypeDescription
idID!
fullNameString
emailString
phoneString
metafields[Metafield!]!This app's own metafields on this record.

FacilityItem

FieldTypeDescription
nameString!
scopeString!property, unit or both.
iconString

BedConfigurationItem

FieldTypeDescription
bedTypeString!Canonical bed type key, e.g. double, single, sofa_bed.
quantityInt!
sleepsInt!Total sleeping capacity for this row.

BookingQuote

Itemized price + validation for a stay. Amounts are decimal strings in the storefront currency.

FieldTypeDescription
currencyString!
nightsInt!
unitsInt!
subtotalString!Accommodation subtotal before fees and taxes.
discountString!
fees[QuoteFee!]!Mandatory fees, one line each.
taxes[QuoteTax!]!Taxes; an included tax is already inside the nightly rate, not added on top.
totalString!Grand total the guest pays (subtotal - discount + fees + added taxes).
perNight[NightRate!]!Per-night nightly rate.
instantBookBoolean!True when this host instant-books; false means bookingCreate files an inquiry.
bookingModeString!The host's raw booking mode, e.g. 'instant' or 'request'.
violations[StayViolation!]!Stay-restriction problems that would block a booking; empty when bookable.

QuoteFee

FieldTypeDescription
labelString!
amountString!
basisStringHow the fee is charged, e.g. per_stay, per_night, per_person, per_person_per_night.

QuoteTax

FieldTypeDescription
nameString!
amountString!
rateFloatPercentage rate when applicable; null for fixed taxes.
includedBoolean!True when already included in the nightly rate (not added on top).

NightRate

FieldTypeDescription
dateString!
rateString!

StayViolation

A stay-restriction violation. code mirrors the platform restriction codes.

FieldTypeDescription
codeString!One of: min_stay, max_stay, closed_to_arrival, closed_to_departure, stop_sell, no_availability, invalid_range.
messageString!
dateStringThe date the violation applies to, if any.

BookingCreatePayload

FieldTypeDescription
outcomeBookingOutcomeWhich path ran. Null when the request failed validation (see userErrors).
bookingBookingRefThe held booking, when outcome is HELD.
inquiryInquiryRefThe inquiry, when outcome is INQUIRY.
paymentUrlStringWhere the guest pays to confirm a held booking. Present only for HELD.
totalsBookingQuoteThe itemized totals the booking/inquiry was priced at.
userErrors[UserError!]!

BookingRef

A created booking, held and awaiting payment.

FieldTypeDescription
idID!
referenceString!Human booking number, e.g. K7MP-Q9RT.
statusString!
paymentStatusString!
checkInString!
checkOutString!
totalString!
currencyString!

InquiryRef

A filed booking request awaiting host review.

FieldTypeDescription
idID!
statusString!
checkInString!
checkOutString!
totalString!
currencyString!

Task

A task instance, scoped to the installing team.

FieldTypeDescription
idID!
typeString!Registry type slug (cleaning, maintenance, ... or an app-defined key).
canonicalStatusTaskStatus!Canonical lifecycle status.
displayLabelStringOptional app-attached label rendered on top of canonical status.
substatusString
titleString!
notesString
priorityString!
propertyIdID
reservationIdIDThe reservation (booking) this task belongs to, if any.
assigneeTypeStringActor class of the assignee: user, app, or external.
assigneeIdID
assigneeNameString
dueAtStringResolved absolute due time (ISO 8601 Zulu).
completedAtString
costStringCost as a decimal string, posted at the cost effective date.
costCurrencyString
costEffectiveDateString
createdAtString!
updatedAtString!
checklist[TaskChecklistItem!]!
customFields[TaskCustomField!]!Namespaced, typed custom fields set by apps on this task.

TaskChecklistItem

FieldTypeDescription
idID!
labelString!
positionInt!
isDoneBoolean!
doneAtString

TaskCustomField

A namespaced, typed custom field on a task. value is stringified; parse per type.

FieldTypeDescription
namespaceString!
keyString!
typeString!string, integer, float, boolean, date, datetime, or json.
valueString

TaskConnection

FieldTypeDescription
nodes[Task!]!
pageInfoPageInfo!

TaskMutationResult

FieldTypeDescription
taskTask
userErrors[UserError!]!

AiModelInfo

A catalog model apps may request in aiGenerate.

FieldTypeDescription
keyString!
isDefaultBoolean!True for the model used when aiGenerate omits model.

AiGeneratePayload

FieldTypeDescription
textStringThe generated text. Null when userErrors is non-empty.
usageAiUsage
userErrors[UserError!]!

AiUsage

FieldTypeDescription
inputTokensInt!
outputTokensInt!
creditsChargedFloat!Exact fractional credits metered for this call.

InboundMessageResult

FieldTypeDescription
conversationIdID
messageIdID
userErrors[UserError!]!

MessageStatusResult

FieldTypeDescription
okBoolean!
userErrors[UserError!]!

App

An installed app instance, scoped to the team that installed it.

FieldTypeDescription
idID!
nameString!
typeString!
teamSlugString!The slug of the team that installed this app.

Input types

ChannelIntegrationCreateInput

FieldTypeDescription
propertyIdID!
externalPropertyIdString!The property/account identifier on the external channel.
settingsStringJSON-encoded provider-specific settings, e.g. {"syncFrequencyMinutes": 15}.

ChannelListingLinkInput

FieldTypeDescription
integrationIdID!
unitTypeIdID!
externalRoomTypeIdString!
externalRatePlanIdString

ReservationInput

FieldTypeDescription
integrationIdID!
externalIdString!The reservation id on the external channel.
revisionIdString!Monotonic revision identifier from the channel; compared lexicographically, stale revisions no-op.
statusReservationStatus!
checkInString!
checkOutString!
currencyString!
paymentCollectPaymentCollect!How the guest paid: collected by the channel (ota) or by the property.
externalPaymentIdString
guestReservationGuestInput!
totalAmountFloat!
rooms[ReservationRoomInput!]!

ReservationGuestInput

FieldTypeDescription
firstNameString!
lastNameString!
emailString
phoneString

ReservationRoomInput

FieldTypeDescription
externalRoomTypeIdString!
externalRatePlanIdString
adultsInt!
childrenInt!
nights[ReservationNightInput!]!Per-night prices set by the channel — the platform never re-prices.

ReservationNightInput

FieldTypeDescription
dateString!
priceFloat!

RatesUpdateInput

FieldTypeDescription
unitTypeIdID!
fromString!ISO date (YYYY-MM-DD), inclusive.
toString!ISO date (YYYY-MM-DD), inclusive. At most 366 days after from.
rateFloatNightly rate override. Explicit null reverts to the base rate.
minStayInt
maxStayInt
closedToArrivalBoolean
closedToDepartureBoolean
stopSellBoolean

BookingQuoteInput

A stay to price: one unit type, a date range, and the party.

FieldTypeDescription
unitTypeIdID!
checkInString!Check-in date, ISO (YYYY-MM-DD).
checkOutString!Check-out date, ISO (YYYY-MM-DD). Must be after checkIn.
adultsInt!Adults in the party (>= 1).
childrenInt!
unitsInt!Number of units of this type to book (>= 1).

BookingGuestInput

FieldTypeDescription
firstNameString!
lastNameString!
emailString!
phoneString

BookingCreateInput

FieldTypeDescription
unitTypeIdID!
checkInString!
checkOutString!
adultsInt!
childrenInt!
unitsInt!
guestBookingGuestInput!
messageStringOptional guest message / special requests, stored on the booking or inquiry.
idempotencyKeyStringOptional idempotency key. Retries with the same key return the original booking.

TaskFilterInput

FieldTypeDescription
propertyIdID
reservationIdIDFilter to a reservation (booking).
typeStringRegistry type slug, e.g. cleaning.
canonicalStatus[TaskStatus!]Limit to these canonical statuses.
assigneeTypeStringActor class of the assignee: user, app, or external.
assigneeIdID
dueFromStringISO date/datetime; due on or after.
dueToStringISO date/datetime; due on or before.
updatedSinceStringISO datetime; tasks updated at/after this instant — use to resync after downtime.

TaskCreateInput

FieldTypeDescription
typeString!Registry type slug, e.g. cleaning.
titleString!
propertyIdID
reservationIdID
dueAtStringISO date/datetime.
priorityString
notesString
assigneeTypeString
assigneeIdID
assigneeNameString

TaskUpdateInput

FieldTypeDescription
idID!
titleString
typeString
priorityString
notesString
dueAtString
propertyIdID
reservationIdID

TaskAssignInput

FieldTypeDescription
idID!
assigneeTypeString!Actor class of the assignee: user, app, or external.
assigneeIdID
assigneeNameString

AiGenerateInput

FieldTypeDescription
systemStringSystem instructions for the completion.
promptStringThe user prompt. Compose any context or history into this string.
modelStringCatalog model key from aiModels. Omit for the platform default.
maxOutputTokensIntRequested output-token ceiling. Values above the platform maximum are clamped.

InboundMessageInput

FieldTypeDescription
channelString!A channel key this app declares in its manifest.
externalThreadIdString!Provider thread id (e.g. PSID). Identifies the conversation.
senderIdentifierString!Provider user id. Identifies the contact.
bodyString
bodyFormatStringtext (default) or another format the channel supports.
attachments[AttachmentInput!]
externalMessageIdStringProvider message id; used for idempotency.
sentAtStringISO-8601 timestamp; defaults to now.
contactHintsContactHintsInput

ContactHintsInput

FieldTypeDescription
firstNameString
lastNameString
displayNameString
emailString
phoneStringE.164 phone, used for contact matching.
avatarUrlString

AttachmentInput

FieldTypeDescription
urlString!
typeString
nameString

MessageStatusInput

FieldTypeDescription
externalMessageIdString!
statusString!delivered | read | failed

Enums

ReservationStatus

ValueDescription
NEW
MODIFIED
CANCELLED

PaymentCollect

ValueDescription
OTA
PROPERTY

BookingOutcome

ValueDescription
HELDA held, unpaid booking was created; pay at paymentUrl to confirm.
INQUIRYA booking request (inquiry) was filed for the host to review.

TaskStatus

Platform-owned canonical task lifecycle. Apps may attach a displayLabel / substatus on top, but this canonical status is what all core logic keys off.

ValueDescription
OPEN
ASSIGNED
IN_PROGRESS
BLOCKED
COMPLETED
CANCELLED
VERIFIED

© Stayblox — Developer Platform