ATIA AI Take-Home Kit › Pain 3 · Coordinating the trip

Advanced rung · Tool 3.c

An agent-ready trip record

AI agents are starting to shop for travelers. To place a high-consideration Alaska trip, an agent needs your live availability and a hold it can undo. For a six-person operator, this rung is one question to your booking platform, not a build. For a larger operator or for ATIA, it is a build and a policy decision. This page has the question, the policy checklist, a trip-record checker and a working scaffold for a developer.

The pain it fixes

For the traveler

39% of US travelers find coordinating the different parts of a trip frustrating. In the report's diary study, the worst moments came at the handoffs between platforms: every new site or app starts from zero.

A trip record keeps the minimum trip state in one structured place: the party (as counts and age bands, never names), dates, budget band, preferences, the short list, rejected options with the reason, holds and open questions. The next visit, or the next AI agent, starts closer to a decision.

For your business

Agents already book hotels. Google's AI Mode began booking US hotels on August 27, 2026, through large online travel agencies and chains; independents were not on the launch list. The checkout layer agents use is being built now, and whether you are reachable through it is being decided now, often by your platform, possibly by default.

An agent that cannot place a reversible hold will not put a family's four seats on hold while they think it over. It books something it can hold.

Agents hold and ask. People confirm. 74% of US travelers still prefer to make the final booking themselves rather than through an AI, and only 16% used an AI tool to book anything. A hold that expires on its own, plus a person who confirms, fits how travelers buy today.

Skift Research + McKinsey, Sept 2026, n = 1,015 US travelers (data as of June 2026); US travelers, not Alaska visitors. Google AI Mode: see Sources.

Which one are you?

A small operator (about six people)

One question, not a build. Send your booking platform (FareHarbor, Peek, Checkfront, Cloudbeds, Rezdy or similar) the question below. Get the answer in writing. Share it with ATIA so members can compare.

About 15 minutes. Free.

Being bookable by an agent today usually means being in a network and paying its commission. That is a margin decision, not a technology decision. (Presenter's read.)

Go to the question

A larger operator, a group of members, or ATIA

A build and a policy decision. Decide the four hold policies first. Then a developer connects your platform's API to an MCP server (the open protocol Claude, ChatGPT and Gemini agents use to call outside tools). The scaffold on this page shows the rules working on fictional data.

Months, mostly platform integration, hold-expiry rules and policy, not code. Developer or vendor time. Estimates.

Go to the policy checklist

The question for your booking platform

Copy it as is, or build the email below. Ask for the answer in writing.

The question

Does your platform expose (1) live availability through an API, (2) time-limited, reversible holds that expire automatically, and (3) confirmation and cancellation through the same API? Are you participating in any agent checkout protocol, such as Google's Universal Commerce Protocol? If yes, what do I have to switch on, and what does it cost? If no, is it on your roadmap, and when? Please answer in writing so I can share it with our association.

Make it an email

Add follow-up questions (optional)

Your email


      

Read the answer

They sayWhat it meansYour next step
Yes to all three, and an agent protocol you can switch onAgents can find you, hold and request confirmation through your platformGet the cost and commission in writing. Set the four policies below before you switch it on.
Live availability yes, holds noAgents can see you but cannot hold. They will hold somewhere else.Ask for holds on the roadmap, with a date. Tell ATIA.
Not yet, on the roadmapCommon in 2026Get the date in writing. Ask again next quarter.
No APIAgents cannot reach you through this platformWeigh it at your next platform renewal. Contractual check your contract term and exit terms.
Log the answer to share with ATIA

Stays in this browser until you copy or save it. Business facts only; no guest data.

Summary

Policy before code

Before anyone writes code, decide four things: who may place a hold, how long it lasts, what happens to inventory while it is held, and how a person steps in. The survey asked travelers what would make them more confident letting AI book. Their answers are the design spec.

52%

Review and change before confirming.Holds that are reversible and expire. Decisions 1 and 2.

30%

A track record.The seats they reviewed are still there; you publish how holds work. Decision 3.

20%

A human who can step in.A person confirms every agent booking. Decision 4.

Skift Research + McKinsey, Sept 2026, Exhibit 9, n = 1,015 US travelers.

1. Who may place a hold? Policy choice
2. How long does a hold last? Policy choice
3. What happens to inventory while it is held? Policy choice

Contractual Check parity, allotment and cancellation terms in your booking platform terms and each OTA or reseller agreement.

4. How does a person step in? Policy choice

Your hold policy


    

Trip record checker

A trip record is a small JSON file an agent and your staff can both read. Paste one to check it against the schema. The page checks three things: the schema rules, anything that looks like personal data, and rules the schema cannot express (age bands add up, dates in order, holds that have expired). These are the same checks as validate_record.py and the MCP server's put_trip_record.

Fictional or de-identified records only. Never paste guest names, emails, phone numbers, card numbers, ID numbers or health details. The check runs in this browser; nothing is sent or saved.

What is in a trip record
  • party: a count and age bands (for example 6-7 and 8-9), because minimum ages decide what fits. Never names or birth dates.
  • dates, budget_band (a band, never a card) and preferences.
  • shortlisted: options still in play, each with a reason that cites approved fact ids (from your 1.a fact sheet).
  • rejected: options set aside with the reason, so nobody offers them again.
  • holds: reversible holds with expires_at and status.
  • open_questions: gaps stay questions, for the owner, a partner, staff or the traveler. Nobody fills them with a guess.
  • consent: what the traveler agreed to. agent_may_confirm is always false: a person confirms.
  • version and updated_at, so two agents cannot overwrite each other.

The example is the fictional family from 3.a: July 14 to 16, two adults and two children aged 6 and 9. The 3.a trip kit is the first draft of this record.

The build: for a larger operator or ATIA

The flow an agent follows, and the confidence driver each step serves:

  1. Search products and live availability. Facts cite ids. No invented prices.
  2. Hold seats. The hold expires on its own. Review and change (52%)
  3. Review and change with the traveler: release and hold again. Review and change (52%)
  4. Request confirmation. Nothing is booked yet. A human who can step in (20%)
  5. A person confirms or declines, before the hold expires. Track record (30%): every call logged

Build brief for a developer or a coding agent

For Claude Code, OpenAI Codex or Gemini CLI, or for your platform vendor. Builds on the Prompt Kit brief.

Build brief

Design a minimum viable trip record and an MCP server over the [BOOKING PLATFORM] API.

Trip record (JSON Schema 2020-12, closed to unknown fields): party as a count and age bands (no names), dates, budget band, preferences, short-listed options with a reason that cites approved fact ids, rejected options with the reason, holds, open questions, consent, version and updated_at. No names, contact details, payment data, ID numbers or health details anywhere in the record. Reject free text that looks like an email, phone, card or ID number.

MCP tools: search_products; check_availability(product, date, party); place_hold(product, date, departure, seats) returning a hold id and expires_at (24 hours by default, configurable, and never past the free-cancellation cutoff); get_hold; release_hold; request_confirmation(hold id), which creates a pending confirmation for a person at the business and never confirms by itself; get_trip_record; put_trip_record, validated against the schema with a version check.

Rules: every hold expires on the platform even if the caller disappears. Held seats count against capacity. Limit active holds, seats per hold and new holds per day for each caller so an agent cannot create phantom inventory. Take the caller identity from authentication, never from a tool argument. Log every tool call. Serve on localhost only until authentication and HTTPS are in place.

Tests: a scripted agent runs search, hold, review, change (release and re-hold) and request confirmation; a hold expires with a 2-second TTL; the per-caller limit blocks phantom inventory; a record with personal data is rejected and nothing is saved.

Document what a Claude, ChatGPT or Gemini agent needs to connect, and what a person at the business sees when a hold is placed and when confirmation is requested. Mark generated documents DRAFT - PENDING OWNER REVIEW.

Reference scaffold with fictional data: https://preig.github.io/atiakit/3c/trip-record-mcp.zip

The reference scaffold

A small Python MCP server over a mock SQLite inventory for the fictional Bay Light Day Cruises (9:00 and 14:00 departures, capacity 40) and two fictional partners. It runs on your computer with no keys and no internet, and works with Claude Desktop, Claude Code, Gemini CLI and other local MCP clients. The business rules need only the Python standard library, so the tests run without the MCP package.

Tool the agent seesWhat it doesGuard rail
search_productsProducts, facts with ids, minimum ages, seats freeNo prices: they are not in the approved facts
check_availabilitySeats free per departureHeld seats count against capacity
place_holdReversible hold with hold_id and expires_atExpires after 24 h (configurable) or at the cutoff; per-caller limits; minimum age checked
get_hold, release_holdStatus; give seats backCallers see only their own holds
request_confirmationAsk a person to confirmPending only. There is no confirm tool for agents.
get_trip_record, put_trip_recordRead and save the trip recordSchema check, personal-data scan, version check

What a person at the business sees

> python admin.py pending
Holds waiting for a person (FICTIONAL MOCK DATA). Confirm or decline before they expire.

confirmation_id  hold_id       product_id    date        departure  seats  minutes_left  record_id     note
---------------  ------------  ------------  ----------  ---------  -----  ------------  ------------  ------------------------------------------
C-UPDZHWDDBF     H-JXVKXXCUTW  BL-CRUISE-4H  2027-07-15  09:00      4      1439          TR-DEMO-0714  Reviewed with the traveler. Mornings only.

> python admin.py confirm C-UPDZHWDDBF --by KR
C-UPDZHWDDBF confirmed by KR (hold H-JXVKXXCUTW).
Mock only. In a real system, create the booking in your booking platform now; it takes payment in its own checkout.

Try it

Unzip trip-record-mcp.zip, open a terminal in the folder and type (on a Mac, python3):

python demo.py

To connect a real client, the README walks you through pip install -r requirements.txt, python server.py --dry-run and the settings for Claude Desktop, Claude Code and Gemini CLI.

No authentication. Run the scaffold on your own computer only. It refuses to serve anything but 127.0.0.1. Never put it on the internet or a shared network: anyone who can reach it can place and release holds. Recommendation ChatGPT and Claude on the web need a remote server with HTTPS and sign-in, which is a developer job and out of scope here.

Downloads

How you will know it worked

Before you use it

AI drafts. You approve. An agent can search, hold and ask. A person at the business confirms every booking. A model checking its own work is not verification.

Where this rung sits

This is the top rung of Pain 3. It builds on 3.a The AI trip kit (the kit is the first draft of the trip record) and 3.b A partner circle with shared facts (shared facts with owners become the fact ids a record cites). Skip those and an agent has nothing reliable to read.

Back to all nine tools

Sources