Products
Units that can be booked individually
The product object
Attributes
iduuidUnique identifier
ac_idtext | nullIdentifier of the unit on AvailabilityCalendar.com, for imported units
created_atread-onlytimestamp with time zoneCreation timestamp
updated_atread-onlytimestamp with time zoneLast modification timestamp
deleted_attimestamp with time zone | nullTimestamp at which the unit was deleted
approximate_addresstextApproximate address of the unit
approximate_coordinatesCoordinates | nullCoordinates of the approximate address
cancel_after_initial_payment_errorbooleanWhether to cancel bookings when their initial online payment fails, i.e. expires or is rejected
confirm_after_initial_paymentbooleanWhether to confirm bookings automatically after the initial payment. Only applies when interaction is request
confirmation_messageMultiLanguageStringLocalized message shown after submitting a booking
cooldown_timeintegerMinimum number of days between bookings
currencyCurrencyCurrency bookings are made in
depositServiceDeposit | nullDeposit charged for rent
descriptionMultiLanguageStringLocalized description of the unit
exact_addresstextExact address of the unit
exact_coordinatesCoordinates | nullCoordinates of the exact address
feeServiceFeeFee charged for rent
ftsread-onlytsvectorFull text search index
hide_exact_addressbooleanWhether to hide the exact address from guests until their booking is confirmed
ical_export_secrettextSecret used to generate iCal feed URLs
ical_export_secret_no_detailstextSecret used to generate iCal feed URLs without booking details
imagesArray<ProductImage>Images of the unit
interactionBookingMethodHow guests book the unit: request or book
latest_arrival_timetime without time zone | nullLatest time guests can book for the same day
nameMultiLanguageStringLocalized name of the unit
payment_expiration_durationintegerSeconds after which an unpaid online payment expires
price_breakdown_specificityPriceBreakdownSpecificityWhether multiple pricing lines of a single fee are combined into one or shown separately
rent_periodRentPeriodRent period of the unit
rent_pricing_definitionRentPricingDefinitionHow rent is priced: service with rent prices, configurations with a price calendar, or pricelabs with prices from PriceLabs
request_statusCalendarEventStatusStatus of new booking requests: TENTATIVE keeps them pending until they are confirmed, CONFIRMED confirms them right away. Doesn't apply to instant bookings
tentative_interactionBookingMethodHow guests book tentative dates: request or book
timezonetextTimezone of the unit
Related resources
Embed related resources in the response with the select parameter, for example select=*,organizations!organization_id(*). Resources related through more than one column need the column as a hint, like table!column(*).
organizations!organization_id(*)object | nullThe organization referenced by organization_id.
calendar_event_updates!next_product_id(*)arrayThe calendar event updates referencing this product through calendar_event_updates.next_product_id.
calendar_event_updates!prev_product_id(*)arrayThe calendar event updates referencing this product through calendar_event_updates.prev_product_id.
calendar_events!product_id(*)arrayThe calendar events referencing this product through calendar_events.product_id.
coupon_products(*)arrayThe coupon products referencing this product through coupon_products.product_id.
external_calendars!product_id(*)arrayThe external calendars referencing this product through external_calendars.product_id.
permissions(*)arrayThe permissions referencing this product through permissions.product_id.
price_calendar_entries(*)arrayThe price calendar entries referencing this product through price_calendar_entries.product_id.
pricelabs_pricing(*)arrayThe pricelabs pricing referencing this product through pricelabs_pricing.product_id.
pricing_widgets(*)arrayThe pricing widgets referencing this product through pricing_widgets.product_id.
product_attribute_options(*)arrayThe product attribute options referencing this product through product_attribute_options.product_id.
product_calendar_logs(*)arrayThe product calendar logs referencing this product through product_calendar_logs.product_id.
product_message_templates(*)arrayThe product message templates referencing this product through product_message_templates.product_id.
product_reply_to_addresses(*)arrayThe product reply to addresses referencing this product through product_reply_to_addresses.product_id.
product_services(*)arrayThe product services referencing this product through product_services.product_id.
review_products(*)arrayThe review products referencing this product through review_products.product_id.
review_widget_listings(*)arrayThe review widget listings referencing this product through review_widget_listings.product_id.
site_listings(*)arrayThe site listings referencing this product through site_listings.product_id.
task_templates!product_id(*)arrayThe task templates referencing this product through task_templates.product_id.
widget_listings(*)arrayThe widget listings referencing this product through widget_listings.product_id.
{
"id": "00000000-0000-0000-0000-000000000000",
"ac_id": "",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-10-30T22:27:57.051Z",
"updated_at": "2026-10-30T22:27:57.051Z",
"deleted_at": "2026-10-30T22:27:57.051Z",
"approximate_address": "",
"approximate_coordinates": {
"lat": 52.379189,
"lng": 4.899431
},
"cancel_after_initial_payment_error": false,
"confirm_after_initial_payment": false,
"confirmation_message": {},
"cooldown_time": 0,
"currency": "ARS",
"deposit": {
"installments": [
{
"id": "00000000-0000-0000-0000-000000000000",
"moment": {
"offset": 0,
"type": "check-in"
},
"value": {
"restrictions": [],
"type": "absolute",
"value": [
{
"occupancy_group_id": null,
"period": null,
"value": 100
}
]
}
}
],
"price": {
"restrictions": [],
"type": "absolute",
"value": [
{
"occupancy_group_id": null,
"period": null,
"value": 200
}
]
},
"refund_moment": {
"offset": 0,
"type": "checkout"
},
"refund_policy": {
"default": "Full refund",
"nl-NL": "Volledige terugbetaling"
},
"tax_ids": []
},
"description": {},
"exact_address": "",
"exact_coordinates": {
"lat": 52.379189,
"lng": 4.899431
},
"fee": {},
"hide_exact_address": false,
"ical_export_secret": "md5((random())::text)",
"ical_export_secret_no_details": "md5((random())::text)",
"images": [
{
"alt": {
"default": "Image"
},
"size": "1x1",
"src": "https://example.com/image.jpg"
}
],
"interaction": "request",
"latest_arrival_time": null,
"name": {},
"payment_expiration_duration": 0,
"price_breakdown_specificity": "combined",
"rent_period": "nightly",
"rent_pricing_definition": "configurations",
"request_status": "TENTATIVE",
"tentative_interaction": "request",
"timezone": "UTC"
}curl -X GET "https://api.bookingmood.com/v1/products?limit=10&select=*,organizations!organization_id(*),calendar_event_updates!next_product_id(*)" \
-H "Authorization: Bearer YOUR_API_KEY"List products
Filters
idFilter<uuid>Unique identifier
ac_idFilter<text | null>Identifier of the unit on AvailabilityCalendar.com, for imported units
created_atFilter<timestamp with time zone>Creation timestamp
updated_atFilter<timestamp with time zone>Last modification timestamp
deleted_atFilter<timestamp with time zone | null>Timestamp at which the unit was deleted
approximate_addressFilter<text>Approximate address of the unit
approximate_coordinatesFilter<Coordinates | null>Coordinates of the approximate address
cancel_after_initial_payment_errorFilter<boolean>Whether to cancel bookings when their initial online payment fails, i.e. expires or is rejected
confirm_after_initial_paymentFilter<boolean>Whether to confirm bookings automatically after the initial payment. Only applies when interaction is request
confirmation_messageFilter<MultiLanguageString>Localized message shown after submitting a booking
cooldown_timeFilter<integer>Minimum number of days between bookings
currencyFilter<Currency>Currency bookings are made in
depositFilter<ServiceDeposit | null>Deposit charged for rent
descriptionFilter<MultiLanguageString>Localized description of the unit
exact_addressFilter<text>Exact address of the unit
exact_coordinatesFilter<Coordinates | null>Coordinates of the exact address
feeFilter<ServiceFee>Fee charged for rent
ftsFilter<tsvector>Full text search index
hide_exact_addressFilter<boolean>Whether to hide the exact address from guests until their booking is confirmed
ical_export_secretFilter<text>Secret used to generate iCal feed URLs
ical_export_secret_no_detailsFilter<text>Secret used to generate iCal feed URLs without booking details
imagesFilter<Array<ProductImage>>Images of the unit
interactionFilter<BookingMethod>How guests book the unit: request or book
latest_arrival_timeFilter<time without time zone | null>Latest time guests can book for the same day
nameFilter<MultiLanguageString>Localized name of the unit
payment_expiration_durationFilter<integer>Seconds after which an unpaid online payment expires
price_breakdown_specificityFilter<PriceBreakdownSpecificity>Whether multiple pricing lines of a single fee are combined into one or shown separately
rent_periodFilter<RentPeriod>Rent period of the unit
rent_pricing_definitionFilter<RentPricingDefinition>How rent is priced: service with rent prices, configurations with a price calendar, or pricelabs with prices from PriceLabs
request_statusFilter<CalendarEventStatus>Status of new booking requests: TENTATIVE keeps them pending until they are confirmed, CONFIRMED confirms them right away. Doesn't apply to instant bookings
tentative_interactionFilter<BookingMethod>How guests book tentative dates: request or book
timezoneFilter<text>Timezone of the unit
Responses
200A list of products with the selected columns
206Partial Content
400The request is malformed, for example an unknown column or an invalid filter.
401The API key is missing or invalid.
code, message, details and hint. See the introduction for more on errors.GET /productscurl -X GET "https://api.bookingmood.com/v1/products?select=*&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"[
{
"id": "00000000-0000-0000-0000-000000000000",
"ac_id": "",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-10-30T22:27:57.051Z",
"updated_at": "2026-10-30T22:27:57.051Z",
"deleted_at": "2026-10-30T22:27:57.051Z",
"approximate_address": "",
"approximate_coordinates": {
"lat": 52.379189,
"lng": 4.899431
},
"cancel_after_initial_payment_error": false,
"confirm_after_initial_payment": false,
"confirmation_message": {},
"cooldown_time": 0,
"currency": "ARS",
"deposit": {
"installments": [
{
"id": "00000000-0000-0000-0000-000000000000",
"moment": {
"offset": 0,
"type": "check-in"
},
"value": {
"restrictions": [],
"type": "absolute",
"value": [
{
"occupancy_group_id": null,
"period": null,
"value": 100
}
]
}
}
],
"price": {
"restrictions": [],
"type": "absolute",
"value": [
{
"occupancy_group_id": null,
"period": null,
"value": 200
}
]
},
"refund_moment": {
"offset": 0,
"type": "checkout"
},
"refund_policy": {
"default": "Full refund",
"nl-NL": "Volledige terugbetaling"
},
"tax_ids": []
},
"description": {},
"exact_address": "",
"exact_coordinates": {
"lat": 52.379189,
"lng": 4.899431
},
"fee": {},
"hide_exact_address": false,
"ical_export_secret": "md5((random())::text)",
"ical_export_secret_no_details": "md5((random())::text)",
"images": [
{
"alt": {
"default": "Image"
},
"size": "1x1",
"src": "https://example.com/image.jpg"
}
],
"interaction": "request",
"latest_arrival_time": null,
"name": {},
"payment_expiration_duration": 0,
"price_breakdown_specificity": "combined",
"rent_period": "nightly",
"rent_pricing_definition": "configurations",
"request_status": "TENTATIVE",
"tentative_interaction": "request",
"timezone": "UTC"
}
]Update products
Filters
Without filters, this request updates all products you have access to. Always filter on at least one column, e.g. id=eq.{id}.
idFilter<uuid>Unique identifier
ac_idFilter<text | null>Identifier of the unit on AvailabilityCalendar.com, for imported units
created_atFilter<timestamp with time zone>Creation timestamp
updated_atFilter<timestamp with time zone>Last modification timestamp
deleted_atFilter<timestamp with time zone | null>Timestamp at which the unit was deleted
approximate_addressFilter<text>Approximate address of the unit
approximate_coordinatesFilter<Coordinates | null>Coordinates of the approximate address
cancel_after_initial_payment_errorFilter<boolean>Whether to cancel bookings when their initial online payment fails, i.e. expires or is rejected
confirm_after_initial_paymentFilter<boolean>Whether to confirm bookings automatically after the initial payment. Only applies when interaction is request
confirmation_messageFilter<MultiLanguageString>Localized message shown after submitting a booking
cooldown_timeFilter<integer>Minimum number of days between bookings
currencyFilter<Currency>Currency bookings are made in
depositFilter<ServiceDeposit | null>Deposit charged for rent
descriptionFilter<MultiLanguageString>Localized description of the unit
exact_addressFilter<text>Exact address of the unit
exact_coordinatesFilter<Coordinates | null>Coordinates of the exact address
feeFilter<ServiceFee>Fee charged for rent
ftsFilter<tsvector>Full text search index
hide_exact_addressFilter<boolean>Whether to hide the exact address from guests until their booking is confirmed
ical_export_secretFilter<text>Secret used to generate iCal feed URLs
ical_export_secret_no_detailsFilter<text>Secret used to generate iCal feed URLs without booking details
imagesFilter<Array<ProductImage>>Images of the unit
interactionFilter<BookingMethod>How guests book the unit: request or book
latest_arrival_timeFilter<time without time zone | null>Latest time guests can book for the same day
nameFilter<MultiLanguageString>Localized name of the unit
payment_expiration_durationFilter<integer>Seconds after which an unpaid online payment expires
price_breakdown_specificityFilter<PriceBreakdownSpecificity>Whether multiple pricing lines of a single fee are combined into one or shown separately
rent_periodFilter<RentPeriod>Rent period of the unit
rent_pricing_definitionFilter<RentPricingDefinition>How rent is priced: service with rent prices, configurations with a price calendar, or pricelabs with prices from PriceLabs
request_statusFilter<CalendarEventStatus>Status of new booking requests: TENTATIVE keeps them pending until they are confirmed, CONFIRMED confirms them right away. Doesn't apply to instant bookings
tentative_interactionFilter<BookingMethod>How guests book tentative dates: request or book
timezoneFilter<text>Timezone of the unit
Body
Partial<Product>Read-only attributes are set by the database and can't be written.
Responses
200The updated products with the selected columns. Returns 204 without a body when sending the header Prefer: return=minimal.
400The request is malformed, for example an unknown column, an invalid filter or an invalid body.
401The API key is missing or invalid.
403The API key has no permission for this change, for example when writing rows of another organization.
409The change conflicts with existing data, for example a duplicate key or a reference to a row that does not exist.
code, message, details and hint. See the introduction for more on errors.PATCH /productscurl -X PATCH "https://api.bookingmood.com/v1/products?id=eq.00000000-0000-0000-0000-000000000000" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"approximate_address": ""
}'[
{
"id": "00000000-0000-0000-0000-000000000000",
"ac_id": "",
"organization_id": "00000000-0000-0000-0000-000000000000",
"created_at": "2026-10-30T22:27:57.051Z",
"updated_at": "2026-10-30T22:27:57.051Z",
"deleted_at": "2026-10-30T22:27:57.051Z",
"approximate_address": "",
"approximate_coordinates": {
"lat": 52.379189,
"lng": 4.899431
},
"cancel_after_initial_payment_error": false,
"confirm_after_initial_payment": false,
"confirmation_message": {},
"cooldown_time": 0,
"currency": "ARS",
"deposit": {
"installments": [
{
"id": "00000000-0000-0000-0000-000000000000",
"moment": {
"offset": 0,
"type": "check-in"
},
"value": {
"restrictions": [],
"type": "absolute",
"value": [
{
"occupancy_group_id": null,
"period": null,
"value": 100
}
]
}
}
],
"price": {
"restrictions": [],
"type": "absolute",
"value": [
{
"occupancy_group_id": null,
"period": null,
"value": 200
}
]
},
"refund_moment": {
"offset": 0,
"type": "checkout"
},
"refund_policy": {
"default": "Full refund",
"nl-NL": "Volledige terugbetaling"
},
"tax_ids": []
},
"description": {},
"exact_address": "",
"exact_coordinates": {
"lat": 52.379189,
"lng": 4.899431
},
"fee": {},
"hide_exact_address": false,
"ical_export_secret": "md5((random())::text)",
"ical_export_secret_no_details": "md5((random())::text)",
"images": [
{
"alt": {
"default": "Image"
},
"size": "1x1",
"src": "https://example.com/image.jpg"
}
],
"interaction": "request",
"latest_arrival_time": null,
"name": {},
"payment_expiration_duration": 0,
"price_breakdown_specificity": "combined",
"rent_period": "nightly",
"rent_pricing_definition": "configurations",
"request_status": "TENTATIVE",
"tentative_interaction": "request",
"timezone": "UTC"
}
]Create product
Register a new product in your organization. This action will automatically update your subscription.
Body
nameMultiLanguageStringLocalized name of the unit
rent_periodRentPeriodRent period of the unit
timezonetextTimezone of the unit
Responses
201The newly created product
POST /productscurl -X POST "https://api.bookingmood.com/v1/products" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"name": {},
"rent_period": "nightly",
"timezone": "UTC"
}'Delete product
Delete a product from your organization. This will also delete all bookings for this product. Your subscription will be adjusted automatically. This action cannot be undone.
Parameters
idrequireduuidThe identifier of the product to delete
Responses
200The deleted product
DELETE /productscurl -X DELETE "https://api.bookingmood.com/v1/products" \
-H "Authorization: Bearer YOUR_API_KEY"