Question marks imply that a field is optional.
Represented as:
{
'approval_id': <str>,
'approver'?: {
'bot'?: <bool>,
'display_name': <str>,
'email': <str>,
'user_id': <str>,
},
'changed'?: <datetime>,
'note': <str>,
# This is the dictionary provided on this page listed
# under "Reservation".
'reservation': <dict>,
# One of: 'approved', 'denied', 'pending'.
'status': <str>,
}
Represented as:
{
# Whether or not all resources are available to the user.
'all_available': <bool>,
# Whether or not all resources are available at the given time.
'all_available_for_times': <bool>,
# List of resource IDs that are available both for the time
# and to the user.
'availability_combined': [<str>],
# List of resource IDs available to the user.
'available': [<str>],
# Detailed information as to whether or not a resource is
# available at a given time.
# If the unit is available, the dictionary will be in a short
# form like:
# {
# 'reservable_id': 'reservable_id',
# 'conflict': False,
# 'available_units': 1,
# }
#
# If the availability for times check is skipped due to not
# being available to the user, another short form is given:
# {
# 'available_units': 0,
# 'conflict': False,
# 'reservable_id': 'reservable_id',
# 'skipped': True,
# }
'available_for_times': <bool>, [{
'available_units': <dec>,
'conflict': <bool> or {
'conflict_details': <none> or [{
'buffer_conflict': <bool, str>, # False if not a buffer conflict
'end': <datetime>,
'reservable': {
'reservable_id': <str>,
'name': <str>,
},
'reservation_id': <str>,
'start': <datetime>,
'status': <str>,
't': <str>, # 'start' or 'end', refers to where the conflict takes place
'user_id': <str>,
}],
'conflict_id': <str>, <int>, [<str>], [<int>], # ID(s) of object causing conflict
'msg': <str>, # Description of conflict
},
'reservable_id': <str>,
}],
'not_availability_combined': [<str>],
# List of resource IDs not available to the user.
'not_available': [<str>],
# List of resource IDs not available at the given times.
'not_available_for_times': [<str>],
# List of all reservables requested and whether or not they
# are able to be reserved by the user.
'reservables_status': [{
'reservable_id': <str>,
'can_reserve': <bool>,
}],
}
Represented as:
{
'active': <bool>,
'description': <str, none>,
'duration_default': <int, none>,
'duration_default_unit': <str>, # years, months, weeks, days, minutes, seconds
'name': <str, none>,
'performed_by': <str, none>,
'portal_id': <str, none>,
'portal_name': <str, none>,
'silent': <bool>,
'reservable_ids': <list[str]>, # List of resources this training is required on
'site_id': <str, none>,
'site_name': <str, none>,
'training_id': <str>,
}
Represented as:
{
'added_by': {
'display_name': <str>,
'email': <str>,
'user_id': <str>,
},
'created': <datetime>,
'earned_on': <str, none>,
'expires': <datetime, none>,
'expired': <bool>,
'name': <str, none>,
'note': <str, none>,
'performed_by': <str, none>,
'portal_id': <str, none>,
'portal_name': <str, none>,
'site_id': <str, none>,
'site_name': <str, none>,
'training_id': <str>,
'user': {
'display_name': <str>,
'email': <str>,
'user_id': <str>,
},
'user_training_record_id': <str>,
}
This is the expected return value format for rate scripts:
{
'meta_data'?: <dict>,
'rate': <dec>,
# One of 'per unit' or 'per reservable'.
'rate_basis': <str>,
'rate_description': <str>,
'rate_int'?: <int>,
'prorate_half_interval_multiplier'?: <dec>,
# One of 'per hour', 'per use', 'per block', 'each', 'per request',
# 'per session', 'per sample', 'per day', 'per week', 'per month'.
'rate_unit': <str>,
'sku?': <str>,
'tax_code'?: <str>,
'tax_note'?: <str>,
'tax_rate'?: <str>,
}
When executing a rate script, the base rate is also accessible in the script iself, under the context variable script["rate"]
. The format of this object is slightly different:
{
'blackouts': {
'blackout_id': <int>,
'weekday': <int>, # Integer from 0-6, representing Monday-Sunday.
'start': <str>, # HH:MM:SS where HH is 24 hour time
'end': <str>, # HH:MM:SS where HH is 24 hour time
'reason': <str>,
},
'currency'?: <str>,
'currency_decimal'?: <str>,
'currency_thousand'?: <str>,
'currency_code'?: <str>,
'invoice_automatically': <bool>,
'meta_data'?: <dict>,
'public': <bool>,
'rate': <dec>,
# One of 'per unit' or 'per reservable'.
'rate_basis': <str>,
'rate_description': <str>,
'rate_duration_maximum': <int|None>, # Seconds
'rate_duration_minimum': <int|None>, # Seconds
'rate_duration_step': <int|None>, # Seconds
'rate_int'?: <int>,
'prorate_half_interval_multiplier'?: <dec>,
# One of 'per hour', 'per use', 'per block', 'each', 'per request',
# 'per session', 'per sample', 'per day', 'per week', 'per month'.
'rate_unit': <str>,
'require_account_number': <bool>,
'site_reservation_script_id': <str|None>,
'sku?': <str>,
'tax_code'?: <str>,
'tax_note'?: <str>,
'tax_rate'?: <str>,
'usergroup_name'?: <str>,
'usergroup_id': <int|None>,
}
Represented as:
{
'accessory_users'?: [ {
'checked_in': <bool>,
'display_name': <str>,
'email': <str>,
'status': <str>,
'user_id': <str>,
} ],
'accessory_users_external'?: [ {
'name': <str>,
'email': <str>,
'status': <str>,
} ],
'accessory_users_need_rsvp': <bool>,
'account_number': <str>,
'account_number_description': <str>,
'admin_note': <str>,
'anyapprovers': <bool>,
'approvals': [ {
'approval_id': <str>,
'approver'?: {
'email': <str>,
'display_name': <str>,
'user_id': <str>,
},
'changed': <datetime>,
'status': <str>,
} ],
'autocancelled': <bool>,
'blocks': [ <str> ],
'buffer_before': <dec>,
'cancelled': <bool>,
'checked_in'?: <bool>,
'checked_in_at'?: <datetime>,
'checked_out_at'?: <datetime>,
'checkin_at'?: <datetime>,
'checkin_before_minutes'?: <dec>,
'checkout_after_minutes'?: <dec>,
'created': <datetime>,
'created_by': {
'email': <str>,
'display_name': <str>,
'user_id': <str>,
},
'current': <bool>,
'denied_by_admin_reason?': <str>,
'duration': <dec>, # seconds
'end': <datetime>,
'expires_at_if_unpaid?': <datetime>,
'external_email?': <str>, # Email captured by a web integration request.
# Form responses are not found on parent reservations,
# but are rather only found in single resource or child
# reservations.
'form_responses'?: [ {
'form': {
'admins_can_skip'?: <bool>,
'form_id': <str>,
'name': <str>,
'portal_id'?: <str>,
# Current schema for form, which may be different
# from the schema at the time of the form response.
'schema': [ {
'adminOnly'?: <bool>,
'customId'?: <str, none>,
'fileUploadOptions'?: {
'extensions'?: [ <str, none> ],
'maxBytes'?: <int, none>,
'minBytes'?: <int, none>,
},
'hint'?: <str>,
'inputType': <str>,
'label'?: <str>,
'max'?: <dec>,
'min'?: <dec>,
'model': <str>,
'publicToUsers'?: <bool>,
'readonly': <bool>,
'required': <bool>,
'requiredValues'?: [ <str> ] <none>,
'selectOptions'? {
'hideNoneSelectedText'?: <bool>,
'noneSelectedText'?: <str>,
},
'shortName'?: <str, none>,
'showIfScript'?: <str, none>,
'showOnCalendar'?: <bool>,
'showOnCalendarSyncTitle'?: <bool>,
'showOnReservationView'?: <bool>,
'showOnEmails'?: <bool>,
'showOnEmailSubject'?: <bool>,
'step'?: <dec>,
'type': <str>,
'values'?: [ <str> ],
} ],
'site_id'?: <str>,
'values': [ {
} ],
},
'form_response_id': <str>,
# Schema at the time of the form response.
'schema': [ {
'adminOnly'?: <bool>,
'customId'?: <str, none>,
'fileUploadOptions'?: {
'extensions'?: [ <str, none> ],
'maxBytes'?: <int, none>,
'minBytes'?: <int, none>,
},
'hint'?: <st
'inputType': <str>,
'label'?: <str>,
'max'?: <dec>,
'min'?: <dec>,
'model': <str>,
'publicToUsers'?: <bool>,
'readonly': <bool>,
'required': <bool>,
'requiredValues'?: <[<str>], none>,
'selectOptions'? {
'hideNoneSelectedText'?: <bool>,
'noneSelectedText'?: <str>,
},
'shortName'?: <str, none>,
'showIfScript'?: <str, none>,
'showOnCalendar'?: <bool>,
'showOnCalendarSyncTitle'?: <bool>,
'showOnReservationView'?: <bool>,
'showOnEmails'?: <bool>,
'showOnEmailSubject'?: <bool>,
'step'?: <dec>,
'type': <str>,
'values'?: [ <str> ],
} ],
'values': {
<str>: <str, dec, [dec], [str], none>,
},
} ],
'invoiced_automatically': <bool>,
'is_loan': <bool>,
'maintenance': <bool>,
'maintenance_nonblocking'?: <bool>, # Only present if maintenance is True
'named_unit'?: {
'named_unit_id': <str>,
'name': <str>,
'properties': { <str>: <str>, ... }
},
'note': <str>,
# Not populated for ical entries.
'original_reservation_created'?: <datetime>,
'overdue'?: <bool>,
'price'?: <dec>
'price_int'?: <int>,
'projects'?: [ {
'active': <bool>,
'created': <datetime>,
'hidden_note': <str>,
'last_modified': <datetime>,
'name': <str>,
'project_id': <str>,
'status': <str>,
'status_details': <str>,
} ],
'prorate_half_interval_multiplier'?: <dec>,
'purpose': <str>,
'rate_description': <str>,
'rate_basis': <str>,
'rate_id'?: <dec>,
'rate_quote_requested': <bool>,
'rate_meta_data': <dict>,
'rate_script'?: <str>,
'rate_site_reservation_script_id'?: <str>,
'rate_unit': <str>,
'recurring_reservation'?: {
'description': <str>,
'end': <datetime>,
'first_reservation_id': <str>,
'maintenance': <bool>,
'maintenance_nonblocking': <bool>,
'original_recurring_reservation_id'?: <str>,
'recipe': {
'cancellations': [ <datetime> ],
'every': <num>,
'on': [ <bool> ], # which week days to recur on
'unit': <str>,
'until': <datetime>,
},
'recurring_reservation_id': <str>,
'replaced_recurring_reservation_id'?: <str>,
'start': <datetime>,
},
'reminder_seconds': <dec>,
'replaced_form_response_id'?: <str>,
'replaced_reservation_id'?: <str>,
# For multi-resource reservations, this field will not exist
# and the resources will all be in 'reservation_children'.
# Additional reservable properties such as tags and custom properties
# are available through API functions.
'reservable'?: {
'active': <bool>,
'anyapprovers': <bool>,
'barcode': <str>,
'bgcolor': <str>,
'buffer_before': <dec>,
'can_return': <bool>,
'category': <str>,
'class'?: <str>,
'currency'?: <str>,
'enable_end_early': <bool>,
'future_loans': <bool>,
'is_addon': <bool>,
'loanable': <bool>,
'name': <str>,
'qreserve_id': <str>,
'rate_name_only': <bool>,
'rate_quotes': <bool>,
'reservable_id': <str>,
'reservable_type': <str>,
'reservation_max_duration'?: <dec>, # seconds
'reservation_minimum'?: <dec>, # seconds
'reservation_unit_limit'?: <dec>,
'returnable': <bool>,
'show_account_number_on_reservations': <bool>,
'show_note_on_reservations': <bool>,
'show_purpose_on_reservations': <bool>,
'units': <dec>,
'units_a_f_t_id'?: <str>,
'units_name': <str>,
},
# If this was a support request for another resource it is included here.
'support_for_reservable'?: {
'active': <bool>,
'anyapprovers': <bool>,
'bgcolor': <str>,
'buffer_before': <dec>,
'can_return': <bool>,
'category': <str>,
'class'?: <str>,
'currency'?: <str>,
'enable_end_early': <bool>,
'future_loans': <bool>,
'is_addon': <bool>,
'loanable': <bool>,
'name': <str>,
'qreserve_id': <str>,
'rate_name_only': <bool>,
'rate_quotes': <bool>,
'reservable_id': <str>,
'reservable_type': <str>,
'reservation_max_duration'?: <dec>, # seconds
'reservation_minimum'?: <dec>, # seconds
'reservation_unit_limit'?: <dec>,
'returnable': <bool>,
'show_account_number_on_reservations': <bool>,
'show_note_on_reservations': <bool>,
'show_purpose_on_reservations': <bool>,
'units': <dec>,
'units_a_f_t_id'?: <str>,
'units_name': <str>,
},
'reservation_children': [ <self> ],
'reservation_id': <str>,
# Parent reservation ID (for children)
'reservation_parent'?: <str>,
'reservation_type': <str>,
'reservation_url': <str>,
# May be missing on ICS reservations.
'reserved_for'?: {
'email': <str>,
'display_name': <str>,
'user_id': <str>,
},
'reserved_for_supervisor'?: {
'email': <str>,
'display_name': <str>,
'user_id': <str>,
},
'reserved_for_text'?: <str>,
'returned'?: <datetime>,
'site_id': <str>,
'site_name': <str>,
'sku'?: <str>,
'soft': <bool>,
'start': <datetime>,
'status': <str>,
'summary': <str>,
'tax_code'?: <str>,
'tax_note'?: <str>,
'tax_rate'?: <dec>,
'total_units'?: <dec>,
'units'?: <dec>,
}
Accessible in reservation scripts as script
, for example script['site_reservation_script_id']
.
Represented as:
{
'attached_to_reservable_ids': [ <str> ],
'site_reservation_script_id': <str>,
}
Accessible in reservation scripts as user_logged_in
, for example user_logged_in['is_moderator']
.
Represented as:
{
'bot': <bool>,
'display_name': <str>,
'email': <str>,
'is_administrator': <bool>,
'is_moderator': <bool>,
'user_id': <str>,
}