1. Approval Links
YGO Client API
v2
  • v2
  • v1
  • Project API
    • Overview
    • Core Concepts
    • Authentication
    • Error Handling & Limits
    • Content Enrichment API
      • Text Generation
        • Generate text
        • Get text generation status
        • Preview text
      • Enrichment
        • Get enriched hotel
        • List enriched hotels
        • List enriched hotel summaries
      • Templates
        • Save text template
        • List text templates
      • Tags
        • Save tag
        • List tags
        • Delete tag
        • Add tag to hotels (bulk)
        • Remove tag from hotels (bulk)
      • Image Pins
        • Delete hotel image pin
        • Save hotel image pin
      • Settings
        • Get content settings
      • Approval Links
        • Create approval links (bulk)
          POST
        • Export approved hotel text with image URLs
          POST
        • List approval links
          POST
        • Revoke approval link
          POST
        • Rotate approval link
          POST
      • Vision AI
        • Ingest vision images
        • Get vision images
        • List vision images
    • Schemas
      • GetEnrichedHotelRequest
      • GenerateTextRequest
      • GetTextGenerationStatusRequest
      • PreviewTextRequest
      • GetEnrichedHotelsByTagRequest
      • ListEnrichedHotelsRequest
      • GetContentSettingsRequest
      • ListTextTemplatesRequest
      • SaveTextTemplateRequest
      • generateText_GenerateTextRequest
      • createApprovalLinks_CreateApprovalLinksRequest
      • GetEnrichedHotelResponse
      • GenerateTextResponse
      • GetTextGenerationStatusResponse
      • PreviewTextResponse
      • GetEnrichedHotelsByTagResponse
      • ListEnrichedHotelsResponse
      • GetContentSettingsResponse
      • ListTextTemplatesResponse
      • SaveTextTemplateResponse
      • generateText_GenerateTextResponse
      • createApprovalLinks_CreateApprovalLinksResponse
      • TextGenerationRun
      • TextGenerationStatus
      • PreviewResult
      • EnrichedHotelsByTag
      • Pagination
      • ContentSettings
      • TextTemplate
      • generateText_TextGenerationRun
      • createApprovalLinks_ApprovalLink
      • ErrorResponse
      • RunProgress
      • PreviewHotel
      • TagSummary
      • EnrichedHotelListItem
      • generateText_RunProgress
      • createApprovalLinks_ApprovalApprover
      • EnrichedHotel
      • ErrorDetail
      • PreviewCell
      • TemplateUsageStats
      • generateText_ErrorResponse
      • createApprovalLinks_ErrorResponse
      • Location
      • FieldError
      • PreviewChange
      • generateText_ErrorDetail
      • createApprovalLinks_ErrorDetail
      • Address
      • createApprovalLinks_FieldError
      • FactualAttribute
      • getTextGenerationStatus_GetTextGenerationStatusRequest
      • exportApprovedHotelText_ExportApprovedHotelTextRequest
      • FactualInstance
      • getTextGenerationStatus_GetTextGenerationStatusResponse
      • exportApprovedHotelText_ApprovedHotelTextFile
      • POI
      • getTextGenerationStatus_TextGenerationStatus
      • exportApprovedHotelText_ErrorResponse
      • CheckIn
      • getTextGenerationStatus_RunProgress
      • exportApprovedHotelText_ErrorDetail
      • CheckOut
      • getTextGenerationStatus_ErrorResponse
      • exportApprovedHotelText_FieldError
      • GeneratedTexts
      • getTextGenerationStatus_ErrorDetail
      • listApprovals_ListApprovalsRequest
      • GeneratedTextDetail
      • listApprovals_ListApprovalsResponse
      • Image
      • previewText_PreviewTextRequest
      • listApprovals_Pagination
      • EnrichedRoom
      • previewText_PreviewTextResponse
      • listApprovals_ApprovalLink
      • Bedding
      • previewText_PreviewResult
      • listApprovals_ApprovalApprover
      • previewText_PreviewHotel
      • listApprovals_ErrorResponse
      • previewText_PreviewText
      • listApprovals_ErrorDetail
      • previewText_PreviewChange
      • listApprovals_FieldError
      • previewText_ErrorResponse
      • revokeApprovalLink_RevokeApprovalLinkRequest
      • previewText_ErrorDetail
      • revokeApprovalLink_RevokeApprovalLinkResponse
      • revokeApprovalLink_ApprovalLink
      • revokeApprovalLink_ApprovalApprover
      • getEnrichedHotel_GetEnrichedHotelResponse
      • revokeApprovalLink_ErrorResponse
      • revokeApprovalLink_ErrorDetail
      • getEnrichedHotel_ProjectTagSummary
      • revokeApprovalLink_FieldError
      • getEnrichedHotel_Location
      • rotateApprovalLink_RotateApprovalLinkRequest
      • rotateApprovalLink_RotateApprovalLinkResponse
      • rotateApprovalLink_ApprovalLink
      • rotateApprovalLink_ApprovalApprover
      • getEnrichedHotel_POI
      • rotateApprovalLink_ErrorResponse
      • getEnrichedHotel_CheckIn
      • rotateApprovalLink_ErrorDetail
      • getEnrichedHotel_CheckOut
      • rotateApprovalLink_FieldError
      • getEnrichedHotel_GeneratedTexts
      • getEnrichedHotel_GeneratedTextDetail
      • getEnrichedHotel_Compliance
      • getEnrichedHotel_ProviderVariant
      • generateText_FieldError
      • getEnrichedHotel_Bedding
      • getEnrichedHotel_ErrorResponse
      • getEnrichedHotel_ErrorDetail
      • listEnrichedHotelSummaries_ListEnrichedHotelSummariesRequest
      • listEnrichedHotels_EnrichedHotelListItem
      • listEnrichedHotelSummaries_ListEnrichedHotelSummariesResponse
      • listEnrichedHotelSummaries_Pagination
      • getTextGenerationStatus_FieldError
      • listEnrichedHotelSummaries_ErrorResponse
      • listEnrichedHotelSummaries_ErrorDetail
      • listEnrichedHotels_ListEnrichedHotelsResponse
      • listEnrichedHotels_Pagination
      • listEnrichedHotels_ProjectTagSummary
      • previewText_FieldError
      • listEnrichedHotels_Location
      • getEnrichedHotel_GetEnrichedHotelRequest
      • getEnrichedHotel_EnrichedHotel
      • listEnrichedHotels_POI
      • listEnrichedHotels_CheckIn
      • getEnrichedHotel_Address
      • listEnrichedHotels_CheckOut
      • listEnrichedHotels_GeneratedTexts
      • getEnrichedHotel_FactualAttribute
      • listEnrichedHotels_GeneratedTextDetail
      • getEnrichedHotel_FactualInstance
      • listEnrichedHotels_Compliance
      • listEnrichedHotels_ProviderVariant
      • listEnrichedHotels_Bedding
      • listEnrichedHotels_ErrorResponse
      • listEnrichedHotels_ErrorDetail
      • getEnrichedHotel_DetectionConfidence
      • getEnrichedHotel_PresenceDetection
      • deleteHotelImagePin_DeleteHotelImagePinRequest
      • getEnrichedHotel_TextDetection
      • deleteHotelImagePin_DeleteHotelImagePinResponse
      • getEnrichedHotel_FeatureDetection
      • getEnrichedHotel_Image
      • deleteHotelImagePin_ClearedHotelImagePin
      • getEnrichedHotel_EnrichedRoom
      • deleteHotelImagePin_ErrorResponse
      • deleteHotelImagePin_ErrorDetail
      • saveHotelImagePin_SaveHotelImagePinRequest
      • getEnrichedHotel_FieldError
      • saveHotelImagePin_SaveHotelImagePinResponse
      • saveHotelImagePin_HotelImagePin
      • saveHotelImagePin_ErrorResponse
      • saveHotelImagePin_ErrorDetail
      • listEnrichedHotelSummaries_EnrichedHotelSummary
      • getContentSettings_GetContentSettingsRequest
      • getContentSettings_GetContentSettingsResponse
      • getContentSettings_ContentSettings
      • listEnrichedHotelSummaries_FieldError
      • listEnrichedHotels_ListEnrichedHotelsRequest
      • getContentSettings_ErrorResponse
      • getContentSettings_ErrorDetail
      • listEnrichedHotels_EnrichedHotel
      • listImageProvidersProject_ListImageProvidersRequest
      • listImageProvidersProject_ListImageProvidersResponse
      • listImageProvidersProject_ImageProviderCatalog
      • listEnrichedHotels_Address
      • listImageProvidersProject_ImageProviderCatalogEntry
      • listEnrichedHotels_FactualAttribute
      • listImageProvidersProject_ErrorResponse
      • listEnrichedHotels_FactualInstance
      • listImageProvidersProject_ErrorDetail
      • addTagToHotels_AddTagToHotelsRequest
      • addTagToHotels_AddTagToHotelsResponse
      • addTagToHotels_BulkTagResult
      • addTagToHotels_BulkTagHotelResult
      • addTagToHotels_ErrorResponse
      • addTagToHotels_ErrorDetail
      • listEnrichedHotels_DetectionConfidence
      • listEnrichedHotels_PresenceDetection
      • deleteTag_DeleteTagRequest
      • listEnrichedHotels_TextDetection
      • deleteTag_DeleteTagResponse
      • listEnrichedHotels_FeatureDetection
      • listEnrichedHotels_Image
      • deleteTag_DeletedProjectTag
      • listEnrichedHotels_EnrichedRoom
      • deleteTag_ErrorResponse
      • deleteTag_ErrorDetail
      • listTags_ListTagsRequest
      • listEnrichedHotels_FieldError
      • listTags_ListTagsResponse
      • listTags_ProjectTag
      • listTags_ErrorResponse
      • listTags_ErrorDetail
      • removeTagFromHotels_RemoveTagFromHotelsRequest
      • removeTagFromHotels_RemoveTagFromHotelsResponse
      • deleteHotelImagePin_FieldError
      • removeTagFromHotels_BulkTagResult
      • removeTagFromHotels_BulkTagHotelResult
      • removeTagFromHotels_ErrorResponse
      • removeTagFromHotels_ErrorDetail
      • saveTag_SaveTagRequest
      • saveHotelImagePin_FieldError
      • saveTag_SaveTagResponse
      • saveTag_ProjectTag
      • saveTag_ErrorResponse
      • saveTag_ErrorDetail
      • getContentSettings_FieldError
      • listTextTemplates_ListTextTemplatesRequest
      • listTextTemplates_ListTextTemplatesResponse
      • listTextTemplates_Pagination
      • listTextTemplates_TextTemplate
      • listTextTemplates_TemplateUsageStats
      • listTextTemplates_ErrorResponse
      • listTextTemplates_ErrorDetail
      • listImageProvidersProject_FieldError
      • saveTextTemplate_SaveTextTemplateResponse
      • saveTextTemplate_TextTemplate
      • saveTextTemplate_ErrorResponse
      • saveTextTemplate_ErrorDetail
      • addTagToHotels_FieldError
      • deleteTag_FieldError
      • listTags_FieldError
      • removeTagFromHotels_FieldError
      • saveTag_FieldError
      • listTextTemplates_FieldError
      • saveTextTemplate_SaveTextTemplateRequest
      • saveTextTemplate_FieldError
      • getVisionImages_GetVisionImagesRequest
      • getVisionImages_GetVisionImagesResponse
      • getVisionImages_GetVisionImagesResult
      • getVisionImages_VisionImageState
      • getVisionImages_Image
      • getVisionImages_Compliance
      • getVisionImages_DetectionConfidence
      • getVisionImages_PresenceDetection
      • getVisionImages_TextDetection
      • getVisionImages_FeatureDetection
      • getVisionImages_ErrorResponse
      • getVisionImages_ErrorDetail
      • getVisionImages_FieldError
      • ingestVisionImages_IngestVisionImagesRequest
      • ingestVisionImages_VisionImageSubmission
      • ingestVisionImages_IngestVisionImagesResponse
      • ingestVisionImages_IngestVisionImagesResult
      • ingestVisionImages_IngestedImage
      • ingestVisionImages_ErrorResponse
      • ingestVisionImages_ErrorDetail
      • ingestVisionImages_FieldError
      • listVisionImages_ListVisionImagesRequest
      • listVisionImages_ListVisionImagesResponse
      • listVisionImages_Pagination
      • listVisionImages_ListVisionImage
      • listVisionImages_Image
      • listVisionImages_Compliance
      • listVisionImages_DetectionConfidence
      • listVisionImages_PresenceDetection
      • listVisionImages_TextDetection
      • listVisionImages_FeatureDetection
      • listVisionImages_ErrorResponse
      • listVisionImages_ErrorDetail
      • listVisionImages_FieldError
  1. Approval Links

Export approved hotel text with image URLs

POST
/v2/project/content/exportApprovedHotelText
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.
Headers

Bodytext/plain

🟠400exportApprovedHotelText_BadRequest
🟠401exportApprovedHotelText_Unauthorized
🟠403exportApprovedHotelText_Forbidden
🟠404exportApprovedHotelText_NotFound
🟠409exportApprovedHotelText_Conflict
🟠429exportApprovedHotelText_TooManyRequests
🔴500exportApprovedHotelText_InternalServerError
Request Request Example
Shell
JavaScript
Java
Swift
curl --location 'https://api.ygo.ai/v2/project/content/exportApprovedHotelText' \
--header 'X-Project-ID: ' \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
    "HotelID": "019f412f-c41c-746e-b569-e6454677366c"
}'
Response Response Example
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.jpg
2. https://images.ygo.ai/hotels/019f412f-c41c-746e-b569-e6454677366c/b71d04e2.jpg
3. https://images.ygo.ai/hotels/019f412f-c41c-746e-b569-e6454677366c/9c4e61aa.jpg
--- END IMAGE URLS ---
Modified at 2026-09-14 07:07:50
Previous
Create approval links (bulk)
Next
List approval links
Built with