Download one hotel's approved catalog text, followed by the image URLs its approval page serves, as a .txt file. The response body is the file itself (text/plain; charset=utf-8), not a JSON envelope, and the Content-Disposition header carries one ASCII name: hotel slug, locale, approval date. The file contains the generated texts the hotel's approval page served in the project's default locale, verbatim and in page order, under a framed metadata block that no layout would mistake for copy, then the served image URLs in gallery order in a block of their own. A hotel that has not approved is refused with 409 NOT_APPROVED, and so is a hotel whose text was regenerated after its approval: what leaves is byte for byte the approved text, never the live text. When the project's Content.ApprovalTextKeys setting lists template keys, only texts with a listed key are exported, rule texts included. The call writes nothing to the approval tables and, like the approval page, neither reads nor writes the shared enriched-hotel cache.The file is REFUSED with 500 INTERNAL_ERROR when any read it certifies fails, rather than served with the missing part silently absent. A 500 also answers one INVARIANT violation: an approval row marked approved that carries no approval time ("Approval record has no approval time"). The file's Approved: line and its download name are both built from that timestamp, so the export refuses rather than invent a date. It is corrupt data rather than a client state, which is why it is a 500 and not a 409, and no request can cause or clear it. The reads are: the hotel's generated texts (message "Failed to load hotel texts"); and, all under "Failed to load the hotel's images and identifiers", the pinned image, the project master code, the provider registry, the per-image ownership check, the hotel's room list, a room's image rows, the hotel's own image rows, the image fingerprints those rows point at, and the crop groups that collapse near-duplicate images. Each of these would otherwise change the file silently — a missing master code simply omits the ProductID line, a missing fingerprint read leaves every image without the category the gallery rule sorts on — so one approval could yield two different files on either side of a transient error. The hotel's own approval page keeps rendering through the image and identifier reads, because it displays rather than certifies. The generated-texts read is the exception: the approval page and the hotel's own approve refuse with the same 500 rather than show, or record consent to, a half-rendered page. Nothing is wrong with the hotel's text or its approval in that case: download again once the failing read recovers.
Request
Authorization
Bearer Token
Provide your bearer token in the
Authorization
header when making requests to protected resources.
Example:
Authorization: Bearer ********************
or
Header Params
Body Params application/jsonRequired
Examples
Responses
🟢200
text/plain
The approved catalog text file, with the served image URLs. The body is the file itself, not a JSON envelope.
200 - The approved text in the project's default locale, then the served image URLs
==================================================================
APPROVED CATALOG TEXT - METADATA (not part of the text, do not paste)
Hotel: Neptune Luxury Resort
GIATA:741
ProductID: NEP-KOS-01
Locale: de-DE
Approved:2026-08-27T13:50:10Z by Ayşe Yılmaz
Text version:2026-08-19T14:15:29Z
Images:3
AI notice: This text is AI-generated (EU AI Act Art. 50(2))
==================================================================
--- BEGIN APPROVED TEXT ---
[Summary]
Neptune Luxury Resort ist ein **5-Sterne-Resort in Familienbesitz direkt am Strand**, das sich in Mastichari auf der Insel Kos befindet. Die 1989 gegründete Unterkunft liegt inmitten weitläufig angelegter Themengärten direkt an einem privaten, abgelegenen Sandstrand.
[Highlights]
- Privater Sandstrand in ruhiger Lage
- Weitläufig angelegte Themengärten
- Außergewöhnliche Sauberkeit in der gesamten Anlage
[GuestPolicies]
Check-in ab 15:00 Uhr, Check-out bis 11:00 Uhr. Haustiere sind nicht gestattet.
--- END APPROVED TEXT ---
--- BEGIN IMAGE URLS (gallery order, as served on the approval page) ---
1. https://images.ygo.ai/hotels/019f412f-c41c-746e-b569-e6454677366c/3f9a2c7e.jpg2. https://images.ygo.ai/hotels/019f412f-c41c-746e-b569-e6454677366c/b71d04e2.jpg3. https://images.ygo.ai/hotels/019f412f-c41c-746e-b569-e6454677366c/9c4e61aa.jpg
--- END IMAGE URLS ---