A percentage discount on nights of a stay, and the hotels and room types it applies to.
A visit type’s promotions lists its current and future promotions that apply
to the channel of your public key.
The API returns only applicable promotions; you do not filter them by channel.
With expand=priceFromPeriods, the detail also includes ended promotions, so
you can explain past price periods.A listed promotion does not guarantee a discounted stay: it can lie outside
the package’s permitted stays, or the discounted rooms can be sold out. Prices explains how promotions change the
indicative minima and how overlapping discounts combine.
Promotion id. Each promotion appears once, even when it is assigned to several channels.
name
Localized display name; a missing translation is null.
percentage
Discount in percent, greater than 0 and at most 100.
from
First discounted night.
to
Last discounted night, inclusive, or null when the promotion has no end.
appliesTo
Hotels and room types the promotion is limited to, or null when it applies to every hotel selling the package.
A night is identified by the date it starts on: to: "2027-02-28" includes
the night of 28 February and its checkout on 1 March. These bounds describe
discounted nights, not the package’s
permitted stays. A stay
that overlaps the promotion only partly is discounted on the overlapping
nights.Each appliesTo entry has hotelId and roomTypeIds. roomTypeIds: null means
every room type of that hotel; otherwise it lists the room type ids it applies to.
Entries reference only hotels that sell the package, and a detail request with
hotelId does not narrow them. roomTypeIds can contain a disabled room
type. It is not offered for new bookings, is missing from the hotel’s room
catalog, and does not count in price periods. Skip ids that you cannot find in
the catalog.Promotions are ordered by from, then id.
This promotion discounts two room types of one hotel by 15% on the nights
from 4 January to 28 February 2027. Other room types and hotels are
unaffected.
Hotels and room types the promotion is limited to. Null when it applies to every hotel selling the package.
Minimum array length: 1
Show child attributes
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"SpaPortal Docs","colors":{"primary":"#3585BA","light":"#99C246","dark":"#141414"},"logo":{"light":"https://mintcdn.com/spabooking/Bibq090v9MI8jPV2/logo/light.svg?fit=max\u0026auto=format\u0026n=Bibq090v9MI8jPV2\u0026q=85\u0026s=c50b2546b29ce5fb747f06c3c0a287e8","dark":"https://mintcdn.com/spabooking/Bibq090v9MI8jPV2/logo/dark.svg?fit=max\u0026auto=format\u0026n=Bibq090v9MI8jPV2\u0026q=85\u0026s=50c74aef7110c454d7a8a682cc9d67ff"},"favicon":"https://mintcdn.com/spabooking/Bibq090v9MI8jPV2/favicon.svg?fit=max\u0026auto=format\u0026n=Bibq090v9MI8jPV2\u0026q=85\u0026s=c33997c3644726a7de4d900b2fdd36be","api":{"playground":{"display":"interactive"}},"navbar":{"links":[{"href":"mailto:info@spabooking.de","label":"Support"}],"primary":{"type":"button","label":"SpaPortal","href":"https://spaportal.cz/"}},"footer":{"socials":{}},"seo":{"metatags":{"canonical":"https://docs.spaportal.cz"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"spabooking","hasAudioNarration":false,"actualSubdomain":"spabooking","customDomains":["docs.spaportal.cz"],"gitSource":{"type":"github","owner":"spabooking","repo":"docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6aeb96afb0fd5b4c7f1f6afa","collectionId":"7f3ffb80-880e-4abf-91a7-701a788f156d","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aeb96afb0fd5b4c7f1f6afa"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aeb96afb0fd5b4c7f1f6afa","clientVersion":"0.0.4076","searchFilterCounts":[{"language":"default","tag":"API reference","count":36},{"language":"default","tag":"SpaPortal API","count":17},{"language":"default","tag":"Objects","count":12},{"language":"default","tag":"Endpoints","count":7},{"language":"default","tag":"Guides","count":6},{"language":"default","tag":"Introduction","count":2},{"language":"default","tag":"Getting started","count":2},{"language":"default","tag":"Hotels","count":2},{"language":"default","tag":"Room types","count":2},{"language":"default","tag":"Visit types","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api/objects/promotion","slug":"/api/objects/promotion","pageMetadata":{"title":"Promotion","description":"A percentage discount on nights of a stay, and the hotels and room types it applies to.","openapi-schema":"api/v2/openapi.yaml Promotion","href":"/api/objects/promotion"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"A percentage discount on nights of a stay, and the hotels and room types it applies to.\"\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsxs(_components.p,{children:[`A visit type’s `,_jsx(_components.code,{children:`promotions`}),` lists its current and future promotions that apply\nto the channel of your `,_jsx(_components.a,{href:`/api/authentication#channels-and-scope`,children:`public key`}),`.\nThe API returns only applicable promotions; you do not filter them by channel.\nWith `,_jsx(_components.code,{children:`expand=priceFromPeriods`}),`, the detail also includes ended promotions, so\nyou can explain past `,_jsx(_components.a,{href:`/api/objects/price-from-period`,children:`price periods`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`A listed promotion does not guarantee a discounted stay: it can lie outside\nthe package’s permitted stays, or the discounted rooms can be sold out. `,_jsx(_components.a,{href:`/api/prices#promotions`,children:`Prices`}),` explains how promotions change the\nindicative minima and how overlapping discounts combine.`]}),`\n`,_jsx(Heading,{level:`2`,id:`fields-and-night-bounds`,children:`Fields and night bounds`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Meaning`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`id`})}),_jsx(_components.td,{children:`Promotion id. Each promotion appears once, even when it is assigned to several channels.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`name`})}),_jsxs(_components.td,{children:[`Localized display name; a missing translation is `,_jsx(_components.code,{children:`null`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`percentage`})}),_jsx(_components.td,{children:`Discount in percent, greater than 0 and at most 100.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`from`})}),_jsx(_components.td,{children:`First discounted night.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`to`})}),_jsxs(_components.td,{children:[`Last discounted night, inclusive, or `,_jsx(_components.code,{children:`null`}),` when the promotion has no end.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`appliesTo`})}),_jsxs(_components.td,{children:[`Hotels and room types the promotion is limited to, or `,_jsx(_components.code,{children:`null`}),` when it applies to every hotel selling the package.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`A night is identified by the date it starts on: `,_jsx(_components.code,{children:`to: \"2027-02-28\"`}),` includes\nthe night of 28 February and its checkout on 1 March. These bounds describe\ndiscounted nights, not the package’s\n`,_jsx(_components.a,{href:`/api/visit-types#testing-a-stay-against-its-rules`,children:`permitted stays`}),`. A stay\nthat overlaps the promotion only partly is discounted on the overlapping\nnights.`]}),`\n`,_jsxs(_components.p,{children:[`Each `,_jsx(_components.code,{children:`appliesTo`}),` entry has `,_jsx(_components.code,{children:`hotelId`}),` and `,_jsx(_components.code,{children:`roomTypeIds`}),`. `,_jsx(_components.code,{children:`roomTypeIds: null`}),` means\nevery room type of that hotel; otherwise it lists the room type ids it applies to.\nEntries reference only hotels that sell the package, and a detail request with\n`,_jsx(_components.code,{children:`hotelId`}),` does not narrow them. `,_jsx(_components.code,{children:`roomTypeIds`}),` can contain a disabled room\ntype. It is not offered for new bookings, is missing from the hotel’s room\ncatalog, and does not count in price periods. Skip ids that you cannot find in\nthe catalog.`]}),`\n`,_jsxs(_components.p,{children:[`Promotions are ordered by `,_jsx(_components.code,{children:`from`}),`, then `,_jsx(_components.code,{children:`id`}),`.`]}),`\n`,_jsx(Heading,{level:`2`,id:`example-selected-room-types-of-one-hotel`,children:`Example: selected room types of one hotel`}),`\n`,_jsx(_components.p,{children:`This promotion discounts two room types of one hotel by 15% on the nights\nfrom 4 January to 28 February 2027. Other room types and hotels are\nunaffected.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`19`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`19`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6720c0a1b2c3d4e5f6a7d302\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"name\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"cs-CZ\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Zimní nabídka vybraných pokojů\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"de\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Winterangebot für ausgewählte Zimmer\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"percentage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`15`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"from\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2027-01-04\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"to\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2027-02-28\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"appliesTo\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"hotelId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6720c0a1b2c3d4e5f6a7c101\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"roomTypeIds\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"6720c0a1b2c3d4e5f6a7f101\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"6720c0a1b2c3d4e5f6a7f102\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` ]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(Heading,{level:`2`,id:`fields`,children:`Fields`})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Promotion","description":"A percentage discount on nights of a stay, and the hotels and room types it applies to.","openapi-schema":"api/v2/openapi.yaml Promotion","href":"/api/objects/promotion"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[{"title":"Fields and night bounds","slug":"fields-and-night-bounds","depth":2,"children":[]},{"title":"Example: selected room types of one hotel","slug":"example-selected-room-types-of-one-hotel","depth":2,"children":[]},{"title":"Fields","slug":"fields","depth":2,"children":[]}],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"schemaData":{"type":"object","required":["id","name","percentage","from","to","appliesTo"],"properties":{"id":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Promotion id. Each promotion appears once, even when it is assigned to several channels.","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"name":{"type":"object","description":"Localized promotion name; a missing translation is null.","example":{"cs-CZ":"Český text","de":"Deutscher Text"},"properties":{"cs-CZ":{"oneOf":[{"type":"string","uniqueKey":"name.cs-CZ.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"name.cs-CZ.oneOf.1","typeLabel":"null"}],"uniqueKey":"name.cs-CZ","typeLabel":"string | null"},"de":{"oneOf":[{"type":"string","uniqueKey":"name.de.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"name.de.oneOf.1","typeLabel":"null"}],"uniqueKey":"name.de","typeLabel":"string | null"},"en":{"oneOf":[{"type":"string","uniqueKey":"name.en.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"name.en.oneOf.1","typeLabel":"null"}],"uniqueKey":"name.en","typeLabel":"string | null"},"ru":{"oneOf":[{"type":"string","uniqueKey":"name.ru.oneOf.0","typeLabel":"string"},{"type":"null","uniqueKey":"name.ru.oneOf.1","typeLabel":"null"}],"uniqueKey":"name.ru","typeLabel":"string | null"}},"additionalProperties":false,"isRequired":true,"uniqueKey":"name","typeLabel":"object"},"percentage":{"type":"number","minimum":0,"exclusiveMinimum":true,"maximum":100,"description":"Discount in percent, greater than 0 and at most 100.","isRequired":true,"uniqueKey":"percentage","typeLabel":"number"},"from":{"type":"string","format":"date","description":"First discounted night, identified by the date it starts on.","isRequired":true,"uniqueKey":"from","typeLabel":"string\u003cdate>"},"to":{"oneOf":[{"type":"string","description":"Last discounted night, inclusive. Null when the promotion has no end.","format":"date","isRequired":true,"uniqueKey":"to.oneOf.0","typeLabel":"string\u003cdate>"},{"type":"null","description":"Last discounted night, inclusive. Null when the promotion has no end.","format":"date","isRequired":true,"uniqueKey":"to.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"to","typeLabel":"string\u003cdate> | null"},"appliesTo":{"oneOf":[{"type":"array","items":{"type":"object","required":["hotelId","roomTypeIds"],"properties":{"hotelId":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","description":"Hotel the promotion applies to. Entries are ordered by `hotelId`.","isRequired":true,"uniqueKey":"appliesTo.oneOf.0.items.[INDEX].hotelId","typeLabel":"string"},"roomTypeIds":{"oneOf":[{"type":"array","items":{"type":"string","pattern":"^[0-9a-fA-F]{24}$","uniqueKey":"appliesTo.oneOf.0.items.[INDEX].roomTypeIds.oneOf.0.items.[INDEX]","typeLabel":"string"},"description":"Room types of the hotel the promotion applies to, ordered by id. Null when it applies to every room type of the hotel.","minItems":1,"isRequired":true,"uniqueKey":"appliesTo.oneOf.0.items.[INDEX].roomTypeIds.oneOf.0","typeLabel":"string[]"},{"type":"null","description":"Room types of the hotel the promotion applies to, ordered by id. Null when it applies to every room type of the hotel.","minItems":1,"isRequired":true,"uniqueKey":"appliesTo.oneOf.0.items.[INDEX].roomTypeIds.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"appliesTo.oneOf.0.items.[INDEX].roomTypeIds","typeLabel":"string[] | null"}},"uniqueKey":"appliesTo.oneOf.0.items.[INDEX]","typeLabel":"object"},"description":"Hotels and room types the promotion is limited to. Null when it applies to every hotel selling the package.","minItems":1,"isRequired":true,"uniqueKey":"appliesTo.oneOf.0","typeLabel":"object[]"},{"type":"null","description":"Hotels and room types the promotion is limited to. Null when it applies to every hotel selling the package.","minItems":1,"isRequired":true,"uniqueKey":"appliesTo.oneOf.1","typeLabel":"null"}],"isRequired":true,"uniqueKey":"appliesTo","typeLabel":"object[] | null"}},"description":"A promotion that applies to your channel. See [Promotion](/api/objects/promotion).","example":{"title":"Example","value":{"id":"6720c0a1b2c3d4e5f6a7d302","name":{"cs-CZ":"Zimní nabídka vybraných pokojů","de":"Winterangebot für ausgewählte Zimmer"},"percentage":15,"from":"2027-01-04","to":"2027-02-28","appliesTo":[{"hotelId":"6720c0a1b2c3d4e5f6a7c101","roomTypeIds":["6720c0a1b2c3d4e5f6a7f101","6720c0a1b2c3d4e5f6a7f102"]}]}},"uniqueKey":"","typeLabel":"object"},"originalFileLocation":"api/v2/openapi.yaml"},"subdomain":"spabooking","siteName":"SpaPortal Docs","title":"Promotion - SpaPortal Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-04T20:34:18.922Z","originalFileLocation":"api/objects/promotion.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"A percentage discount on nights of a stay, and the hotels and room types it applies to.\">\u003cmeta data-mint-head name=\"application-name\" content=\"SpaPortal Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/spabooking/3ILofRrE8iwd8KIp/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/spabooking/3ILofRrE8iwd8KIp/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/spabooking/3ILofRrE8iwd8KIp/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/spabooking/3ILofRrE8iwd8KIp/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/spabooking/3ILofRrE8iwd8KIp/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/spabooking/3ILofRrE8iwd8KIp/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/spabooking/3ILofRrE8iwd8KIp/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/spabooking/3ILofRrE8iwd8KIp/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/spabooking/3ILofRrE8iwd8KIp/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Promotion - SpaPortal Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"A percentage discount on nights of a stay, and the hotels and room types it applies to.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"SpaPortal Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.spaportal.cz/api/objects/promotion\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://spabooking.mintlify.site/_mintlify/api/og/v2?division=Objects\u0026amp;title=Promotion\u0026amp;description=A+percentage+discount+on+nights+of+a+stay%2C+and+the+hotels+and+room+types+it+applies+to.\u0026amp;theme=c449e4c5bfadb6d592bceac4\u0026amp;signature=01c9a55247af8b4c556fa5518a10ae630c9dc50d6eb1535358b76ca05895e87b\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Promotion - SpaPortal Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"A percentage discount on nights of a stay, and the hotels and room types it applies to.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://spabooking.mintlify.site/_mintlify/api/og/v2?division=Objects\u0026amp;title=Promotion\u0026amp;description=A+percentage+discount+on+nights+of+a+stay%2C+and+the+hotels+and+room+types+it+applies+to.\u0026amp;theme=c449e4c5bfadb6d592bceac4\u0026amp;signature=01c9a55247af8b4c556fa5518a10ae630c9dc50d6eb1535358b76ca05895e87b\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/spabooking/3ILofRrE8iwd8KIp/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"SpaPortal Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3585BA\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.spaportal.cz/api/objects/promotion\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api/objects/promotion.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.spaportal.cz/#organization\",\"name\":\"SpaPortal Docs\",\"url\":\"https://docs.spaportal.cz\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/spabooking/Bibq090v9MI8jPV2/logo/light.svg?fit=max\u0026auto=format\u0026n=Bibq090v9MI8jPV2\u0026q=85\u0026s=c50b2546b29ce5fb747f06c3c0a287e8\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.spaportal.cz#website\",\"name\":\"SpaPortal Docs\",\"url\":\"https://docs.spaportal.cz\",\"publisher\":{\"@id\":\"https://docs.spaportal.cz/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.spaportal.cz/api/objects/promotion#webpage\",\"url\":\"https://docs.spaportal.cz/api/objects/promotion\",\"name\":\"Promotion\",\"description\":\"A percentage discount on nights of a stay, and the hotels and room types it applies to.\",\"dateModified\":\"2026-11-04T20:34:18.922Z\",\"isPartOf\":{\"@id\":\"https://docs.spaportal.cz#website\"},\"breadcrumb\":{\"@id\":\"https://docs.spaportal.cz/api/objects/promotion#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.spaportal.cz/api/objects/promotion#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Objects\",\"item\":\"https://docs.spaportal.cz/api/objects/hotel\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Promotion\",\"item\":\"https://docs.spaportal.cz/api/objects/promotion\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.spaportal.cz/api/objects/promotion#apireference\",\"headline\":\"Promotion\",\"name\":\"Promotion\",\"description\":\"A percentage discount on nights of a stay, and the hotels and room types it applies to.\",\"url\":\"https://docs.spaportal.cz/api/objects/promotion\",\"mainEntityOfPage\":{\"@id\":\"https://docs.spaportal.cz/api/objects/promotion#webpage\"},\"dateModified\":\"2026-11-04T20:34:18.922Z\",\"publisher\":{\"@id\":\"https://docs.spaportal.cz/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.spaportal.cz#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"SpaPortal Docs\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"SpaPortal Docs","nav":{"global":null,"tabs":[{"tab":"Introduction","pages":[{"title":"Introduction","href":"/spaportal"}]},{"tab":"Guides","pages":[{"title":"Guides","href":"/guides"}]},{"tab":"API reference","groups":[{"group":"SpaPortal API","pages":[{"title":"Introduction","icon":"microphone","href":"/api"},{"title":"Authentication","icon":"key","href":"/api/authentication"},{"title":"Dates","icon":"calendar-days","href":"/api/dates"},{"title":"Currencies","icon":"coins","href":"/api/currencies"},{"title":"Prices","icon":"tag","href":"/api/prices"},{"title":"Images","icon":"image","href":"/api/images"},{"title":"Localization","icon":"language","href":"/api/localization"},{"title":"Pagination","icon":"list-ol","href":"/api/pagination"},{"title":"Search","icon":"magnifying-glass","href":"/api/search"},{"title":"Sorting","icon":"arrow-up-arrow-down","href":"/api/sorting"},{"title":"Expand","icon":"layer-group","href":"/api/expand"},{"title":"Amenities","icon":"list-check","href":"/api/amenities"},{"title":"Visit types","icon":"suitcase","href":"/api/visit-types"},{"title":"Treatment","icon":"stethoscope","href":"/api/treatment"},{"title":"Status Codes","icon":"input-numeric","href":"/api/status-codes"},{"title":"Errors","icon":"bone-break","href":"/api/errors"},{"title":"Versioning","icon":"code-branch","href":"/api/versioning"},{"title":"API v2 changelog","icon":"clock-rotate-left","hidden":true,"href":"/api/changelog"}]},{"group":"Objects","pages":[{"title":"Hotel","href":"/api/objects/hotel"},{"title":"Room type","href":"/api/objects/room-type"},{"title":"Visit type","href":"/api/objects/visit-type"},{"title":"Treatment","href":"/api/objects/treatment"},{"title":"Procedure","href":"/api/objects/procedure"},{"title":"Price from","href":"/api/objects/price-from"},{"title":"Price period","description":"A range of nights with the same package prices: prices per guest and per room, and the promotions that apply.","href":"/api/objects/price-from-period"},{"title":"Promotion","href":"/api/objects/promotion"},{"title":"Amenity category","description":"A category in the amenity dictionary.","href":"/api/objects/amenity-category"},{"title":"Amenity","href":"/api/objects/amenity"},{"title":"Amenity value","href":"/api/objects/amenity-value"},{"title":"Localized string","href":"/api/objects/localized-string"}]},{"group":"Endpoints","pages":[{"group":"Amenity categories","pages":[{"title":"List the amenity dictionary","deprecated":null,"version":null,"openapi":"/api/v2/openapi.yaml get /amenity-categories","href":"/api/v2/reference/amenity-categories/list-the-amenity-dictionary"}]},{"group":"Hotels","pages":[{"title":"List hotels","deprecated":null,"version":null,"openapi":"/api/v2/openapi.yaml get /hotels","href":"/api/v2/reference/hotels/list-hotels"},{"title":"Get a hotel","deprecated":null,"version":null,"openapi":"/api/v2/openapi.yaml get /hotels/{hotelId}","href":"/api/v2/reference/hotels/get-a-hotel"}]},{"group":"Room types","pages":[{"title":"List room types","deprecated":null,"version":null,"openapi":"/api/v2/openapi.yaml get /room-types","href":"/api/v2/reference/room-types/list-room-types"},{"title":"Get a room type","deprecated":null,"version":null,"openapi":"/api/v2/openapi.yaml get /room-types/{roomTypeId}","href":"/api/v2/reference/room-types/get-a-room-type"}]},{"group":"Visit types","pages":[{"title":"List visit types","deprecated":null,"version":null,"openapi":"/api/v2/openapi.yaml get /visit-types","href":"/api/v2/reference/visit-types/list-visit-types"},{"title":"Get a visit type","deprecated":null,"version":null,"openapi":"/api/v2/openapi.yaml get /visit-types/{visitTypeId}","href":"/api/v2/reference/visit-types/get-a-visit-type"}]}]}]},{"tab":"API v1","hidden":true,"pages":[{"title":"API v1","href":"/api/v1"}]}]},"basePath":"","title":"Promotion - SpaPortal Docs","buildId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","deploymentId":"dpl_8LJbrAiZvr1K98WQNZXCyY5AvT34","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-i2a3QZ8E.js","utils-ChLwp8m0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DRktVTDc.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-CA2pEs4T.js","snippetPresets-ClQ6XrKD.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-Ct_Lv36y.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-Cn2PYw9e.js","shallow-rkyymjXQ.js","getApiPlaygroundDisplay-BB9vkXtE.js","CodeSnippet-Bm5RU7m1.js","CodeSnippets-BgU9Deuz.js","Page-BUDYNlhG.js","getPastedJson-BD-6NNum.js","icon-8Z6tud2e.js","MethodPill-Tuzr4g3V.js","DuplicateIcon-0ceWFYhN.js","createIcon-FBXow_ST.js","DynamicMarkdown-CD8713Yy.js","SectionHeading-7zgzQbH-.js","axios-vUo_bRtp.js","Markdown-D7Ofw1oz.js","clsx-eKJ4rcii.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CwjSCXIK.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-9EK5IAXV.js"]}