1. Project API
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)
        • Export approved hotel text with image URLs
        • List approval links
        • Revoke approval link
        • Rotate approval link
      • 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. Project API

Content Enrichment API

The Content Enrichment API delivers rich, ready-to-use hotel content -- structured details, localized marketing texts, imagery, and more -- through a single, consistent interface. Your hotels arrive already enriched and accurate, so you can put high-quality content in front of travelers without building and maintaining your own content operation.

What You Can Do#

The API gives you four things: read your enriched hotels, manage the templates that shape your marketing texts, generate that text on demand, and run our image analysis over imagery of your own.

Get Enriched Hotels#

Retrieve your enriched hotel content whenever you need it. Fetch a single hotel with getEnrichedHotel, page through your full set with listEnrichedHotels, and each hotel arrives ready to render, with its structured details, localized texts, and imagery.
Identify hotels your way
Request side: look a hotel up by the ExternalHotelID selector using productid (the hotel's id in your own product system, the identifier you use internally) or giata, with no pre-mapping to our ids needed. Our direct selectors HotelID and GlobalHotelID stay available whenever you already hold them.
Fetch your whole set at once: both list endpoints accept an ExternalHotelIDs filter, a list of selector groups that is resolved to the matching hotels, so you can pull exactly your set of hotels by your own codes in one call.
Response side: every hotel carries our identifiers ID and GlobalHotelID plus the ExternalHotelIDs map of external ids as strings, today "ProductID" (the hotel's id in your own product system, the identifier you use internally, stored per project when a mapping exists) and "Giata" (when the hotel has one). The map is extensible, so read the keys you need and ignore the rest.
Query by ExternalHotelID and receive ExternalHotelIDs, the same concept in both directions.
Use getContentSettings to read your project's content configuration, such as the locales available to you, so your integration always knows what to expect.

Manage Text Templates#

Your marketing texts are produced from templates that you control. Use listTextTemplates to see your current templates and saveTextTemplate to create or update one. Templates let you shape tone, structure, and emphasis so generated descriptions match your brand and surface the details that matter to your audience.

Analyze Your Own Images#

Send us image URLs and receive the same analysis our enriched galleries carry, including accessibility alt text in your locales, without ingesting a hotel catalogue first. See the Vision AI page for the submit and poll flow.

Generate Text#

Produce localized marketing text from your templates in two ways.
Generate asynchronously -- Call generateText to start a generation job. It returns immediately with an id, and you poll getTextGenerationStatus with that id until the job is done. This pattern keeps long-running generation off your request path and scales cleanly across many hotels.
Preview synchronously -- Call previewText to generate and return text in a single request. Use it to review the output of a template before you commit to a full generation run.
TIP
Preview, then generate
Use previewText to iterate on a template and confirm the result reads the way you want. Once you are satisfied, run generateText to apply it at scale.

How Content Enrichment Works#

Behind each hotel is a body of work you do not have to build or maintain. Here is what shapes the content you receive.
Verified, reconciled facts. Hotel details are gathered from multiple independent sources and reconciled with trust weighting, so conflicting claims are resolved instead of copied through. The result is accuracy you can put in front of travelers.
Understood imagery. Every image is analyzed and categorized (pool, room, dining, and more), tagged with visible features and mood, scored for appeal, de-duplicated, and captioned. Galleries arrive curated and orderable rather than as a raw photo dump, and the same analysis is available on demand for imagery of your own through the Vision AI endpoints.
Structured, normalized attributes. Facts land in a consistent ontology with stable keys and industry GlobalTypes codes (GTCodes), including free-of-charge qualifiers (IsFree), so your integration filters and renders without per-hotel special cases.
Localized texts on your terms. Marketing texts are generated per locale from templates you control and are grounded in the hotel's verified attributes, so the tone stays yours and every claim matches the facts.
Continuous quality assurance. Enriched content passes automated quality checks before it is served.

AI-Generated Content Marking#

Every piece of AI-generated content we serve is marked in a machine-readable way with the same Compliance envelope, on each generated text cell and on every image. Alongside its Text, each entry in GeneratedTexts (hotel-level and per-room) carries the envelope, and each entry in Images carries the identical one.
This satisfies Article 50(2) of the EU AI Act, which requires synthetic text to be machine-readably marked as AI-generated, so key your own traveler-facing disclosure off this flag. Texts are fully AI-written, while for images the AI-generated layer is the classification and captions we add on top of real provider photography.
INFO
Read the envelope defensively
Compliance is deliberately an object rather than a bare AIGenerated boolean, because future markers will arrive as new keys inside this envelope. Check for the specific key you need (Compliance.AIGenerated) rather than matching the whole object, and future obligations will not break your integration.

How Text Generation Flows#

A typical text workflow ties the three capabilities together: shape a template with saveTextTemplate, confirm the result with previewText, then kick off generateText and poll getTextGenerationStatus until it reports completion. From there, read the finished content back with getEnrichedHotel or listEnrichedHotels.
INFO
Asynchronous by design
generateText returns an id rather than the finished text. Poll getTextGenerationStatus with that id until the job completes, then retrieve the hotel to read the generated content.
Need help? Reach our integration team at integrations@ygo.ai.
Modified at 2026-09-14 07:25:30
Previous
Error Handling & Limits
Next
Generate text
Built with