Preskoči na sadržaj

Services

Reusable elements that can be included in the booking forms of units

The service object

Attributes

iduuid

Unique identifier

organization_iduuid
organizations.id

Identifier of the organization this service is defined in

parent_iduuid | null
services.id

Identifier of the parent service. Only applies to services of type multiple-choice-option

created_atread-onlytimestamp with time zone

Creation timestamp

updated_atread-onlytimestamp with time zone

Last modification timestamp

attachmenttext | null

URL of a file attached to the service

depositServiceDeposit | null

Deposit charged for the service

descriptionMultiLanguageString

Localized description of the service

feeServiceFee | null

Fee charged for the service

ftsread-onlytsvector

Full text search index

labelMultiLanguageString

Localized label of the service

metaPartial<ServiceMeta>

Metadata of the service

ordersmallint

Order of the option within its parent service. Only applies to services of type multiple-choice-option

typeServiceType

Type of the service

Related resources

Embed related resources in the response with the select parameter, for example select=*,organizations(*). Resources related through more than one column need the column as a hint, like table!column(*).

organizations(*)object | null
organizations

The organization referenced by organization_id.

booking_details!option_id(*)array
booking_details

The booking details referencing this service through booking_details.option_id.

booking_details!service_id(*)array
booking_details

The booking details referencing this service through booking_details.service_id.

coupon_services(*)array
coupon_services

The coupon services referencing this service through coupon_services.service_id.

line_items(*)array
line_items

The line items referencing this service through line_items.service_id.

product_services(*)array
product_services

The product services referencing this service through product_services.service_id.

The service object
JSON
{
  "id": "00000000-0000-0000-0000-000000000000",
  "organization_id": "00000000-0000-0000-0000-000000000000",
  "parent_id": "00000000-0000-0000-0000-000000000000",
  "created_at": "2026-10-30T23:21:07.688Z",
  "updated_at": "2026-10-30T23:21:07.688Z",
  "attachment": "",
  "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": {},
  "fee": {
    "discounts": [
      {
        "definition": {
          "restrictions": [],
          "type": "relative",
          "value": -10
        },
        "id": "00000000-0000-0000-0000-000000000000",
        "name": {
          "default": "Seasonal Discount"
        }
      }
    ],
    "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": 50
            }
          ]
        }
      }
    ],
    "price": {
      "restrictions": [],
      "type": "absolute",
      "value": [
        {
          "occupancy_group_id": null,
          "period": null,
          "value": 150
        }
      ]
    },
    "tax_ids": []
  },
  "label": {},
  "meta": {},
  "order": 0,
  "type": "address"
}
Including related resources
curl -X GET "https://api.bookingmood.com/v1/services?limit=10&select=*,organizations(*),booking_details!option_id(*)" \
  -H "Authorization: Bearer YOUR_API_KEY"

List services

Filters

idFilter<uuid>

Unique identifier

organization_idFilter<uuid>
organizations.id

Identifier of the organization this service is defined in

parent_idFilter<uuid | null>
services.id

Identifier of the parent service. Only applies to services of type multiple-choice-option

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

attachmentFilter<text | null>

URL of a file attached to the service

depositFilter<ServiceDeposit | null>

Deposit charged for the service

descriptionFilter<MultiLanguageString>

Localized description of the service

feeFilter<ServiceFee | null>

Fee charged for the service

ftsFilter<tsvector>

Full text search index

labelFilter<MultiLanguageString>

Localized label of the service

metaFilter<Partial<ServiceMeta>>

Metadata of the service

orderFilter<smallint>

Order of the option within its parent service. Only applies to services of type multiple-choice-option

typeFilter<ServiceType>

Type of the service

Responses

200

A list of services 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 /services
curl -X GET "https://api.bookingmood.com/v1/services?select=*&limit=10" \
  -H "Authorization: Bearer YOUR_API_KEY"
Example response
JSON
[
  {
    "id": "00000000-0000-0000-0000-000000000000",
    "organization_id": "00000000-0000-0000-0000-000000000000",
    "parent_id": "00000000-0000-0000-0000-000000000000",
    "created_at": "2026-10-30T23:21:07.688Z",
    "updated_at": "2026-10-30T23:21:07.688Z",
    "attachment": "",
    "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": {},
    "fee": {
      "discounts": [
        {
          "definition": {
            "restrictions": [],
            "type": "relative",
            "value": -10
          },
          "id": "00000000-0000-0000-0000-000000000000",
          "name": {
            "default": "Seasonal Discount"
          }
        }
      ],
      "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": 50
              }
            ]
          }
        }
      ],
      "price": {
        "restrictions": [],
        "type": "absolute",
        "value": [
          {
            "occupancy_group_id": null,
            "period": null,
            "value": 150
          }
        ]
      },
      "tax_ids": []
    },
    "label": {},
    "meta": {},
    "order": 0,
    "type": "address"
  }
]

Create services

Body

Partial<Service> | Array<Partial<Service>>

Read-only attributes are set by the database and can't be written.

Responses

201

The newly created services with the selected columns

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.
POST /services
curl -X POST "https://api.bookingmood.com/v1/services" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "description": {},
    "label": {},
    "meta": {},
    "order": 0,
    "organization_id": "00000000-0000-0000-0000-000000000000",
    "type": "address"
  }'
Example response
JSON
[
  {
    "id": "00000000-0000-0000-0000-000000000000",
    "organization_id": "00000000-0000-0000-0000-000000000000",
    "parent_id": "00000000-0000-0000-0000-000000000000",
    "created_at": "2026-10-30T23:21:07.688Z",
    "updated_at": "2026-10-30T23:21:07.688Z",
    "attachment": "",
    "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": {},
    "fee": {
      "discounts": [
        {
          "definition": {
            "restrictions": [],
            "type": "relative",
            "value": -10
          },
          "id": "00000000-0000-0000-0000-000000000000",
          "name": {
            "default": "Seasonal Discount"
          }
        }
      ],
      "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": 50
              }
            ]
          }
        }
      ],
      "price": {
        "restrictions": [],
        "type": "absolute",
        "value": [
          {
            "occupancy_group_id": null,
            "period": null,
            "value": 150
          }
        ]
      },
      "tax_ids": []
    },
    "label": {},
    "meta": {},
    "order": 0,
    "type": "address"
  }
]

Delete services

Filters

Without filters, this request deletes all services you have access to. Always filter on at least one column, e.g. id=eq.{id}.

idFilter<uuid>

Unique identifier

organization_idFilter<uuid>
organizations.id

Identifier of the organization this service is defined in

parent_idFilter<uuid | null>
services.id

Identifier of the parent service. Only applies to services of type multiple-choice-option

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

attachmentFilter<text | null>

URL of a file attached to the service

depositFilter<ServiceDeposit | null>

Deposit charged for the service

descriptionFilter<MultiLanguageString>

Localized description of the service

feeFilter<ServiceFee | null>

Fee charged for the service

ftsFilter<tsvector>

Full text search index

labelFilter<MultiLanguageString>

Localized label of the service

metaFilter<Partial<ServiceMeta>>

Metadata of the service

orderFilter<smallint>

Order of the option within its parent service. Only applies to services of type multiple-choice-option

typeFilter<ServiceType>

Type of the service

Responses

200

The deleted services 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 or an invalid filter.

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.

Error responses have a JSON body with a code, message, details and hint. See the introduction for more on errors.
DELETE /services
curl -X DELETE "https://api.bookingmood.com/v1/services?id=eq.00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer YOUR_API_KEY"
Example response
JSON
[
  {
    "id": "00000000-0000-0000-0000-000000000000",
    "organization_id": "00000000-0000-0000-0000-000000000000",
    "parent_id": "00000000-0000-0000-0000-000000000000",
    "created_at": "2026-10-30T23:21:07.688Z",
    "updated_at": "2026-10-30T23:21:07.688Z",
    "attachment": "",
    "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": {},
    "fee": {
      "discounts": [
        {
          "definition": {
            "restrictions": [],
            "type": "relative",
            "value": -10
          },
          "id": "00000000-0000-0000-0000-000000000000",
          "name": {
            "default": "Seasonal Discount"
          }
        }
      ],
      "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": 50
              }
            ]
          }
        }
      ],
      "price": {
        "restrictions": [],
        "type": "absolute",
        "value": [
          {
            "occupancy_group_id": null,
            "period": null,
            "value": 150
          }
        ]
      },
      "tax_ids": []
    },
    "label": {},
    "meta": {},
    "order": 0,
    "type": "address"
  }
]

Update services

Filters

Without filters, this request updates all services you have access to. Always filter on at least one column, e.g. id=eq.{id}.

idFilter<uuid>

Unique identifier

organization_idFilter<uuid>
organizations.id

Identifier of the organization this service is defined in

parent_idFilter<uuid | null>
services.id

Identifier of the parent service. Only applies to services of type multiple-choice-option

created_atFilter<timestamp with time zone>

Creation timestamp

updated_atFilter<timestamp with time zone>

Last modification timestamp

attachmentFilter<text | null>

URL of a file attached to the service

depositFilter<ServiceDeposit | null>

Deposit charged for the service

descriptionFilter<MultiLanguageString>

Localized description of the service

feeFilter<ServiceFee | null>

Fee charged for the service

ftsFilter<tsvector>

Full text search index

labelFilter<MultiLanguageString>

Localized label of the service

metaFilter<Partial<ServiceMeta>>

Metadata of the service

orderFilter<smallint>

Order of the option within its parent service. Only applies to services of type multiple-choice-option

typeFilter<ServiceType>

Type of the service

Body

Partial<Service>

Read-only attributes are set by the database and can't be written.

Responses

200

The updated services 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 /services
curl -X PATCH "https://api.bookingmood.com/v1/services?id=eq.00000000-0000-0000-0000-000000000000" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "description": {}
  }'
Example response
JSON
[
  {
    "id": "00000000-0000-0000-0000-000000000000",
    "organization_id": "00000000-0000-0000-0000-000000000000",
    "parent_id": "00000000-0000-0000-0000-000000000000",
    "created_at": "2026-10-30T23:21:07.688Z",
    "updated_at": "2026-10-30T23:21:07.688Z",
    "attachment": "",
    "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": {},
    "fee": {
      "discounts": [
        {
          "definition": {
            "restrictions": [],
            "type": "relative",
            "value": -10
          },
          "id": "00000000-0000-0000-0000-000000000000",
          "name": {
            "default": "Seasonal Discount"
          }
        }
      ],
      "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": 50
              }
            ]
          }
        }
      ],
      "price": {
        "restrictions": [],
        "type": "absolute",
        "value": [
          {
            "occupancy_group_id": null,
            "period": null,
            "value": 150
          }
        ]
      },
      "tax_ids": []
    },
    "label": {},
    "meta": {},
    "order": 0,
    "type": "address"
  }
]

Preuzmite kontrolu nad svojim rezervacijama. Izgradite posao koji posjedujete.

Pridružite se 1200+ neovisnim tvrtkama za iznajmljivanje smještaja koristeći Bookingmood kako biste povećali broj izravnih rezervacija i izgradili jače odnose s gostima.

Započnite besplatno 14-dnevno probno razdoblje