OpenAI’s Hotel feed documentation now describes a public Ads API path from property queries to campaigns and previews. Access remains a limited beta for approved pilot advertisers—not an open beta or general launch. For implementation teams, the key change is a clearer way to test the handoff without mistaking a query result for an ad ready to serve.
What changed—and what did not
GPTAd identified these documentation additions on October 30, 2026, against its October 29 check. That is our observation date, not an announced rollout date. The Hotel guide adds inventory listing, item queries, Hotel Set filters, campaign creation and native previews; related API references now explain Hotel-specific restrictions.
The current Hotel campaign supports the Clicks objective, manual CPC bidding and audience targeting across the entire United States. Narrower locations, geographic exclusions and restrictive platform targeting are not supported. Omitting Hotel targeting selects the United States. This update does not establish Hotel-ad availability for audiences in Vietnam.
Use three separate acceptance checks
1. Ingestion: a transferred file is not proof that its rows were accepted. Check Upload History and diagnostics. Hotel data uses hotel_property_v1: one property per row, not a room or dated offer. The documented contract covers full snapshots, not Hotel Delta API updates or live stay-date availability.
2. Selection: POST /v1/feeds/{feed_id}/items/query inspects current eligible items matching your filters, but does not require review approval. Save the same filters in feed_set.filters when creating the ad group. Treat these as property selection, not audience geography. An item appearing here is not proof it qualifies for preview or delivery.
3. Preview: POST /v1/ads/{ad_id}/preview chooses a property from the saved Hotel Set. The property must also be active and review-approved. A missing qualifying property can produce HTTP 422 even when the item query returns records. You cannot override the property ID or filters in the preview request.
Keep the Hotel and Product contracts separate
The campaign selects inventory through feed_selection with inventory_type set to hotel and schema_profile set to hotel_property_v1; omit legacy mode and product_feed_id. The ad group uses feed_set, not product_set, and fixed_bid with click billing. Each group has one template ad. Its image and destination come from the selected property rather than separate creative.file_id and creative.target_url values.
A useful preflight record should capture the feed ID, saved filters, returned item IDs, review status and preview creation time. When listing feeds or uploads, explicitly request inventory_type=hotel: omission defaults to Product inventory. For paginated item queries, retain the filters and pass last_id as after when has_more is true.
Handle previews as private, temporary evidence
The preview response supplies iframe HTML in data[0].body. A submitted paused ad can be previewed; a draft-only ad cannot. The signed link can be opened without signing in and expires 24 hours after snapshot creation. Repeating a request may reuse the snapshot rather than extend its lifetime, so keep the link private and request a fresh preview after changing feed or ad data.
A Hotel card can show a static starting price and guest rating. Neither proves room availability for particular dates, and property stars are not guest review scores. A preview also does not guarantee delivery; active status still leaves account readiness, review and other serving checks in place.
Our recommendation: make ingestion, selection and preview separate approval gates before a pilot launch. Teams without approved Hotel access can prepare a data-quality checklist, but should not promise clients access, targeting options or a launch date.
GPTAd is independent of OpenAI. This is an implementation analysis of published documentation, not confirmation that a particular account is eligible.
References
OpenAI: Hotel property feeds (limited beta)
OpenAI: Campaigns API reference



