Services
Reusable elements that can be included in the booking forms of units
The service object
Attributes
iduuidUnique identifier
parent_iduuid | nullIdentifier of the parent service. Only applies to services of type multiple-choice-option
created_atread-onlytimestamp with time zoneCreation timestamp
updated_atread-onlytimestamp with time zoneLast modification timestamp
attachmenttext | nullURL of a file attached to the service
depositServiceDeposit | nullDeposit charged for the service
descriptionMultiLanguageStringLocalized description of the service
feeServiceFee | nullFee charged for the service
ftsread-onlytsvectorFull text search index
labelMultiLanguageStringLocalized label of the service
metaPartial<ServiceMeta>Metadata of the service
ordersmallintOrder of the option within its parent service. Only applies to services of type multiple-choice-option
typeServiceTypeType 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(*).
booking_details!option_id(*)arrayThe booking details referencing this service through booking_details.option_id.
booking_details!service_id(*)arrayThe booking details referencing this service through booking_details.service_id.
coupon_services(*)arrayThe coupon services referencing this service through coupon_services.service_id.
product_services(*)arrayThe product services referencing this service through product_services.service_id.
{
"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:27:25.472Z",
"updated_at": "2026-10-30T23:27:25.472Z",
"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"
}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>Identifier of the organization this service is defined in
parent_idFilter<uuid | null>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
200A list of services 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 /servicescurl -X GET "https://api.bookingmood.com/v1/services?select=*&limit=10" \
-H "Authorization: Bearer YOUR_API_KEY"[
{
"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:27:25.472Z",
"updated_at": "2026-10-30T23:27:25.472Z",
"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
201The newly created services with the selected columns
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.POST /servicescurl -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"
}'[
{
"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:27:25.472Z",
"updated_at": "2026-10-30T23:27:25.472Z",
"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>Identifier of the organization this service is defined in
parent_idFilter<uuid | null>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
200The deleted services 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 or an invalid filter.
401The API key is missing or invalid.
403The API key has no permission for this change, for example when writing rows of another organization.
code, message, details and hint. See the introduction for more on errors.DELETE /servicescurl -X DELETE "https://api.bookingmood.com/v1/services?id=eq.00000000-0000-0000-0000-000000000000" \
-H "Authorization: Bearer YOUR_API_KEY"[
{
"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:27:25.472Z",
"updated_at": "2026-10-30T23:27:25.472Z",
"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>Identifier of the organization this service is defined in
parent_idFilter<uuid | null>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
200The updated services 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 /servicescurl -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": {}
}'[
{
"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:27:25.472Z",
"updated_at": "2026-10-30T23:27:25.472Z",
"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"
}
]