1. Content Enrichment 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. Content Enrichment API

Vision AI

Vision AI analyzes images you send us. Post a batch of image URLs, receive a permanent image id for each one, then collect the finished analysis as it lands: a scene category, detected features, text and people, safety signals, source provenance, and neutral alt text in every locale your project is configured for. Your hotels do not have to be in our catalogue first, so you can run it over imagery you already hold.
The alt text matters beyond merchandising. Describing every image is what accessibility legislation such as the European Accessibility Act asks of a traveler-facing site, and writing those descriptions by hand across a large gallery is the part that never gets done.

Availability#

Vision AI is enabled per project. If all three endpoints answer 404 NOT_FOUND with {"Error": {"Code": "NOT_FOUND", "Message": "Not found"}}, your project is not enabled for it yet. That answer is about provisioning, not about your request, so contact us rather than debugging the payload.

The Three Calls#

ingestImages submits URLs, getImages polls the ids you were handed, and listImages shows what this project has submitted when you no longer hold the ids.

1. Submit#

Send up to 100 images in one call. All images in a call belong to one hotel, and naming a hotel is optional: use HotelID, GlobalHotelID, or ExternalHotelID with productid or giata. Send no selector and the images live under a workspace reserved for your project. RoomRef is an optional label of your own, echoed back on every read.
{
  "Data": {
    "HotelID": "0192fb17-5dc6-7abc-8def-123456789abc",
    "Images": [
      { "ImageID": "0192fb17-5dc6-7abc-8def-123456789abd", "URL": "https://cdn.example.com/rooms/dbl-sea-01.jpg", "Status": "pending" }
    ]
  }
}
Keep the ImageID values. They are permanent, and re-submitting a URL returns the same id.

2. Poll#

getImages takes up to 100 ids, the same cap as one submission, and answers in request order so you can zip the result against your own list. Each entry carries pending, completed, failed, or not_found, and the analyzed Image object appears only on completed. Drop terminal ids from your next poll.

3. List#

listImages returns your project's submissions newest first, filtered by Status and paginated with Limit and Offset. Use it for a console view, or whenever the ids were lost between our response and your database write.
INFO
Asynchronous by design
There is no synchronous mode and no callback. Submission returns ids immediately and the analysis runs behind it, so poll with getImages or read listImages until the statuses settle.

Limits and Billing#

One call carries at most 100 images. Per project, you may submit 25,000 images and create 1,000 new hotels in a rolling 24 hour window. Breaching either returns 429 RATE_LIMIT_EXCEEDED with a Retry-After header, having stored and billed nothing. A one off bulk load beyond those limits is a conversation with us.
You pay once per newly submitted image, at submission. Re-submitting a URL we already hold for you is free, so retries after a timeout or a lost response cost nothing, and polling and listing are free.

What a Completed Image Carries#

The Image object is the same one the enrichment API serves in a hotel gallery: Category, the label arrays, appeal and quality scores, dimensions and format, DominantColor and BlurHash, the detection domains (Presence, Safety, TextDetections, FeatureDetections), Source provenance, and Descriptions keyed by locale. FileMetadata reports what the image file states about itself, CaptureDate and Copyright, when it states anything.
Where a detection carries a Confidence, that number is a measured score. A Confidence of null means the label was noted without one, so treat it as unscored rather than as zero. Optional fields are genuinely absent when they do not apply, so branch on whether a key is present.
INFO
Descriptions are accessibility alt text
Each entry in Descriptions is a neutral description of what the image shows, written to be used as alt text, not as marketing copy. Like every generated field it carries the Compliance envelope marking it as AI generated. See the AI-generated content marking section of the Content Enrichment API overview for how to read that envelope.
TIP
Start with one batch
Submit a small batch without a hotel selector and poll it to completion, so you can confirm the locales and fields you need before wiring the flow into your catalogue.
See the OpenAPI specs for request and response details.
Need help? Reach our integration team at integrations@ygo.ai.
Modified at 2026-09-14 07:14:55
Previous
Rotate approval link
Next
Ingest vision images
Built with