Hoppa till innehåll

Products

Units that can be booked individually

The product object

Attributes

iduuid

Unique identifier

ac_idtext | null

Identifier of the unit on AvailabilityCalendar.com, for imported units

organization_iduuid
organizations.id

Identifier of the organization this unit is defined in

created_atread-onlytimestamp with time zone

Creation timestamp

updated_atread-onlytimestamp with time zone

Last modification timestamp

deleted_attimestamp with time zone | null

Timestamp at which the unit was deleted

approximate_addresstext

Approximate address of the unit

approximate_coordinatesCoordinates | null

Coordinates of the approximate address

cancel_after_initial_payment_errorboolean

Whether to cancel bookings when their initial online payment fails, i.e. expires or is rejected

confirm_after_initial_paymentboolean

Whether to confirm bookings automatically after the initial payment. Only applies when interaction is request

confirmation_messageMultiLanguageString

Localized message shown after submitting a booking

cooldown_timeinteger

Minimum number of days between bookings

currencyCurrency

Currency bookings are made in

depositServiceDeposit | null

Deposit charged for rent

descriptionMultiLanguageString

Localized description of the unit

exact_addresstext

Exact address of the unit

exact_coordinatesCoordinates | null

Coordinates of the exact address

feeServiceFee

Fee charged for rent

ftsread-onlytsvector

Full text search index

hide_exact_addressboolean

Whether to hide the exact address from guests until their booking is confirmed

ical_export_secrettext

Secret used to generate iCal feed URLs

ical_export_secret_no_detailstext

Secret used to generate iCal feed URLs without booking details

imagesArray<ProductImage>

Images of the unit

interactionBookingMethod

How guests book the unit: request or book

latest_arrival_timetime without time zone | null

Latest time guests can book for the same day

nameMultiLanguageString

Localized name of the unit

payment_expiration_durationinteger

Seconds after which an unpaid online payment expires

price_breakdown_specificityPriceBreakdownSpecificity

Whether multiple pricing lines of a single fee are combined into one or shown separately

rent_periodRentPeriod

Rent period of the unit

rent_pricing_definitionRentPricingDefinition

How rent is priced: service with rent prices, configurations with a price calendar, or pricelabs with prices from PriceLabs

request_statusCalendarEventStatus

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_interactionBookingMethod

How guests book tentative dates: request or book

timezonetext

Timezone 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 | null
organizations

The organization referenced by organization_id.

calendar_event_updates!next_product_id(*)array
calendar_event_updates

The calendar event updates referencing this product through calendar_event_updates.next_product_id.

calendar_event_updates!prev_product_id(*)array
calendar_event_updates

The calendar event updates referencing this product through calendar_event_updates.prev_product_id.

calendar_events!product_id(*)array
calendar_events

The calendar events referencing this product through calendar_events.product_id.

capacities(*)array
capacities

The capacities referencing this product through capacities.product_id.

coupon_products(*)array
coupon_products

The coupon products referencing this product through coupon_products.product_id.

external_calendars!product_id(*)array
external_calendars

The external calendars referencing this product through external_calendars.product_id.

permissions(*)array
permissions

The permissions referencing this product through permissions.product_id.

price_calendar_entries(*)array
price_calendar_entries

The price calendar entries referencing this product through price_calendar_entries.product_id.

pricelabs_pricing(*)array
pricelabs_pricing

The pricelabs pricing referencing this product through pricelabs_pricing.product_id.

pricing_widgets(*)array
pricing_widgets

The pricing widgets referencing this product through pricing_widgets.product_id.

product_attribute_options(*)array
product_attribute_options

The product attribute options referencing this product through product_attribute_options.product_id.

product_calendar_logs(*)array
product_calendar_logs

The product calendar logs referencing this product through product_calendar_logs.product_id.

product_message_templates(*)array
product_message_templates

The product message templates referencing this product through product_message_templates.product_id.

product_reply_to_addresses(*)array
product_reply_to_addresses

The product reply to addresses referencing this product through product_reply_to_addresses.product_id.

product_services(*)array
product_services

The product services referencing this product through product_services.product_id.

review_products(*)array
review_products

The review products referencing this product through review_products.product_id.

review_widget_listings(*)array
review_widget_listings

The review widget listings referencing this product through review_widget_listings.product_id.

site_listings(*)array
site_listings

The site listings referencing this product through site_listings.product_id.

task_templates!product_id(*)array
task_templates

The task templates referencing this product through task_templates.product_id.

widget_listings(*)array
widget_listings

The widget listings referencing this product through widget_listings.product_id.

The product object
JSON
{
  "id": "00000000-0000-0000-0000-000000000000",
  "ac_id": "",
  "organization_id": "00000000-0000-0000-0000-000000000000",
  "created_at": "2026-10-30T23:21:07.688Z",
  "updated_at": "2026-10-30T23:21:07.688Z",
  "deleted_at": "2026-10-30T23:21:07.688Z",
  "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"
}
Including related resources
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

organization_idFilter<uuid>
organizations.id

Identifier of the organization this unit is defined in

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

200

A list of products with the selected columns

206

Partial Content

400

The request is malformed, for example an unknown column or an invalid filter.

401

The API key is missing or invalid.

Error responses have a JSON body with a code, message, details and hint. See the introduction for more on errors.
GET /products
curl -X GET "https://api.bookingmood.com/v1/products?select=*&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"
Example response
JSON
[
  {
    "id": "00000000-0000-0000-0000-000000000000",
    "ac_id": "",
    "organization_id": "00000000-0000-0000-0000-000000000000",
    "created_at": "2026-10-30T23:21:07.688Z",
    "updated_at": "2026-10-30T23:21:07.688Z",
    "deleted_at": "2026-10-30T23:21:07.688Z",
    "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

organization_idFilter<uuid>
organizations.id

Identifier of the organization this unit is defined in

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

200

The updated products with the selected columns. Returns 204 without a body when sending the header Prefer: return=minimal.

400

The request is malformed, for example an unknown column, an invalid filter or an invalid body.

401

The API key is missing or invalid.

403

The API key has no permission for this change, for example when writing rows of another organization.

409

The change conflicts with existing data, for example a duplicate key or a reference to a row that does not exist.

Error responses have a JSON body with a code, message, details and hint. See the introduction for more on errors.
PATCH /products
curl -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": ""
  }'
Example response
JSON
[
  {
    "id": "00000000-0000-0000-0000-000000000000",
    "ac_id": "",
    "organization_id": "00000000-0000-0000-0000-000000000000",
    "created_at": "2026-10-30T23:21:07.688Z",
    "updated_at": "2026-10-30T23:21:07.688Z",
    "deleted_at": "2026-10-30T23:21:07.688Z",
    "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

nameMultiLanguageString

Localized name of the unit

rent_periodRentPeriod

Rent period of the unit

timezonetext

Timezone of the unit

Responses

201

The newly created product

POST /products
curl -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

idrequireduuid

The identifier of the product to delete

Responses

200

The deleted product

DELETE /products
curl -X DELETE "https://api.bookingmood.com/v1/products" \
  -H "Authorization: Bearer YOUR_API_KEY"

Ta kontroll över dina bokningar. Bygg upp ett eget företag.

Gör som 1200+ oberoende semesterbostadsföretag som använder Bookingmood för att öka antalet direktbokningar och bygga starkare relationer med gästerna.

Starta gratis 14 dags provperiod