
Stay updated
Stay informed and see how CaptainBook evolves to deliver smarter
v27.2.0
Captainbook v27.2.0
New
Ask for a product's photos and documents over MCP
Your connected AI assistant can now list the images and documents attached to
a product, not just fetch one when it already knows the ID. Previously it had
no way to discover what media a product had, so questions like "what photos
are on the sunset cruise?" could not be answered at all. Incremental syncs
that filter by a date also work now instead of failing.
Improved
Load the billing page faster for accounts with many invoices
The billing page no longer waits on an external lookup for every past
invoice before it renders, so it opens quickly even for long-standing
accounts. The "External Platform Invoice" link now resolves when you
open the download menu, and lookup failures are logged instead of
silently leaving the link broken.
Get a confirmation when you switch a booking's resource or save app settings
Switching the assigned resource on a booking (from the manifest or the booking
details panel) and saving an app's parameters now show a success toast, so you
get clear confirmation the action worked instead of the screen changing silently.
Fixed
WebP product image uploads no longer fail
Suppliers can now upload `.webp` images for product attachments and they'll be processed into variants like JPEG and PNG images.
Booking buttons no longer send customers away from your site on WIX
On sites built with Wix — and other builders that handle link clicks
themselves — clicking a booking button flashed the booking window open and
then sent the customer to a bare booking page, off your site entirely. The
booking window now stays put and the customer books without leaving you.
If you still embed with the older widget.js, switch to widget-dynamic.js to pick this up.
Editing a large group booking on mobile no longer blocks Save
Opening a large group booking in the mobile app's edit screen could leave
"Save changes" permanently disabled, with no explanation, so adding a note
meant removing guests from the booking first. The screen now reads the real
party size the slot allows, so notes and comments save normally and guests
can be added while seats remain.
Rescheduling a booking keeps each guest's passport and travel details
When you reschedule a booking, the passport numbers, dates of birth and
nationalities collected for each traveller now carry over to the new
booking's passenger manifest instead of silently disappearing.
Scanning a voucher shows the full party size
Scanning a booking's voucher in the mobile app now shows how many guests are on
the booking instead of always showing 1. The slot's checked-in count is also
correct now, so the occupancy figure on the availability screen reflects real
guests rather than scanned codes.
Discounts save correctly again, and public ones show up where they should
Editing a discount that had no expiry date failed with an error instead of
saving. Discounts marked "Public" now actually appear in your booking widget
and on your site, unticking every listing option removes the discount from
them, and cover images accept WebP files and reject anything over 4MB.
Booking pages no longer break when a customer has been deleted
Opening or managing a booking whose customer had been deleted used to crash the page. The booking now opens normally, shows "No customer found" in place of the deleted details, and you can still cancel, refund, or record a payment on it.
Billing now shows a single default card and lets you remove the rest
If you had saved two cards from the same bank that ended in the same four
digits, the billing page marked both as your default and hid the Remove
button on both, so you could not delete them or tell which card we would
charge. Now only your real default is marked, and every other card can be
removed.
Downgrading to a lower plan is no longer blocked for accounts with no revenue
Accounts that had not taken any bookings yet were unable to switch to a cheaper
plan — the downgrade button was greyed out and cancelling was the only option
left. Plan changes now compare your actual revenue against the plan's limit, so
a quiet account can move down a plan, and an account over a plan's revenue limit
is correctly stopped from moving onto it.
Google Things To Do listings now refresh when you change a product's capacity
Editing capacity on a product (not just on an individual schedule) now refreshes the product's Google Things To Do feed, so your listing no longer goes stale after a product-level capacity change. Separately, when a customer follows a captain's personal booking link and that captain is already taken, the widget now says "your guide is already booked" instead of "only N spots are left".
v27.1.0
Captainbook v27.1.0
New
Sell your tours on Viator
Your products, availability and pricing now sync to Viator, and bookings made on Viator flow back automatically. Mark a discount as "for Viator" to run channel-specific special offers.
Assign and switch booking resources from the CLI and MCP
You can now switch the main resource on a booking and assign or remove
auxiliary resources from the CLI and inventory MCP. Concurrent edits are
rejected when the booking’s resource state has changed since you last
read it, so you do not overwrite another operator’s assignment by accident.
Ask the AI assistant what your customers answered on a booking
Your customers' answers to your custom booking questions — dietary
requirements, pickup point, passport details — are now readable through the
Inventory MCP connection. Ask "what dietary requirements does booking 4291
have?" and get an answer instead of a dead end. Answers only ever come back
for one booking at a time, never in bulk.
Reservation managers can now create an Inventory connection, and every connection is limited to the data that person's role already lets them see.
Pay for your channel manager connections yearly instead of monthly
Your billing page now shows whether your channel manager connections are billed
monthly or yearly, when they next renew, and a link to switch to yearly. Before
anything is charged you see the exact prorated amount and the date it covers, and
you confirm it.
Format your triggered-notification emails and add links
You can now format a triggered notification's message body — bold, italic,
colour, lists — and insert links, using a toolbar in the editor. The preview
now shows the exact branded email your customer receives, so what you see is
what they get.
Filter the bookings feed by resource and see revenue for the selection
Filter the bookings feed by a primary or auxiliary resource. Each filter has a
searchable dropdown that shows up to 10 resources and searches as you type. While
a resource filter is active, a summary bar shows Total GMV and Net revenue for
exactly what's on screen, and your selection is saved in the URL so you can share
or reload the view.
Send Apple Wallet pass messages automatically from automated messages and workflows
You can now send a message to a customer's Apple Wallet pass automatically —
as a triggered Automated Message or a workflow "Send Notification" action —
instead of only sending it by hand from the booking. It goes to the booking's
customer, respects the once-per-booking-per-day limit, and quietly skips when
there is no installed pass.
Improved
Your translated product content now reaches OCTO resellers in their own language
Resellers connecting through our OCTO API now receive your product and supplier
content in the language they request, using the translations you added in the
dashboard. Anything not yet translated falls back to English, so nothing ever
comes back empty.
Inventory AI connections now follow the permissions of whoever created them
An Inventory connection now shows an AI assistant exactly what the person who
created it can see in Captainbook — no more, no less. If someone can't open the
Customers list in the web app, the assistant can't read customers either, and
prices and traveller contact details are withheld from roles that aren't allowed
to see them. Reservation managers can now create a read-only connection, which
previously wasn't possible at all.
Fixed
Sessions no longer offer to book more guests than they have seats for
The booking widget could show a Book button to a group larger than the seats
actually left on a session — a 12-seat trip with 9 guests booked still accepted
a party of 4. The calendar, the session list and the checkout now all use the
same remaining-seats figure, so a date greys out and the session reads
"Available to groups up to 3 guests" instead of taking a booking it cannot host.
Availability updates no longer fail to reach GetYourGuide when a slot has just started
GetYourGuide was rejecting a whole batch of availability updates whenever one
timeslot in it had already started in the product's local timezone, so the rest
of that batch never reached them. Operators outside UTC could see stale vacancies
on GetYourGuide until the next scheduled sync. Deleted timeslots are now also
withdrawn reliably for operators west of UTC.
Tour times sent to AI assistants and the API now show the correct local time
Departure and end times returned to Claude, ChatGPT and the API were
reported one hour early during British Summer Time (and any other period
when a product's timezone is ahead of UTC). They now carry the product's
own local offset, so a 10:00 tour reads as 10:00 wherever it is read.
Times shown in the operator dashboard were always correct and are
unchanged.
Booking links shared by a specific guide now keep that guide all the way through checkout
When a guide shared their own booking link and the customer took a while to pay,
the booking could quietly end up with a different guide. Those links now hold on
to the guide through the whole checkout, and if that guide is already booked for
the session the widget says so by name instead of failing with an unhelpful error.
Booking details now show which discount code was applied
The booking details page showed no sign that a discount had been applied, so a
price that looked wrong had no explanation. It now lists the discount code (or
codes) alongside the payment breakdown, including codes you have since deleted.
Resellers booking through the marketplace also get the discount amount back in
their booking payload.
Payment reminders now skip guests who have already paid
The reminder that asks a guest to pay any remaining balance before their
experience now checks the balance at the moment it is about to send, and
cancels itself if the booking has been paid in full in the meantime.
Previously a booking could still be reminded after it was fully paid.
Cancelled bookings now always free their seats back up
When several bookings on the same time slot were cancelled at the same moment,
the slot could keep counting some of them as still booked. The calendar showed
guests who were not coming, and connected channels like GetYourGuide were told
there were fewer seats left than there really were. Cancelled seats now always
return to the slot.
v27.0.0
Captainbook v27.0.0
New
Sell your tours on Viator
Your products, availability and pricing now sync to Viator, and bookings made on Viator flow back automatically. Mark a discount as "for Viator" to run channel-specific special offers.
Assign and switch booking resources from the CLI and MCP
You can now switch the main resource on a booking and assign or remove
auxiliary resources from the CLI and inventory MCP. Concurrent edits are
rejected when the booking’s resource state has changed since you last
read it, so you do not overwrite another operator’s assignment by accident.
Fixed
Sessions no longer offer to book more guests than they have seats for
The booking widget could show a Book button to a group larger than the seats
actually left on a session — a 12-seat trip with 9 guests booked still accepted
a party of 4. The calendar, the session list and the checkout now all use the
same remaining-seats figure, so a date greys out and the session reads
"Available to groups up to 3 guests" instead of taking a booking it cannot host.
Availability updates no longer fail to reach GetYourGuide when a slot has just started
GetYourGuide was rejecting a whole batch of availability updates whenever one
timeslot in it had already started in the product's local timezone, so the rest
of that batch never reached them. Operators outside UTC could see stale vacancies
on GetYourGuide until the next scheduled sync. Deleted timeslots are now also
withdrawn reliably for operators west of UTC.
v26.4.0
Captainbook v26.4.0
Improved
Search your brandings when creating a booking
The branding picker on the booking form is now searchable. Start typing to filter
your widget brands by name or sender, or use the arrow keys to move through the
list. If you only have a couple of brands nothing changes for you; if you have
dozens, you no longer have to scroll to find the right one.
Fixed
Discount codes no longer stack across different schedules of the same experience
When an experience had separate discount codes on separate schedules (say 20%
off mornings and 15% off sunsets), the "From" price added them together and
advertised 35% off — a price no booking could actually get. Each schedule now
shows the best discount a customer can really book on it, and checkout charges
the same figure the widget quotes.
Chat assistant no longer goes quiet when several messages arrive at once
When a visitor sent the AI assistant a second message while it was still
answering the first, that message could be dropped: the assistant showed
the "typing" dots indefinitely and never replied. Messages sent in quick
succession are now answered in order, and if something does go wrong the
assistant says so instead of leaving the visitor waiting.
Availability updates reach GetYourGuide again after a slot is overbooked
An overbooked or capacity-less time slot could stop a whole batch of
availability updates from reaching GetYourGuide, leaving your listings out
of date until the next successful sync. Those updates now go through, and
slots that are closed or fully booked correctly show as having no space
instead of advertising seats you would have had to refuse.
Tour-grade changes from Viator no longer fail on bookings with traveller questions
When Viator changed the tour grade on a booking that had traveller
information collected against it (passport numbers, dates of birth), the
amendment failed and the booking stayed on the old slot. It now goes
through, and the traveller answers carry over to the new departure when it
belongs to the same product.
Deleted timeslots are now withdrawn from GetYourGuide immediately
When you delete a timeslot, GetYourGuide is now told straight away that it is no
longer for sale. Previously the slot stayed bookable on GetYourGuide until their
next scheduled check, so travellers could still book a departure you had removed.
v26.3.0
Captainbook v26.3.0
Improved
Google Things to Do listings now show your auto-applied discount prices
Products in your Google Things to Do feed now advertise the discounted price
when a discount is set to apply automatically, instead of the full fare. The
price shown matches what the customer pays at checkout.
Fixed
The booking assistant now offers the soonest available dates instead of a date far in the future
When a guest asked about availability without naming a specific day, the
assistant could reply with a date several weeks out even though much earlier
dates were open — costing bookings. It now answers with the genuinely soonest
dates it can offer.
Booking buttons now work on React and single-page websites
Booking links on sites built with React, Next.js, or a page builder that
loads scripts through a tag manager could silently stop opening the booking
widget. A new version of the embed script fixes this and also handles links
that appear after the page has loaded, such as when a visitor navigates
between pages without a full reload. Existing embeds are untouched and keep
working exactly as before.
Subscribing no longer fails when your business phone number is long
Businesses whose phone number was written out in full (for example
"+31 (0) 6 12 34 56 78") could not start a subscription — the checkout
page errored before it ever reached the payment step. Long numbers are
now handled correctly and checkout completes as expected.
OTA and channel-manager bookings are no longer double-counted in your stats
Bookings coming from OTA and channel-manager connections (Viator, GetYourGuide,
OCTO) were counted twice in your booking statistics, so the OTA figure read about
double the real number. The count now reflects the exact number of bookings, and a
cancellation removes exactly one.
v25.18.0
Captainbook v25.18.0
New
Filter bookings by Agency Widget in the bookings feed
The Booking Channel filter on the bookings feed now lists your Agency
Widgets alongside your other widgets. You can select one to see only the
bookings that came through that agency widget — previously these bookings
had no filter option.
Fixed
Waitlist no longer errors when an entry's customer was deleted
The availability waitlist could show an error instead of loading when one of its
entries belonged to a customer who had since been deleted. It now shows the entry
with an "Unknown customer" label and loads normally.
Fix GetYourGuide booking imports that failed to complete
GetYourGuide booking imports could get stuck at the column-mapping step or
silently import zero bookings. Imports now map and save correctly, so you can
bring your GetYourGuide bookings into Captainbook end-to-end.
Email headers now show the correct logo
Some notification emails showed a broken image where the sender's logo should be. The header now renders the logo reliably as a standard PNG.
Fix billing page failing to load for some accounts
The billing page could fail to load for accounts whose SMS plan had more
than one price. It now loads reliably, and the SMS usage figure shows the
actual number of messages used instead of always showing zero.
Fix the product details map failing to load in the booking widget
The map showing where an experience takes place could fail to appear in the booking widget and log a JavaScript error. It now loads reliably.
v25.17.3
Captainbook v25.17.3
Fixed
Availabilities no longer show "fully booked" while seats are still available
Fixed a bug where booking a single spot on a shared time slot could mark the
whole slot as fully booked even though seats were still available. Shared slots
now reflect real availability again.
v25.17.2
Captainbook v25.17.2
Fixed
Booking confirmation emails no longer fail for some imported customers
Customers imported from FareHarbor (or created via the mobile app / automations)
with an unusual language value could silently miss their booking confirmation
email. Those emails now send reliably.
Uploading a HEIC photo no longer breaks the upload form
Picking a HEIC image (the default iPhone format) for an extra, logo, or gift/discount cover used to crash the page. The image is now rejected with a validation message instead, and any already-saved image stays visible.
Onboarding now builds your products from your website again
During onboarding we scan a supplier's website and pre-create their bookable
products. That scan was failing on every run and falling back to a single
generic product. It now reads the website and its linked pages correctly, so
new suppliers start with products drawn from their own site.
v25.17.1
Captainbook v25.17.1
Fixed
Fix error when opening a day on the monthly calendar
Tapping a day in the monthly calendar could fail to load the list of time slots when the experience had a photo. It now opens reliably.
v25.17.0
Captainbook v25.17.0
Fixed
Apple and Google Wallet passes are issued again for new bookings
Wallet passes stopped generating for new bookings after an internal library
upgrade, so the "Add to Apple/Google Wallet" link showed nothing. Passes are
now issued correctly again, and an operator command can re-issue any that were
missed during the outage.




