[{"data":1,"prerenderedAt":174},["ShallowReactive",2],{"cds-site:languages":3,"cds-site:style":5,"cds-site:globals":48,"cds-site:menu":54,"page-en-/guide/getting-started":152},[4],"en",{"id":6,"name":7,"template":8,"logo":9,"logoMark":10,"favicon":11,"values":12,"cssProperties":14},"style_docs","Documentation","@checkin247/template-docs","hotelplatform-logo","hotelplatform-mark","favicon",{"icon_background":13},"#0B1B33",{"--color-ink":13,"--color-deep":15,"--color-signal":16,"--color-signal-deep":17,"--color-signal-light":18,"--color-canvas":19,"--color-error":20,"--color-brand-50":19,"--color-brand-100":21,"--color-brand-200":22,"--color-brand-300":23,"--color-brand-400":24,"--color-brand-500":25,"--color-brand-600":26,"--color-brand-700":15,"--color-brand-800":27,"--color-brand-900":13,"--color-brand-950":28,"--color-neutral-50":29,"--color-neutral-100":30,"--color-neutral-200":31,"--color-neutral-300":32,"--color-neutral-400":33,"--color-neutral-500":34,"--color-neutral-600":35,"--color-neutral-700":36,"--color-neutral-800":37,"--color-neutral-900":38,"--color-neutral-950":13,"--color-primary":25,"--color-primary-hover":15,"--color-surface":39,"--color-background-default":19,"--color-background-dark":13,"--color-text-strong":38,"--color-text-dark":38,"--color-text-body":36,"--color-text-default":36,"--color-text-muted":40,"--color-text-on-dark":41,"--color-border":31,"--color-border-default":31,"--font-heading":42,"--font-body":43,"--font-mono":44,"--radius-control":45,"--radius-card":46,"--radius":45,"--container-content":47},"#14306E","#4FC3B0","#136558","#8FE0D2","#F6F9FC","#B4442F","#EAF0F9","#CBD9F0","#A3BCE4","#6389C8","#2A56A8","#204487","#0F2452","#071223","#F8FAFC","#F1F5FA","#E3E9F2","#CFD8E6","#A6B3C6","#8494AB","#6C7C93","#5A6A80","#3B4A61","#12233F","#FFFFFF","#5D6C82","#D5E1F2","\"Outfit\", ui-sans-serif, system-ui, sans-serif","\"IBM Plex Sans\", ui-sans-serif, system-ui, sans-serif","\"IBM Plex Mono\", ui-monospace, monospace","10px","16px","780px",{"id":49,"siteName":50,"copyright":51,"footerText":52,"defaultLanguage":4,"vimeo":53,"linkedin":53,"youtube":53,"github":53,"logo":53,"logoMark":53,"favicon":53,"ogImage":53},"site","HotelPlatform.io Documentation","© 2026 key-card / HotelPlatform","API documentation of the HotelPlatform.",null,[55,64,70,77,83,90,96,103,110,117,124,131,138,145],{"id":56,"label":57,"description":53,"icon":53,"trailing_icon":53,"href":58,"sort":59,"status":60,"parent_item":53,"target":53,"isCanonical":53,"translations":61,"to":53,"menu":62},"m_main_api","API Documentation","/api-reference",1,"published",[],{"position":63},"main",{"id":65,"label":66,"description":53,"icon":53,"trailing_icon":53,"href":67,"sort":59,"status":60,"parent_item":56,"target":53,"isCanonical":53,"translations":68,"to":53,"menu":69},"m_main_api_AccessControl","AccessControl","/api-reference/AccessControl/latest",[],{"position":63},{"id":71,"label":72,"description":53,"icon":53,"trailing_icon":53,"href":73,"sort":74,"status":60,"parent_item":56,"target":53,"isCanonical":53,"translations":75,"to":53,"menu":76},"m_main_api_Configuration","Configuration","/api-reference/Configuration/latest",2,[],{"position":63},{"id":78,"label":79,"description":53,"icon":53,"trailing_icon":53,"href":80,"sort":74,"status":60,"parent_item":53,"target":53,"isCanonical":53,"translations":81,"to":53,"menu":82},"m_main_guide","Guide","/guide",[],{"position":63},{"id":84,"label":85,"description":53,"icon":53,"trailing_icon":53,"href":86,"sort":87,"status":60,"parent_item":56,"target":53,"isCanonical":53,"translations":88,"to":53,"menu":89},"m_main_api_HotelApi","HotelApi","/api-reference/HotelApi/latest",3,[],{"position":63},{"id":91,"label":92,"description":53,"icon":53,"trailing_icon":53,"href":93,"sort":87,"status":60,"parent_item":53,"target":53,"isCanonical":53,"translations":94,"to":53,"menu":95},"m_main_about","About","/about",[],{"position":63},{"id":97,"label":98,"description":53,"icon":53,"trailing_icon":53,"href":80,"sort":99,"status":60,"parent_item":53,"target":53,"isCanonical":53,"translations":100,"to":53,"menu":101},"m_sb_overview","Overview",4,[],{"position":102},"sidebar",{"id":104,"label":105,"description":53,"icon":53,"trailing_icon":53,"href":106,"sort":107,"status":60,"parent_item":53,"target":53,"isCanonical":53,"translations":108,"to":53,"menu":109},"m_sb_introduction","Introduction","/guide/introduction",5,[],{"position":102},{"id":111,"label":112,"description":53,"icon":53,"trailing_icon":53,"href":113,"sort":114,"status":60,"parent_item":53,"target":53,"isCanonical":53,"translations":115,"to":53,"menu":116},"m_sb_getting_started","Getting started","/guide/getting-started",6,[],{"position":102},{"id":118,"label":119,"description":53,"icon":53,"trailing_icon":53,"href":120,"sort":121,"status":60,"parent_item":53,"target":53,"isCanonical":53,"translations":122,"to":53,"menu":123},"m_sb_pagination","Pagination & Filtering","/guide/pagination-and-filtering",7,[],{"position":102},{"id":125,"label":126,"description":53,"icon":53,"trailing_icon":53,"href":127,"sort":128,"status":60,"parent_item":53,"target":53,"isCanonical":53,"translations":129,"to":53,"menu":130},"m_sb_changelogs","Changelogs","/guide/changelogs",12,[],{"position":102},{"id":132,"label":133,"description":53,"icon":53,"trailing_icon":53,"href":134,"sort":135,"status":60,"parent_item":125,"target":53,"isCanonical":53,"translations":136,"to":53,"menu":137},"m_sb_changelog_AccessControl","AccessControl Changelog","/guide/changelogs/AccessControl",13,[],{"position":102},{"id":139,"label":140,"description":53,"icon":53,"trailing_icon":53,"href":141,"sort":142,"status":60,"parent_item":125,"target":53,"isCanonical":53,"translations":143,"to":53,"menu":144},"m_sb_changelog_Configuration","Configuration Changelog","/guide/changelogs/Configuration",14,[],{"position":102},{"id":146,"label":147,"description":53,"icon":53,"trailing_icon":53,"href":148,"sort":149,"status":60,"parent_item":125,"target":53,"isCanonical":53,"translations":150,"to":53,"menu":151},"m_sb_changelog_HotelApi","HotelApi Changelog","/guide/changelogs/HotelApi",15,[],{"position":102},{"id":153,"slug":154,"title":112,"description":155,"blocks":156,"contentBlocks":167,"seo":173},"p_getting-started","getting-started","How to authenticate against the HotelPlatform APIs and send your first request.",[157],{"id":158,"type":159,"title":53,"subtitle":53,"content":160,"image":53,"ctaText":53,"ctaUrl":53,"module":161,"alignment":53,"ratio":53,"colorScheme":162,"settings":163,"items":164,"texts":165},"b_guide-getting-started","markdown","\u003Ch1>Getting started\u003C/h1>\n\u003Ch2 id=\"mock-the-api\" tabindex=\"-1\">Mock the API\u003C/h2>\n\u003Cp>The fastest way to get started with the API is to use a mock server. A mock server is a simulation of the real API that you can use to test your requests and responses. You can use the mock server to explore the API, test different endpoints, and see how the API responds to different requests. There are many different mock servers which are ready in minutes, here is one example:\u003C/p>\n\u003Cp>globally install the prism-cli package:\u003C/p>\n\u003Cpre class=\"shiki github-light\" style=\"background-color:#fff;color:#24292e\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1\">npm\u003C/span>\u003Cspan style=\"color:#032F62\"> install\u003C/span>\u003Cspan style=\"color:#005CC5\"> -g\u003C/span>\u003Cspan style=\"color:#032F62\"> @stoplight/prism-cli\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>mock the API:\u003C/p>\n\u003Cpre class=\"shiki github-light\" style=\"background-color:#fff;color:#24292e\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#6F42C1\">prism\u003C/span>\u003Cspan style=\"color:#032F62\"> mock\u003C/span>\u003Cspan style=\"color:#032F62\"> https://documentation.hotelplatform.io/docs/AccessControl/latest/openapi.json\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\u003C/code>\u003C/pre>\n\u003Cp>See the \u003Ca href=\"https://github.com/stoplightio/prism\">Prism documentation\u003C/a> for more advances use cases on how to use the mock server.\u003C/p>\n\u003Ch2 id=\"authentication\" tabindex=\"-1\">Authentication\u003C/h2>\n\u003Ch3 id=\"client-credentials\" tabindex=\"-1\">Client credentials\u003C/h3>\n\u003Cp>For trusted clients where the client credentials can be stored securely, we recommend using the client credentials flow. This flow is suitable for server-to-server communication where the client can securely store the client ID and secret.\u003C/p>\n\u003Cp>This represents the client credentials flow in a simple way:\u003C/p>\n\u003Col>\n\u003Cli>The client requests an access token from the authorization endpoint using its credentials.\u003C/li>\n\u003Cli>The authorization endpoint issues an access token.\u003C/li>\n\u003Cli>The client uses the access token to access a protected resource from the API.\u003C/li>\n\u003C/ol>\n\u003Cp>\u003Cimg src=\"/media/images/client-credential-flow.svg\" alt=\"Client Credentials Flow\">\u003C/p>\n\u003Ch3 id=\"authorization-code-with-pkce\" tabindex=\"-1\">Authorization code with PKCE\u003C/h3>\n\u003Cp>We utilize the industry-standard OAuth2 authorization flow with Proof Key for Code Exchange (PKCE) to ensure secure access to the system.\u003C/p>\n\u003Cp>The flow can be described as follows (simplified):\u003C/p>\n\u003Col>\n\u003Cli>User Accesses Resource: The user attempts to access a protected resource, prompting the client to begin the OAuth flow.\u003C/li>\n\u003Cli>Authorization Request: The client sends a request to the authorization endpoint with the code_challenge (derived from code_verifier) and code_challenge_method (typically S256).\u003C/li>\n\u003Cli>User Authentication: The user authenticates and grants consent.\u003C/li>\n\u003Cli>Authorization Code: The authorization endpoint redirects back to the client with an authorization_code.\u003C/li>\n\u003Cli>Token Request: The client exchanges the authorization_code for an access_token, including the code_verifier.\u003C/li>\n\u003Cli>Access Resource: The client uses the access_token to request the protected resource from the API.\u003C/li>\n\u003C/ol>\n\u003Cp>This simplified overview provides a basic understanding. We recommend to use a library or SDK that handles the OAuth2 flow for you.\u003C/p>\n\u003Cp>\u003Cimg src=\"/media/images/authorization-code-flow-pkce.svg\" alt=\"Authorization Code Flow\">\u003C/p>\n\u003Ch2 id=\"multiple-tenants\" tabindex=\"-1\">Multiple tenants\u003C/h2>\n\u003Cp>Our system supports multiple tenants, which means that you can use the same API to access different data sets. To access a specific tenant, you need to include the \u003Ccode>X-Tenant-Id\u003C/code> header in your requests. The \u003Ccode>X-Tenant-Id\u003C/code> header specifies the tenant you want to access, and the API will return data specific to that tenant.\u003C/p>\n\u003Cp>It is not possible to return data for multiple tenants in the same request. You need to make separate requests for each tenant you want to access. Its possible to access multiple tenant with the same credentials, but you need to specify the tenant id in the request.\u003C/p>\n\u003Cp>You need to request access to a specific tenant from the system administrator. The system administrator will provide you with the tenant ID, which you can then use to access the tenant's data.\u003C/p>\n\u003Cp>If you do not set the \u003Ccode>X-Tenant-Id\u003C/code> header in your requests, the API will return data for the default tenant.\u003C/p>\n\u003Ch2 id=\"headers\" tabindex=\"-1\">Headers\u003C/h2>\n\u003Cp>If not otherwise stated, the following headers need to be present.\u003C/p>\n\u003Cp>In all requests:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Ccode>Accept: application/vnd.api+json\u003C/code>\u003C/li>\n\u003Cli>\u003Ccode>X-Tenant-Id: &lt;your-tenant-id&gt;\u003C/code>\u003C/li>\n\u003C/ul>\n\u003Cp>In POST, PUT, PATCH requests:\u003C/p>\n\u003Cul>\n\u003Cli>\u003Ccode>Content-Type: application/vnd.api+json\u003C/code>\u003C/li>\n\u003C/ul>\n\u003Cp>and will produce a response with the same headers.\u003C/p>\n\u003Ch2 id=\"recommendations\" tabindex=\"-1\">Recommendations\u003C/h2>\n\u003Cp>\u003Cstrong>Client SDK\u003C/strong>: We recommend to use or create a library or SDK for your programming language which handles the API requests and responses for you. This will save you time and effort, and ensure that your application is secure and reliable.\u003C/p>\n\u003Cp>\u003Cstrong>Base url\u003C/strong>: please make sure you use a \u003Ccode>baseUrl\u003C/code> parameter in your requests, so you can easily switch between different servers and environments.\u003C/p>\n\u003Ch2 id=\"request-live-access\" tabindex=\"-1\">Request live access\u003C/h2>\n\u003Cp>Before we can grant you live access to the API, you need to provide the following information:\u003C/p>\n\u003Cul>\n\u003Cli>Your application name and description\u003C/li>\n\u003Cli>The intended use of the API\u003C/li>\n\u003Cli>The expected number of requests per day\u003C/li>\n\u003Cli>The expected number of clients\u003C/li>\n\u003Cli>The hotel you want to connect with\u003C/li>\n\u003C/ul>\n\u003Cp>We will then request permission from the tenant administrator to grant you access to the API.\u003C/p>\n\u003Ch2 id=\"errors\" tabindex=\"-1\">Errors\u003C/h2>\n\u003Cp>The API uses standard HTTP status codes to indicate the success or failure of a request. The response body will contain additional information about the error, including an error code, a message, and a description of the error.\u003C/p>\n\u003Cpre class=\"shiki github-light\" style=\"background-color:#fff;color:#24292e\" tabindex=\"0\">\u003Ccode>\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">{\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5\">  \"errors\"\u003C/span>\u003Cspan style=\"color:#24292E\">: [\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">    {\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5\">      \"status\"\u003C/span>\u003Cspan style=\"color:#24292E\">: \u003C/span>\u003Cspan style=\"color:#032F62\">\"400\"\u003C/span>\u003Cspan style=\"color:#24292E\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5\">      \"title\"\u003C/span>\u003Cspan style=\"color:#24292E\">: \u003C/span>\u003Cspan style=\"color:#032F62\">\"Bad Request\"\u003C/span>\u003Cspan style=\"color:#24292E\">,\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#005CC5\">      \"detail\"\u003C/span>\u003Cspan style=\"color:#24292E\">: \u003C/span>\u003Cspan style=\"color:#032F62\">\"The request is invalid or malformed.\"\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">    }\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">  ]\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003Cspan style=\"color:#24292E\">}\u003C/span>\u003C/span>\n\u003Cspan class=\"line\">\u003C/span>\u003C/code>\u003C/pre>\n\u003Ch2 id=\"versioning\" tabindex=\"-1\">Versioning\u003C/h2>\n\u003Cp>We will release minor versions for bug fixes and new features, and major versions for breaking changes.\u003C/p>\n\u003Ch2 id=\"changelogs\" tabindex=\"-1\">Changelogs\u003C/h2>\n\u003Cp>We provide changelogs for each version of the API. The changelogs contain information about new features, bug fixes, and breaking changes. You can find the changelogs in the \u003Ca href=\"/guide/changelogs\">Changelog section\u003C/a>.\u003C/p>\n",[],"default",{},[],{"body":166},"# Getting started\n\n## Mock the API\n\nThe fastest way to get started with the API is to use a mock server. A mock server is a simulation of the real API that you can use to test your requests and responses. You can use the mock server to explore the API, test different endpoints, and see how the API responds to different requests. There are many different mock servers which are ready in minutes, here is one example:\n\nglobally install the prism-cli package:\n```bash\nnpm install -g @stoplight/prism-cli\n```\nmock the API:\n```bash\nprism mock https://documentation.hotelplatform.io/docs/AccessControl/latest/openapi.json\n```\n\nSee the [Prism documentation](https://github.com/stoplightio/prism) for more advances use cases on how to use the mock server.\n\n## Authentication\n\n### Client credentials\n\nFor trusted clients where the client credentials can be stored securely, we recommend using the client credentials flow. This flow is suitable for server-to-server communication where the client can securely store the client ID and secret.\n\nThis represents the client credentials flow in a simple way:\n\n1. The client requests an access token from the authorization endpoint using its credentials.\n2. The authorization endpoint issues an access token.\n3. The client uses the access token to access a protected resource from the API.\n\n![Client Credentials Flow](/media/images/client-credential-flow.svg)\n\n\n\n### Authorization code with PKCE\n\nWe utilize the industry-standard OAuth2 authorization flow with Proof Key for Code Exchange (PKCE) to ensure secure access to the system.\n\nThe flow can be described as follows (simplified):\n\n1. User Accesses Resource: The user attempts to access a protected resource, prompting the client to begin the OAuth flow.\n2. Authorization Request: The client sends a request to the authorization endpoint with the code_challenge (derived from code_verifier) and code_challenge_method (typically S256).\n3. User Authentication: The user authenticates and grants consent.\n4. Authorization Code: The authorization endpoint redirects back to the client with an authorization_code.\n5. Token Request: The client exchanges the authorization_code for an access_token, including the code_verifier.\n6. Access Resource: The client uses the access_token to request the protected resource from the API.\n\nThis simplified overview provides a basic understanding. We recommend to use a library or SDK that handles the OAuth2 flow for you.\n\n![Authorization Code Flow](/media/images/authorization-code-flow-pkce.svg)\n\n## Multiple tenants\n\nOur system supports multiple tenants, which means that you can use the same API to access different data sets. To access a specific tenant, you need to include the `X-Tenant-Id` header in your requests. The `X-Tenant-Id` header specifies the tenant you want to access, and the API will return data specific to that tenant.\n\nIt is not possible to return data for multiple tenants in the same request. You need to make separate requests for each tenant you want to access. Its possible to access multiple tenant with the same credentials, but you need to specify the tenant id in the request.\n\nYou need to request access to a specific tenant from the system administrator. The system administrator will provide you with the tenant ID, which you can then use to access the tenant's data.\n\nIf you do not set the `X-Tenant-Id` header in your requests, the API will return data for the default tenant.\n\n## Headers\n\nIf not otherwise stated, the following headers need to be present.\n\nIn all requests:\n- `Accept: application/vnd.api+json`\n- `X-Tenant-Id: \u003Cyour-tenant-id>`\n\nIn POST, PUT, PATCH requests:\n- `Content-Type: application/vnd.api+json`\n\nand will produce a response with the same headers.\n\n## Recommendations\n\n**Client SDK**: We recommend to use or create a library or SDK for your programming language which handles the API requests and responses for you. This will save you time and effort, and ensure that your application is secure and reliable.\n\n**Base url**: please make sure you use a `baseUrl` parameter in your requests, so you can easily switch between different servers and environments.\n\n\n\n## Request live access\n\nBefore we can grant you live access to the API, you need to provide the following information:\n\n- Your application name and description\n- The intended use of the API\n- The expected number of requests per day\n- The expected number of clients\n- The hotel you want to connect with\n\nWe will then request permission from the tenant administrator to grant you access to the API.\n\n## Errors\n\nThe API uses standard HTTP status codes to indicate the success or failure of a request. The response body will contain additional information about the error, including an error code, a message, and a description of the error.\n\n```json\n{\n  \"errors\": [\n    {\n      \"status\": \"400\",\n      \"title\": \"Bad Request\",\n      \"detail\": \"The request is invalid or malformed.\"\n    }\n  ]\n}\n```\n\n## Versioning\n\nWe will release minor versions for bug fixes and new features, and major versions for breaking changes.\n\n## Changelogs\n\nWe provide changelogs for each version of the API. The changelogs contain information about new features, bug fixes, and breaking changes. You can find the changelogs in the [Changelog section](/guide/changelogs).\n",[168],{"id":158,"type":159,"title":53,"subtitle":53,"content":160,"image":53,"ctaText":53,"ctaUrl":53,"module":169,"alignment":53,"ratio":53,"colorScheme":162,"settings":170,"items":171,"texts":172},[],{},[],{"body":166},{},1791403614939]