{"id":49646,"date":"2026-11-04T22:05:47","date_gmt":"2026-11-04T22:05:47","guid":{"rendered":"https:\/\/alteg.io\/?p=49646"},"modified":"2026-11-05T10:43:14","modified_gmt":"2026-11-05T10:43:14","slug":"open-api-booking","status":"publish","type":"post","link":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/","title":{"rendered":"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist"},"content":{"rendered":"<p>An open booking API is the integration layer that links your calendar, client records, payments and back-office tools, so appointments move between systems without anyone retyping them. Built well, it ends double bookings. Built badly, it causes them, and it moves client data \u2013 sometimes health data \u2013 between vendors who each need a contract with you. This guide is for developers and managers at salons, clinics, spas and other appointment-based businesses in Europe: the technical patterns that keep one calendar consistent, the GDPR and PSD2 points to settle before go-live, and how Altegio\u2019s API, webhooks, Integrations Hub and MCP connections fit in.<\/p>\n<hr>\n<blockquote>\n<p><strong>TL;DR:<\/strong><\/p>\n<ul>\n<li>Double bookings usually come from two systems acting on the same slot: hold the slot, confirm it once and make every write safe to retry.<\/li>\n<li>Webhooks beat polling, but design for duplicates and out-of-order delivery: Altegio\u2019s webhooks are delivered at least once, with an X-Hook-Id header to deduplicate on.<\/li>\n<li>Most businesses need the standard booking widget plus a few API hooks, not a bespoke rebuild.<\/li>\n<li>Before connecting client data, put a written processor contract in place (GDPR Article 28), check for health data (Article 9), confirm a transfer basis for anything leaving the EEA and publish a privacy notice.<\/li>\n<li>PSD2 matters only where money moves: strong customer authentication is applied by payment service providers, so leave card handling to a regulated provider.<\/li>\n<\/ul>\n<\/blockquote>\n<hr>\n<h2 id=\"what-an-open-booking-api-actually-exposes\" tabindex=\"-1\">What an open booking API actually exposes<\/h2>\n<p>Strip away the marketing language and a booking API is a handful of endpoints doing predictable jobs. Know what you are calling and why before you wire anything together.<\/p>\n<ul>\n<li><strong>Calendar operations<\/strong>: create, read, update and cancel appointments, plus availability queries that check team members\u2019 schedules in real time.<\/li>\n<li><strong>Appointment lifecycle events<\/strong>: confirmations, reschedules, no-shows and cancellations, ideally pushed as webhooks rather than polled.<\/li>\n<li><strong>Client records<\/strong>: contact details and, in many salons and clinics, treatment notes that can count as data concerning health under the GDPR.<\/li>\n<li><strong>Payments<\/strong>: payment status passed back from a payment provider, while the card or bank part of the transaction stays with a regulated payment service provider.<\/li>\n<li><strong>Back-office hooks<\/strong>: stock write-offs, payroll inputs, reporting exports and the event plumbing that keeps all of it in sync.<\/li>\n<\/ul>\n<p>Miss one and you get a booking flow that looks fine in a demo but falls over the moment stock, schedules or payment status disagree with the calendar.<\/p>\n<p>Altegio splits these jobs across separate APIs. The Online Booking API has public endpoints for booking widgets and client portals and needs no user login. The Business Management API covers scheduling, clients, inventory, finances and loyalty: version 2 is recommended for new integrations, and version 1 is maintained for backward compatibility. Developer Tools holds webhooks, VoIP integration, reference dictionaries and the methods for apps published in the Integrations Hub. All requests are encrypted with TLS 1.2 or higher.<\/p>\n<h2 id=\"how-authentication-and-testing-work-in-the-altegio-api\" tabindex=\"-1\">How authentication and testing work in the Altegio API<\/h2>\n<p>Before you plan endpoints, be clear about the credentials, because they decide whose data an integration can see.<\/p>\n<ul>\n<li><strong>Access key<\/strong> (the partner token in the API documentation): issued in the Altegio Developer Hub and passed as a Bearer token. Registration is free and starts from Settings &gt; Integrations and access &gt; Keys &gt; Register in Developer Hub.<\/li>\n<li><strong>User key<\/strong> (the user token): returned by the API\u2019s authorization method for an Altegio user\u2019s login and password, or taken from the system user of an installed app. It decides on whose behalf the integration works, and that user\u2019s Location access and permissions apply.<\/li>\n<li><strong>Request header<\/strong>: public Online Booking calls need only the access key. Calls to Location data carry both keys, in the form <code>Authorization: Bearer &lt;partner_token&gt;, User &lt;user_token&gt;<\/code>.<\/li>\n<\/ul>\n<p>Treat the access key as a secret and keep it out of front-end code and public repositories. Give the integration its own user and tick only the rights it needs when you set up the app: an app\u2019s system user has access rights much like a regular user, with some restrictions in the client base and user management. For testing, the documentation describes installing a draft app on a Location you control and making authenticated calls there before moderation, rather than a separate sandbox. Integrations built for other companies are reviewed before they appear in the Integrations Hub.<\/p>\n<h2 id=\"widget-vs-bespoke-api-which-route-fits-your-build\" tabindex=\"-1\">Widget vs bespoke API: which route fits your build?<\/h2>\n<p>Most teams face this decision early, and it is worth settling before a single line of code gets written.<\/p>\n<ol>\n<li><strong>Widget integration<\/strong>: a ready booking form that gets online booking live on a website quickly, with limited scope to customise the flow.<\/li>\n<li><strong>Bespoke API integration<\/strong>: full control over the booking journey, built to your data model, but it demands ongoing engineering time and a maintenance budget.<\/li>\n<\/ol>\n<p>The common trap is budgeting for the build and forgetting the upkeep. A widget is configured once, while a bespoke flow has to be tested, monitored and updated whenever an API version or a business rule changes, and that work keeps going long after launch.<\/p>\n<p>For most appointment-based businesses, the standard widget handles public booking and a few API hooks cover the parts that need custom logic, such as a stock check across Locations or a loyalty rule your platform doesn\u2019t cover.<\/p>\n<p>In Altegio, <a href=\"https:\/\/alteg.io\/en\/online-booking\/\">online booking<\/a> comes with the platform. The same Appointment Calendar also takes appointments from Reserve with Google, which is free and connected under Integrations &gt; Client acquisition &gt; Google Maps, and from the Book now button on Instagram and Facebook, connected through an app in the Integrations Hub. Each extra channel feeds the same calendar, so it doesn\u2019t add another copy of your availability to keep in sync.<\/p>\n<h2 id=\"technical-patterns-that-keep-bookings-consistent\" tabindex=\"-1\">Technical patterns that keep bookings consistent<\/h2>\n<p>Two systems both think they hold the last free slot at 15:00. One of them is wrong, and if your architecture can\u2019t handle that, you get a double booking and an unhappy client at reception.<\/p>\n<ol>\n<li><strong>Keep one calendar as the source of truth<\/strong> and let other systems read from it and write to it through the API, instead of keeping their own copies of availability.<\/li>\n<li><strong>Use webhooks, not polling<\/strong>, so changes reach other systems soon after they happen rather than on a fixed schedule.<\/li>\n<li><strong>Hold the slot before you confirm it<\/strong>, with optimistic or pessimistic locking or a short-lived hold that expires if payment doesn\u2019t follow.<\/li>\n<li><strong>Make every write idempotent<\/strong>, so a retried request can\u2019t create a duplicate appointment, and back it with a durable queue rather than a fire-and-forget call.<\/li>\n<li><strong>Test concurrency deliberately<\/strong>: simulate two clients booking the same slot in the same second, and monitor sync delay on every connected channel.<\/li>\n<\/ol>\n<p>Shared equipment is a common blind spot. In Altegio, rooms, chairs and devices can be set up as Resources and linked to services. When a service with a Resource is booked, the Resource is reserved automatically, and an online appointment takes one free instance of each Resource, so two clients can\u2019t book the only massage room for the same time.<\/p>\n<p>For webhooks, Altegio sends notifications to the address you set under Settings &gt; Integrations and access &gt; Webhooks, for the events you choose: changes to Location settings, team members, products, services, service categories, clients, appointments in the Appointment Calendar, and inventory and financial operations. Each notification is a POST request with a JSON body that describes the change, including the object type and a link to the changed object. Webhooks don\u2019t carry a traffic source or click ID, so they tell you what changed, not where a client came from.<\/p>\n<h2 id=\"handling-error-responses-and-retries-in-booking-apis\" tabindex=\"-1\">Handling error responses and retries in booking APIs<\/h2>\n<p>A booking integration needs to fail predictably, because it will fail sometimes: a payment provider times out, a webhook is delayed, a network blip drops a request halfway through. What matters is what happens next.<\/p>\n<p>Return clear, structured error codes rather than a generic failure message, so the calling system knows whether to retry, alert a human or roll back a partial booking. A 409 conflict for a slot that has just been taken is a different problem from a 500 error on your own server, and the client application should treat them differently.<\/p>\n<p>Retries for transient failures should be automatic but bounded: exponential backoff with a sensible cap stops a struggling downstream service from being hammered by a queue of retries. Idempotency keys make retries safe in the first place, since a retried request with the same key should never create a second appointment. Pair that with a durable queue, so a failed delivery is retried later rather than lost, and a reconciliation job that finds bookings stuck in a pending state and resolves them one way or the other.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/alteg.io\/blog\/wp-content\/uploads\/2026\/10\/open-api-booking-01.jpeg\" alt=\"Retry-safe failure flow in six steps: structured error codes, client decision, exponential backoff, idempotency keys, durable webhook queue, periodic reconciliation\"><\/p>\n<p>On the receiving side, design around how Altegio delivers webhooks:<\/p>\n<ul>\n<li>Delivery is at least once, so the same event can arrive twice. Each request carries an X-Hook-Id header that stays the same across retries, so deduplicate on it.<\/li>\n<li>Each attempt has a 10-second total timeout. Answer with a 2xx status straight away and do the heavy work from your own queue.<\/li>\n<li>Connection failures, HTTP 429 and 5xx responses are retried up to twice, 5 and then 30 seconds after the previous attempt. Other 4xx responses, and timeouts after the request was sent, are not retried.<\/li>\n<li>A retry carries the current state of the object, so its data can differ from the first attempt, and notifications for different events are not guaranteed to arrive in order. Re-read the object before you overwrite newer data.<\/li>\n<li>There is no partner-facing delivery log or replay, so a scheduled job that re-reads recent appointments through the API is your safety net.<\/li>\n<li>Requests carry the shared Bearer token configured for the integration, not a secret unique to your webhook address, so check the header and don\u2019t rely on a hidden URL alone.<\/li>\n<\/ul>\n<h2 id=\"strategies-for-scalability-and-performance-in-booking-apis\" tabindex=\"-1\">Strategies for scalability and performance in booking APIs<\/h2>\n<p>Booking traffic is spiky. An integration can sit quiet for hours, then take a burst of requests when a promotion goes out or a popular slot opens. Design for the spike, not the average.<\/p>\n<p>Altegio\u2019s API allows 200 requests per minute or 5 requests per second per IP address, so plan calls around that limit rather than around your peak demand. Cache availability queries, since a calendar check doesn\u2019t need a live call every time, but invalidate the cache as soon as a webhook says a slot has changed. Batch background syncs, spread them out and back off when you reach the limit, so public booking never waits behind a nightly export.<\/p>\n<p>For multi-location businesses, partition work by Location so a busy branch doesn\u2019t slow down the others. Monitor latency per endpoint rather than as a single average, because a slow payment step hidden inside a fast overall response time only shows up once a client is already annoyed.<\/p>\n<h2 id=\"gdpr-checklist-before-you-connect-anything\" tabindex=\"-1\">GDPR checklist before you connect anything<\/h2>\n<p>Before any calendar talks to any client database, get the legal groundwork right. The GDPR (Regulation 2016\/679) treats data concerning health as a special category: personal data about a person\u2019s physical or mental health that reveals information about their health status. Treatment notes, allergy flags and contraindications in a client card fit that description, and even an appointment for a specific treatment can reveal something about health.<\/p>\n<ul>\n<li>Identify special category data in appointment and client records. Processing it is prohibited unless an exception in Article 9(2) applies, such as the client\u2019s explicit consent for specified purposes.<\/li>\n<li>Sign a contract with every vendor that processes client data on your behalf, for example your booking platform or a messaging provider. Article 28(3) says what it must cover, including the subject matter, duration, nature and purpose of the processing and the processor\u2019s obligations, and Article 28(9) requires it in writing, which includes electronic form.<\/li>\n<li>Check where each vendor stores and accesses data. Transfers outside the EEA need a basis under Chapter V of the GDPR, such as an adequacy decision (Article 45) or standard data protection clauses adopted by the Commission (Article 46).<\/li>\n<li>Collect only what each integration needs (data minimisation, Article 5(1)(c)) and protect what you keep with measures such as encryption (Article 32).<\/li>\n<li>Tell clients how their data is used at the moment you collect it (Article 13), and run a data protection impact assessment where processing is likely to result in a high risk: Article 35(3)(b) names large-scale processing of special category data as one such case.<\/li>\n<li>For country-specific questions, check the guidance of your national data protection authority, because details differ between EU countries.<\/li>\n<\/ul>\n<p><strong>A written processor contract under Article 28 is a legal requirement, not a nice-to-have.<\/strong> Every vendor that handles client or appointment data on your behalf needs one, and it is far easier to sign before the first API call than to explain its absence later.<\/p>\n<p>Check what your booking flow collects, too. Altegio\u2019s booking widget has a mandatory checkbox for consent to personal data processing but no separate marketing-consent checkbox, so collect marketing consent another way if you need it. For visitors from the EU, the booking form blocks analytics and advertising cookies until the visitor consents.<\/p>\n<h2 id=\"where-psd2-comes-in\" tabindex=\"-1\">Where PSD2 comes in<\/h2>\n<p>PSD2 (Directive 2015\/2366) governs payment services, not bookings, so it only matters where your booking flow takes money.<\/p>\n<ul>\n<li><strong>Online payments<\/strong>: payment service providers must apply strong customer authentication when a payer initiates an electronic payment (Article 97), using at least two independent elements from knowledge, possession and inherence. That is the job of the payment providers involved, not of your booking code.<\/li>\n<li><strong>Pay by bank<\/strong>: if you add payment initiation, the payment initiation service provider must not request from the payer any data other than what it needs to provide the service (Article 66(3)(f)).<\/li>\n<li><strong>Your part<\/strong>: use a regulated provider, pass the payment status into the appointment and keep card details out of your own database and logs.<\/li>\n<\/ul>\n<p>In Altegio, online payments go through a connected provider \u2013 Stripe, or Adyen in EU countries \u2013 and Altegio charges no commission of its own on them. <a href=\"https:\/\/alteg.io\/en\/payment-policy-no-show-protection\/\">Payment policies<\/a> let you take a deposit with any provider available in your region, while a card guarantee works only with <a href=\"https:\/\/alteg.io\/en\/adyen\/\">Adyen<\/a> in EU countries. If you are weighing bank payments, read <a href=\"https:\/\/alteg.io\/en\/blog\/open-banking-payments\/\">Pay by bank in Europe: open banking for appointment businesses<\/a>.<\/p>\n<h2 id=\"ai-agents-and-mcp-a-new-kind-of-integration\" tabindex=\"-1\">AI agents and MCP: a new kind of integration<\/h2>\n<p>Not every integration needs code any more. Altegio runs on the Model Context Protocol (MCP), so Claude, ChatGPT, Cursor or Gemini can work with a business account directly. The <a href=\"https:\/\/alteg.io\/en\/mcp\/\">MCP and agentic management<\/a> page lists the connections:<\/p>\n<ul>\n<li><strong>Altegio Pro MCP<\/strong>: appointments, team members, services, work schedules, clients and Location settings, with separate read, write and delete permissions.<\/li>\n<li><strong>Altegio Pro MCP (read-only)<\/strong>: analytics and answers without any writes, for people who should look but not change anything.<\/li>\n<li><strong>Altegio Integrations Hub MCP<\/strong>: for developers who want to plan, create, configure and test their own Integrations Hub app from an AI assistant.<\/li>\n<li><strong>Altegio.me MCP<\/strong>: clients find a free time and book, reschedule or cancel their own appointments in a chat.<\/li>\n<\/ul>\n<p>An AI assistant connects without an access key: you add the MCP address to the assistant, sign in with your Altegio account and authorise access to the relevant Location. The data rules still apply. The assistant works with the same calendar, so it sees the same free slots, but it processes the data needed for each request under its AI provider\u2019s own terms, so review those data controls and connect only the access your team needs.<\/p>\n<h2 id=\"developer-and-product-owner-implementation-checklist\" tabindex=\"-1\">Developer and product-owner implementation checklist<\/h2>\n<p>Before you write a line of integration code, lock down the business and legal decisions. Retrofitting compliance after launch costs far more than building it in from the start.<\/p>\n<ul>\n<li>Agree which calendar is the single source of truth and map every system that reads from or writes to it.<\/li>\n<li>Sign processor contracts with every vendor and confirm in writing where data is stored and accessed.<\/li>\n<li>Create a dedicated user for the integration with only the rights it needs, and keep keys in a secrets store.<\/li>\n<li>Build against a current API version, validate payloads against the schema and pin the version you tested, so a change elsewhere doesn\u2019t silently break your client.<\/li>\n<li>Add webhook deduplication, idempotency keys and concurrency controls, then automate tests that try to break them with race conditions.<\/li>\n<li>Plan monitoring, reconciliation jobs and incident response, sort out consent flows and publish a privacy notice before go-live, not after.<\/li>\n<\/ul>\n<p>Treat the processor contract and data location questions as blocking tasks, not paperwork for after launch. A missing contract found six months in costs far more than one agreed before the first API call.<\/p>\n<h2 id=\"how-an-integrated-platform-reduces-the-risk-and-effort\" tabindex=\"-1\">How an integrated platform reduces the risk and effort<\/h2>\n<p>Building all of this from scratch is a serious project, which is why many businesses choose an integrated platform and use the API only for what is left. Altegio is built for appointment-based businesses \u2013 beauty, wellness, clinics, auto services, fitness and more \u2013 and keeps online booking, the Appointment Calendar, the client base, payments, inventory, payroll and finances in one system. Appointments from the widget, Reserve with Google, the Instagram and Facebook Book now button and the Altegio.me client app land in the same Appointment Calendar, so there is one version of your availability rather than several that disagree.<\/p>\n<p>Back-office data stays connected as well. For example, <a href=\"https:\/\/alteg.io\/en\/inventory-control\/\">inventory control<\/a> writes off consumables automatically through bills of materials linked to services, so stock moves with the appointments instead of through a separate sync.<\/p>\n<p>It also shortens the compliance list. Every separate tool that touches client data is another processor to vet, another contract to sign and another place where data may leave the EEA. Fewer moving parts means fewer of those checks, though you still need to do them for every vendor you keep.<\/p>\n<h2 id=\"why-the-compliance-work-matters-more-than-the-code\" tabindex=\"-1\">Why the compliance work matters more than the code<\/h2>\n<p>Most guidance on open API booking spends its energy on the technical build and treats compliance as a box to tick near the end. That ordering is backwards. The businesses that get into trouble are rarely the ones with clumsy webhook retries. They are the ones that connected a booking system to a client database without a processor contract or without noticing that treatment notes count as health data.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/alteg.io\/blog\/wp-content\/uploads\/2026\/10\/open-api-booking-02.jpeg\" alt=\"Illustration of a calendar, a client card and a document connected to a central hub, with gates controlling access to a database and cloud services\"><\/p>\n<p>The usual advice to \u201cpick an API and start building\u201d skips the part that decides whether the integration survives an audit. Settle processor contracts, data locations and consent flows first. The engineering patterns \u2013 webhooks, idempotency, locking \u2013 are important, but they are well understood and are not where most businesses come unstuck. Prioritise the paperwork before the pull request: a technically elegant integration built on the wrong legal foundation is still the wrong integration.<\/p>\n<h2 id=\"next-steps-with-altegio\" tabindex=\"-1\">Next steps with Altegio<\/h2>\n<p>If you want the booking widget, the API and the back-office modules already working together instead of building that yourself, here is where to start.<\/p>\n<ul>\n<li>Start the <a href=\"https:\/\/alteg.io\/en\/onboarding\/first\/\">7-day free trial<\/a> and test online booking against your own schedule. There is no free plan: the price depends on the number of team members and the billing period, see <a href=\"https:\/\/alteg.io\/en\/pricing\/\">pricing<\/a>.<\/li>\n<li>Register in the Developer Hub for free from Settings &gt; Integrations and access &gt; Keys, and read the public API documentation, linked from the Resources menu on alteg.io.<\/li>\n<li>Connect an AI assistant from the <a href=\"https:\/\/alteg.io\/en\/mcp\/\">MCP and agentic management<\/a> page.<\/li>\n<li><a href=\"https:\/\/alteg.io\/en\/contact\/\">Contact the Altegio team<\/a> about moving your data or a specific integration scenario. Migration and support are free.<\/li>\n<\/ul>\n<h2 id=\"faq\" tabindex=\"-1\">FAQ<\/h2>\n<h3 id=\"what-does-open-api-booking-mean-for-a-salon-or-clinic\" tabindex=\"-1\">What does \u201copen API booking\u201d mean for a salon or clinic?<\/h3>\n<p>It means an API that exposes calendar, client, payment and back-office data, so a booking system can connect to other software without manual re-entry. For salons, spas and clinics that usually covers availability checks, appointment confirmations, client contact details and treatment data, and payment status.<\/p>\n<h3 id=\"is-a-widget-or-a-bespoke-api-integration-better-for-a-small-business\" tabindex=\"-1\">Is a widget or a bespoke API integration better for a small business?<\/h3>\n<p>A widget gets online booking live quickly and suits most single-location businesses, while a bespoke API integration gives full control but needs ongoing development time to maintain. Many businesses use the widget for public booking and add specific API hooks only for flows that need custom logic.<\/p>\n<h3 id=\"do-i-need-a-data-processing-agreement-to-use-a-booking-api\" tabindex=\"-1\">Do I need a data processing agreement to use a booking API?<\/h3>\n<p>Yes, for every vendor that processes client or appointment data on your behalf. Article 28(3) of the GDPR requires a contract that sets out the subject matter, duration, nature and purpose of the processing and the processor\u2019s obligations, and Article 28(9) requires it in writing, including electronic form.<\/p>\n<h3 id=\"how-do-booking-apis-prevent-double-bookings\" tabindex=\"-1\">How do booking APIs prevent double bookings?<\/h3>\n<p>Reliable systems hold a slot with server-side locking or a short-lived reservation before confirming it, and make writes idempotent so a retried request can\u2019t create a duplicate. On the webhook side, deduplicating events and re-reading the current state of an appointment stops a repeated or late notification from overwriting newer data. Testing concurrent booking attempts on purpose is the standard way to catch race conditions before clients do.<\/p>\n<h3 id=\"does-altegio-offer-an-open-api-alongside-its-booking-widget\" tabindex=\"-1\">Does Altegio offer an open API alongside its booking widget?<\/h3>\n<p>Yes. There is a public Online Booking API, a Business Management API in versions 1 and 2, and Developer Tools with webhooks. Requests to Location data carry an access key from the free Developer Hub, passed as a Bearer token, and a user key for the Altegio user the integration acts as. AI assistants connect through Altegio\u2019s MCP servers by signing in with an Altegio account, with no key.<\/p>\n<h3 id=\"what-are-the-altegio-api-rate-limits\" tabindex=\"-1\">What are the Altegio API rate limits?<\/h3>\n<p>The API allows 200 requests per minute or 5 requests per second per IP address. Cache availability reads, batch background syncs and use webhooks instead of polling to stay within it.<\/p>\n<h2 id=\"read-next\" tabindex=\"-1\">Read next<\/h2>\n<ul>\n<li><a href=\"https:\/\/alteg.io\/en\/blog\/open-api-marketplace-integrations\/\">Altegio Open API and Marketplace: Integrations, Multi-Branch Apps, Webhooks, and Analytics Events<\/a><\/li>\n<li><a href=\"https:\/\/alteg.io\/en\/blog\/vibe-coded-booking-system-risks\/\">\u201cYour own system in three days, for next to nothing\u201d: what you\u2019re really buying from a vibe coder<\/a><\/li>\n<li><a href=\"https:\/\/alteg.io\/en\/blog\/payment-policy-card-guarantee-adyen\/\">Protect your most expensive slots: payment policies, card guarantee and Adyen<\/a><\/li>\n<li><a href=\"https:\/\/alteg.io\/en\/blog\/how-to-choose-salon-booking-system\/\">A salon booking system: how to choose<\/a><\/li>\n<\/ul>\n<p><em>This article is general information, not legal or tax advice. Rules differ between EU countries, so check your national law or ask a lawyer before acting.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Stop double bookings when you connect a booking API: slot holds, webhooks, retries and rate limits, plus the GDPR and PSD2 checks to do before go-live.<\/p>\n","protected":false},"author":34,"featured_media":49619,"comment_status":"closed","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"footnotes":"","_members_access_role":[],"_members_access_error":""},"categories":[319,346],"tags":[193,286],"class_list":["post-49646","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-protecao-de-dados","category-gestao","tag-booking-software","tag-online-booking"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO Pro 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"Stop double bookings when you connect a booking API: slot holds, webhooks, retries and rate limits, plus the GDPR and PSD2 checks to do before go-live.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Giorgio Altegi\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO Pro (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"The Altegio Times - Online Booking and Business Management Media\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist - The Altegio Times\" \/>\n\t\t<meta property=\"og:description\" content=\"Stop double bookings when you connect a booking API: slot holds, webhooks, retries and rate limits, plus the GDPR and PSD2 checks to do before go-live.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/alteg.io\/blog\/wp-content\/uploads\/2026\/10\/open-api-booking-hero.jpeg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/alteg.io\/blog\/wp-content\/uploads\/2026\/10\/open-api-booking-hero.jpeg\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2026-11-04T22:05:47+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2026-11-05T10:43:14+00:00\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist - The Altegio Times\" \/>\n\t\t<meta name=\"twitter:description\" content=\"Stop double bookings when you connect a booking API: slot holds, webhooks, retries and rate limits, plus the GDPR and PSD2 checks to do before go-live.\" \/>\n\t\t<meta name=\"twitter:image\" content=\"https:\/\/alteg.io\/blog\/wp-content\/uploads\/2026\/10\/open-api-booking-hero.jpeg\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/open-api-booking\\\/#blogposting\",\"name\":\"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist - The Altegio Times\",\"headline\":\"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist\",\"author\":{\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/author\\\/giorgio-a\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/alteg.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/open-api-booking-hero.jpeg\",\"width\":1080,\"height\":720},\"datePublished\":\"2026-11-04T22:05:47+00:00\",\"dateModified\":\"2026-11-05T10:43:14+00:00\",\"inLanguage\":\"pt\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/open-api-booking\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/open-api-booking\\\/#webpage\"},\"articleSection\":\"Prote\\u00e7\\u00e3o de Dados, Gest\\u00e3o, booking software, online booking, Opcional\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/open-api-booking\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/alteg.io\\\/pt\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/category\\\/gestao\\\/#listItem\",\"name\":\"Gest\\u00e3o\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/category\\\/gestao\\\/#listItem\",\"position\":2,\"name\":\"Gest\\u00e3o\",\"item\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/category\\\/gestao\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/open-api-booking\\\/#listItem\",\"name\":\"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/open-api-booking\\\/#listItem\",\"position\":3,\"name\":\"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/category\\\/gestao\\\/#listItem\",\"name\":\"Gest\\u00e3o\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/#organization\",\"name\":\"The Altegio Times\",\"description\":\"Online Booking and Business Management Media\",\"url\":\"https:\\\/\\\/alteg.io\\\/pt\\\/\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/author\\\/giorgio-a\\\/#author\",\"url\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/author\\\/giorgio-a\\\/\",\"name\":\"Giorgio Altegi\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/open-api-booking\\\/#authorImage\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/e98af92d829543c69d64b43e9494de1727197de020fdafacba8601656bd45cfc?s=96&d=initials&r=g&initials=GA\",\"width\":96,\"height\":96,\"caption\":\"Giorgio Altegi\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/open-api-booking\\\/#webpage\",\"url\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/open-api-booking\\\/\",\"name\":\"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist - The Altegio Times\",\"description\":\"Stop double bookings when you connect a booking API: slot holds, webhooks, retries and rate limits, plus the GDPR and PSD2 checks to do before go-live.\",\"inLanguage\":\"pt\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/open-api-booking\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/author\\\/giorgio-a\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/author\\\/giorgio-a\\\/#author\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/alteg.io\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/10\\\/open-api-booking-hero.jpeg\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/open-api-booking\\\/#mainImage\",\"width\":1080,\"height\":720},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/blog\\\/open-api-booking\\\/#mainImage\"},\"datePublished\":\"2026-11-04T22:05:47+00:00\",\"dateModified\":\"2026-11-05T10:43:14+00:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/#website\",\"url\":\"https:\\\/\\\/alteg.io\\\/pt\\\/\",\"name\":\"The Altegio Times\",\"description\":\"Online Booking and Business Management Media\",\"inLanguage\":\"pt\",\"publisher\":{\"@id\":\"https:\\\/\\\/alteg.io\\\/pt\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO Pro -->\r\n\t\t<title>Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist - The Altegio Times<\/title>\n\n","aioseo_head_json":{"title":"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist - The Altegio Times","description":"Stop double bookings when you connect a booking API: slot holds, webhooks, retries and rate limits, plus the GDPR and PSD2 checks to do before go-live.","canonical_url":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/#blogposting","name":"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist - The Altegio Times","headline":"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist","author":{"@id":"https:\/\/alteg.io\/pt\/blog\/author\/giorgio-a\/#author"},"publisher":{"@id":"https:\/\/alteg.io\/pt\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/alteg.io\/blog\/wp-content\/uploads\/2026\/10\/open-api-booking-hero.jpeg","width":1080,"height":720},"datePublished":"2026-11-04T22:05:47+00:00","dateModified":"2026-11-05T10:43:14+00:00","inLanguage":"pt","mainEntityOfPage":{"@id":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/#webpage"},"isPartOf":{"@id":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/#webpage"},"articleSection":"Prote\u00e7\u00e3o de Dados, Gest\u00e3o, booking software, online booking, Opcional"},{"@type":"BreadcrumbList","@id":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/alteg.io\/pt\/#listItem","position":1,"name":"Home","item":"https:\/\/alteg.io\/pt\/","nextItem":{"@type":"ListItem","@id":"https:\/\/alteg.io\/pt\/blog\/category\/gestao\/#listItem","name":"Gest\u00e3o"}},{"@type":"ListItem","@id":"https:\/\/alteg.io\/pt\/blog\/category\/gestao\/#listItem","position":2,"name":"Gest\u00e3o","item":"https:\/\/alteg.io\/pt\/blog\/category\/gestao\/","nextItem":{"@type":"ListItem","@id":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/#listItem","name":"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist"},"previousItem":{"@type":"ListItem","@id":"https:\/\/alteg.io\/pt\/#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/#listItem","position":3,"name":"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist","previousItem":{"@type":"ListItem","@id":"https:\/\/alteg.io\/pt\/blog\/category\/gestao\/#listItem","name":"Gest\u00e3o"}}]},{"@type":"Organization","@id":"https:\/\/alteg.io\/pt\/#organization","name":"The Altegio Times","description":"Online Booking and Business Management Media","url":"https:\/\/alteg.io\/pt\/"},{"@type":"Person","@id":"https:\/\/alteg.io\/pt\/blog\/author\/giorgio-a\/#author","url":"https:\/\/alteg.io\/pt\/blog\/author\/giorgio-a\/","name":"Giorgio Altegi","image":{"@type":"ImageObject","@id":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/#authorImage","url":"https:\/\/secure.gravatar.com\/avatar\/e98af92d829543c69d64b43e9494de1727197de020fdafacba8601656bd45cfc?s=96&d=initials&r=g&initials=GA","width":96,"height":96,"caption":"Giorgio Altegi"}},{"@type":"WebPage","@id":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/#webpage","url":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/","name":"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist - The Altegio Times","description":"Stop double bookings when you connect a booking API: slot holds, webhooks, retries and rate limits, plus the GDPR and PSD2 checks to do before go-live.","inLanguage":"pt","isPartOf":{"@id":"https:\/\/alteg.io\/pt\/#website"},"breadcrumb":{"@id":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/#breadcrumblist"},"author":{"@id":"https:\/\/alteg.io\/pt\/blog\/author\/giorgio-a\/#author"},"creator":{"@id":"https:\/\/alteg.io\/pt\/blog\/author\/giorgio-a\/#author"},"image":{"@type":"ImageObject","url":"https:\/\/alteg.io\/blog\/wp-content\/uploads\/2026\/10\/open-api-booking-hero.jpeg","@id":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/#mainImage","width":1080,"height":720},"primaryImageOfPage":{"@id":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/#mainImage"},"datePublished":"2026-11-04T22:05:47+00:00","dateModified":"2026-11-05T10:43:14+00:00"},{"@type":"WebSite","@id":"https:\/\/alteg.io\/pt\/#website","url":"https:\/\/alteg.io\/pt\/","name":"The Altegio Times","description":"Online Booking and Business Management Media","inLanguage":"pt","publisher":{"@id":"https:\/\/alteg.io\/pt\/#organization"}}]},"og:locale":"pt_PT","og:site_name":"The Altegio Times - Online Booking and Business Management Media","og:type":"article","og:title":"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist - The Altegio Times","og:description":"Stop double bookings when you connect a booking API: slot holds, webhooks, retries and rate limits, plus the GDPR and PSD2 checks to do before go-live.","og:url":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/","og:image":"https:\/\/alteg.io\/blog\/wp-content\/uploads\/2026\/10\/open-api-booking-hero.jpeg","og:image:secure_url":"https:\/\/alteg.io\/blog\/wp-content\/uploads\/2026\/10\/open-api-booking-hero.jpeg","article:published_time":"2026-11-04T22:05:47+00:00","article:modified_time":"2026-11-05T10:43:14+00:00","twitter:card":"summary_large_image","twitter:title":"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist - The Altegio Times","twitter:description":"Stop double bookings when you connect a booking API: slot holds, webhooks, retries and rate limits, plus the GDPR and PSD2 checks to do before go-live.","twitter:image":"https:\/\/alteg.io\/blog\/wp-content\/uploads\/2026\/10\/open-api-booking-hero.jpeg"},"aioseo_meta_data":{"post_id":"49646","title":null,"description":"Stop double bookings when you connect a booking API: slot holds, webhooks, retries and rate limits, plus the GDPR and PSD2 checks to do before go-live.","keywords":null,"keyphrases":{"focus":[],"additional":[]},"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"featured","og_image_custom_url":null,"og_image_custom_fields":null,"og_custom_image_width":null,"og_custom_image_height":null,"og_video":"","og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":true,"twitter_card":"default","twitter_image_type":"default","twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","tabs":null,"priority":0,"frequency":"default","local_seo":null,"created":"2026-10-15 16:37:42","updated":"2026-11-05 11:03:58","seo_analyzer_scan_date":"2026-11-05 11:03:58","primary_term":null,"og_image_url":"https:\/\/alteg.io\/blog\/wp-content\/uploads\/2026\/10\/open-api-booking-hero.jpeg","og_image_width":"0","og_image_height":"0","twitter_image_url":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"limit_modified_date":false,"ai":null,"breadcrumb_settings":null,"focus_keyword":null,"additional_keywords":null,"truseo_locale":null,"reviewed_by":null},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/alteg.io\/pt\/\" title=\"Home\">Home<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u203a<\/span><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/alteg.io\/pt\/blog\/category\/gestao\/\" title=\"Gest\u00e3o\">Gest\u00e3o<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u203a<\/span><span class=\"aioseo-breadcrumb\">\n\tAvoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist\n<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/alteg.io\/pt\/"},{"label":"Gest\u00e3o","link":"https:\/\/alteg.io\/pt\/blog\/category\/gestao\/"},{"label":"Avoid Double Bookings with an Open Booking API: GDPR and PSD2 Checklist","link":"https:\/\/alteg.io\/pt\/blog\/open-api-booking\/"}],"_links":{"self":[{"href":"https:\/\/alteg.io\/pt\/blog\/wp-json\/wp\/v2\/posts\/49646","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alteg.io\/pt\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/alteg.io\/pt\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/alteg.io\/pt\/blog\/wp-json\/wp\/v2\/users\/34"}],"replies":[{"embeddable":true,"href":"https:\/\/alteg.io\/pt\/blog\/wp-json\/wp\/v2\/comments?post=49646"}],"version-history":[{"count":1,"href":"https:\/\/alteg.io\/pt\/blog\/wp-json\/wp\/v2\/posts\/49646\/revisions"}],"predecessor-version":[{"id":56002,"href":"https:\/\/alteg.io\/pt\/blog\/wp-json\/wp\/v2\/posts\/49646\/revisions\/56002"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alteg.io\/pt\/blog\/wp-json\/wp\/v2\/media\/49619"}],"wp:attachment":[{"href":"https:\/\/alteg.io\/pt\/blog\/wp-json\/wp\/v2\/media?parent=49646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alteg.io\/pt\/blog\/wp-json\/wp\/v2\/categories?post=49646"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alteg.io\/pt\/blog\/wp-json\/wp\/v2\/tags?post=49646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}