{"openapi":"3.0.3","info":{"title":"High1 Resort ticket connector","version":"1.0.0","description":"Read-only API for High1 Resort tickets: ticket categories, one category with its tickets, and ticket search by date.\n\nData comes from High1's own public storefront API (https://www.high1global.com). The connector only reads: there are no write operations and no booking, payment or ticket issuance.\n\nAuthentication: none. Every endpoint is public and needs no API key, token or account.\n\nRate limit: 60 requests per minute per client IP, counted in a fixed one-minute window kept in each serverless instance's memory; over the limit the API answers 429 with Retry-After. Every response carries X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset.\n\nCaching: upstream answers are kept in memory for 60 seconds; 200 responses are sent with Cache-Control public, max-age=0, s-maxage=60. Upstream timeout: 8 seconds.\n\nPrices are integers in Korean won (KRW). lowest_price is the lowest option price and may be a child fare. use_date filters by each option's validity window, not by live availability or inventory.\n\nEnvironments: production only. All calls are read-only and safe to make against production. Operator: REOTRIP TECHNOLOGY LIMITED.","termsOfService":"https://reotrip.com/en/terms","contact":{"name":"High1 Resort customer service","email":"cs@high1global.com"},"x-operator":"REOTRIP TECHNOLOGY LIMITED","x-privacy-policy":"https://reotrip.com/en/privacy"},"security":[],"tags":[{"name":"tickets","description":"High1 Resort ticket categories and tickets (read-only)."}],"paths":{"/api/v1/categories":{"get":{"operationId":"listCategories","tags":["tickets"],"summary":"List ticket categories","description":"The visible first-level ticket categories on High1's storefront. Read-only, no side effects.","security":[],"responses":{"200":{"description":"The categories.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryList"},"example":{"categories":[{"id":1,"code":"TC-001","name":{"ko":"리프트","en":"Lift tickets","zh":"缆车票","zh_hant":"纜車票"},"sort_order":1,"hero_image_url":"https://images.example.com/high1/categories/lift.jpg"},{"id":2,"code":"TC-002","name":{"ko":"워터월드","en":"Water World","zh":"水上世界","zh_hant":"水上世界"},"sort_order":2,"hero_image_url":null}]}}}},"429":{"$ref":"#/components/responses/RateLimited"},"502":{"$ref":"#/components/responses/UpstreamFailure"}}}},"/api/v1/categories/{category}":{"get":{"operationId":"getCategory","tags":["tickets"],"summary":"Get one category with its tickets","description":"One first-level category with its descriptive content, its sub-categories and every ticket on sale in it. Read-only, no side effects.","security":[],"parameters":[{"name":"category","in":"path","required":true,"description":"A category code (for example TC-001) or the category's Korean name: 1 to 64 letters, digits, spaces, '.', '_' or '-'.","schema":{"type":"string","minLength":1,"maxLength":64},"example":"TC-001"}],"responses":{"200":{"description":"The category and its tickets.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CategoryDetail"},"example":{"category":{"id":1,"code":"TC-001","name":{"ko":"리프트","en":"Lift tickets","zh":"缆车票","zh_hant":"纜車票"},"overview":{"ko":"하이원 스키장 리프트권","en":"Lift tickets for High1 ski resort","zh":null,"zh_hant":null},"detail_html":{"ko":"<p>상세 안내</p>","en":"<p>Details</p>","zh":null,"zh_hant":null},"guide_html":{"ko":"<p>이용 안내</p>","en":"<p>How to use</p>","zh":null,"zh_hant":null},"policy_html":{"ko":"<p>취소 규정</p>","en":"<p>Cancellation policy</p>","zh":null,"zh_hant":null},"address":{"ko":"강원특별자치도 정선군","en":"Jeongseon-gun, Gangwon-do","zh":null,"zh_hant":null},"image_urls":["https://images.example.com/high1/categories/lift.jpg"],"children":[{"id":11,"code":"TC-001-01","name":{"ko":"리프트 1일권","en":"1-day lift ticket","zh":null,"zh_hant":null},"overview":{"ko":null,"en":null,"zh":null,"zh_hant":null},"detail_html":{"ko":null,"en":null,"zh":null,"zh_hant":null},"guide_html":{"ko":null,"en":null,"zh":null,"zh_hant":null},"policy_html":{"ko":null,"en":null,"zh":null,"zh_hant":null},"address":{"ko":null,"en":null,"zh":null,"zh_hant":null},"image_urls":[],"children":[]}]},"tickets":[{"id":101,"product_code":"LIFT-1DAY","name":{"ko":"리프트 1일권","en":"1-day lift ticket","zh":"缆车一日券","zh_hant":"纜車一日券"},"category":{"id":11,"name":"리프트 1일권","root_name":"리프트","path":"리프트 > 리프트 1일권","badge":{"en":"Lift","ko":"리프트","zh":"缆车"}},"thumbnail_url":"https://images.example.com/high1/products/lift-1day-thumb.jpg","image_urls":["https://images.example.com/high1/products/lift-1day.jpg"],"options":[{"id":1001,"level":1,"level_name":"Adult","name":{"ko":"대인","en":"Adult","zh":"成人","zh_hant":"成人"},"price":{"amount":89000,"currency":"KRW"},"valid_from":"2026-12-01","valid_to":"2027-03-31"},{"id":1002,"level":1,"level_name":"Child","name":{"ko":"소인","en":"Child","zh":"儿童","zh_hant":"兒童"},"price":{"amount":69000,"currency":"KRW"},"valid_from":"2026-12-01","valid_to":"2027-03-31"}],"lowest_price":{"amount":69000,"currency":"KRW"}}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"404":{"$ref":"#/components/responses/NotFound"},"429":{"$ref":"#/components/responses/RateLimited"},"502":{"$ref":"#/components/responses/UpstreamFailure"}}}},"/api/v1/tickets":{"get":{"operationId":"searchTickets","tags":["tickets"],"summary":"Search tickets, optionally by use date","description":"Tickets on sale. With use_date, only tickets with at least one option whose validity window contains that date. This is validity, not live availability or inventory, and weekday or holiday rules are not checked. Read-only, no side effects.","security":[],"parameters":[{"name":"use_date","in":"query","required":false,"description":"A calendar date, YYYY-MM-DD. Omit it to list every ticket on sale.","schema":{"type":"string","format":"date"},"example":"2027-01-15"}],"responses":{"200":{"description":"The matching tickets.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Cache-Control":{"$ref":"#/components/headers/Cache-Control"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TicketSearch"},"example":{"use_date":"2027-01-15","tickets":[{"id":101,"product_code":"LIFT-1DAY","name":{"ko":"리프트 1일권","en":"1-day lift ticket","zh":"缆车一日券","zh_hant":"纜車一日券"},"category":{"id":11,"name":"리프트 1일권","root_name":"리프트","path":"리프트 > 리프트 1일권","badge":{"en":"Lift","ko":"리프트","zh":"缆车"}},"thumbnail_url":"https://images.example.com/high1/products/lift-1day-thumb.jpg","image_urls":["https://images.example.com/high1/products/lift-1day.jpg"],"options":[{"id":1001,"level":1,"level_name":"Adult","name":{"ko":"대인","en":"Adult","zh":"成人","zh_hant":"成人"},"price":{"amount":89000,"currency":"KRW"},"valid_from":"2026-12-01","valid_to":"2027-03-31"},{"id":1002,"level":1,"level_name":"Child","name":{"ko":"소인","en":"Child","zh":"儿童","zh_hant":"兒童"},"price":{"amount":69000,"currency":"KRW"},"valid_from":"2026-12-01","valid_to":"2027-03-31"}],"lowest_price":{"amount":69000,"currency":"KRW"}}],"categories":[{"id":1,"code":"TC-001","name":{"ko":"리프트","en":"Lift tickets","zh":"缆车票","zh_hant":"纜車票"},"sort_order":1,"hero_image_url":"https://images.example.com/high1/categories/lift.jpg"}]}}}},"400":{"$ref":"#/components/responses/BadRequest"},"429":{"$ref":"#/components/responses/RateLimited"},"502":{"$ref":"#/components/responses/UpstreamFailure"}}}}},"components":{"schemas":{"LocalizedText":{"type":"object","description":"The same text in four languages. A language High1 has not filled in is null.","properties":{"ko":{"type":"string","nullable":true,"description":"Korean text (High1's primary language)."},"en":{"type":"string","nullable":true,"description":"English text."},"zh":{"type":"string","nullable":true,"description":"Simplified Chinese text."},"zh_hant":{"type":"string","nullable":true,"description":"Traditional Chinese text."}},"required":["ko","en","zh","zh_hant"],"additionalProperties":false},"Price":{"type":"object","description":"A price in Korean won.","properties":{"amount":{"type":"integer","minimum":0,"description":"Whole Korean won; KRW has no minor unit."},"currency":{"type":"string","enum":["KRW"],"description":"Always KRW."}},"required":["amount","currency"],"additionalProperties":false},"Category":{"type":"object","description":"A visible first-level ticket category.","properties":{"id":{"type":"integer","description":"High1's category id."},"code":{"type":"string","description":"Category code, for example TC-001. Use it as {category}."},"name":{"$ref":"#/components/schemas/LocalizedText","description":"Category name."},"sort_order":{"type":"integer","nullable":true,"description":"Display order on High1's storefront (ascending)."},"hero_image_url":{"type":"string","nullable":true,"description":"Banner image URL.","format":"uri"}},"required":["id","code","name","sort_order","hero_image_url"],"additionalProperties":false},"CategoryContent":{"type":"object","description":"A category with its descriptive content and sub-categories.","properties":{"id":{"type":"integer","description":"High1's category id."},"code":{"type":"string","description":"Category code."},"name":{"$ref":"#/components/schemas/LocalizedText","description":"Category name."},"overview":{"$ref":"#/components/schemas/LocalizedText","description":"Short plain-text overview."},"detail_html":{"$ref":"#/components/schemas/LocalizedText","description":"Detail description as HTML from High1's storefront."},"guide_html":{"$ref":"#/components/schemas/LocalizedText","description":"Usage guide as HTML."},"policy_html":{"$ref":"#/components/schemas/LocalizedText","description":"Purchase, cancellation and refund policy as HTML."},"address":{"$ref":"#/components/schemas/LocalizedText","description":"Venue address."},"image_urls":{"type":"array","description":"Image URLs (http or https), without duplicates.","items":{"type":"string","format":"uri"}},"children":{"type":"array","description":"Sub-categories, with the same fields (recursive).","items":{"$ref":"#/components/schemas/CategoryContent"}}},"required":["id","code","name","overview","detail_html","guide_html","policy_html","address","image_urls","children"],"additionalProperties":false},"TicketOption":{"type":"object","description":"One purchasable variant of a ticket (for example adult or child).","properties":{"id":{"type":"integer","description":"Option id."},"level":{"type":"integer","nullable":true,"description":"Option level as High1 numbers it."},"level_name":{"type":"string","nullable":true,"description":"Option level label, for example Adult or Child."},"name":{"$ref":"#/components/schemas/LocalizedText","description":"Option name."},"price":{"allOf":[{"$ref":"#/components/schemas/Price"}],"nullable":true,"description":"Sale price of this option; null when High1 gives none."},"valid_from":{"type":"string","nullable":true,"description":"First day this option is valid (YYYY-MM-DD).","format":"date"},"valid_to":{"type":"string","nullable":true,"description":"Last day this option is valid (YYYY-MM-DD).","format":"date"}},"required":["id","level","level_name","name","price","valid_from","valid_to"],"additionalProperties":false},"Ticket":{"type":"object","description":"A ticket on sale on High1's storefront.","properties":{"id":{"type":"integer","description":"High1's product id."},"product_code":{"type":"string","nullable":true,"description":"High1's product code."},"name":{"$ref":"#/components/schemas/LocalizedText","description":"Ticket name."},"category":{"type":"object","description":"Where the ticket sits in High1's category tree.","properties":{"id":{"type":"integer","nullable":true,"description":"Id of the category the ticket sits in."},"name":{"type":"string","nullable":true,"description":"Name of that category (Korean)."},"root_name":{"type":"string","nullable":true,"description":"Name of its first-level category (Korean)."},"path":{"type":"string","nullable":true,"description":"Category path as High1 writes it."},"badge":{"type":"object","description":"Short category label shown on the ticket.","properties":{"en":{"type":"string","nullable":true,"description":"Badge label in English."},"ko":{"type":"string","nullable":true,"description":"Badge label in Korean."},"zh":{"type":"string","nullable":true,"description":"Badge label in Chinese."}},"required":["en","ko","zh"],"additionalProperties":false}},"required":["id","name","root_name","path","badge"],"additionalProperties":false},"thumbnail_url":{"type":"string","nullable":true,"description":"Thumbnail image URL.","format":"uri"},"image_urls":{"type":"array","description":"Image URLs (http or https), without duplicates.","items":{"type":"string","format":"uri"}},"options":{"type":"array","description":"Purchasable options with their prices and validity windows.","items":{"$ref":"#/components/schemas/TicketOption"}},"lowest_price":{"allOf":[{"$ref":"#/components/schemas/Price"}],"nullable":true,"description":"The lowest option price. It may be a child fare, so do not present it as an adult price."}},"required":["id","product_code","name","category","thumbnail_url","image_urls","options","lowest_price"],"additionalProperties":false},"CategoryList":{"type":"object","description":"Response of GET /api/v1/categories.","properties":{"categories":{"type":"array","description":"Visible first-level ticket categories.","items":{"$ref":"#/components/schemas/Category"}}},"required":["categories"],"additionalProperties":false},"CategoryDetail":{"type":"object","description":"Response of GET /api/v1/categories/{category}.","properties":{"category":{"$ref":"#/components/schemas/CategoryContent"},"tickets":{"type":"array","description":"Every ticket on sale in this category.","items":{"$ref":"#/components/schemas/Ticket"}}},"required":["category","tickets"],"additionalProperties":false},"TicketSearch":{"type":"object","description":"Response of GET /api/v1/tickets.","properties":{"use_date":{"type":"string","nullable":true,"description":"The use_date you sent, or null when you sent none.","format":"date"},"tickets":{"type":"array","description":"Matching tickets.","items":{"$ref":"#/components/schemas/Ticket"}},"categories":{"type":"array","description":"Categories High1 returns alongside the search.","items":{"$ref":"#/components/schemas/Category"}}},"required":["use_date","tickets","categories"],"additionalProperties":false},"Error":{"type":"object","description":"Every error response has this body.","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_parameter","not_found","rate_limited","upstream_unavailable","upstream_invalid_response"],"description":"Machine-readable error code."},"message":{"type":"string","description":"Human-readable explanation. Never contains the upstream body."}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}},"headers":{"X-RateLimit-Limit":{"description":"Requests allowed per one-minute window per client IP (60).","schema":{"type":"integer"}},"X-RateLimit-Remaining":{"description":"Requests left in the current window.","schema":{"type":"integer"}},"X-RateLimit-Reset":{"description":"Seconds until the current window ends.","schema":{"type":"integer"}},"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}},"Cache-Control":{"description":"public, max-age=0, s-maxage=60 on 200 responses; no-store on error responses.","schema":{"type":"string"}}},"responses":{"BadRequest":{"description":"A parameter is malformed (code invalid_parameter).","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"invalid_parameter":{"value":{"error":{"code":"invalid_parameter","message":"use_date must be a calendar date in YYYY-MM-DD format."}}}}}}},"NotFound":{"description":"No visible ticket category matches {category} (code not_found).","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"not_found":{"value":{"error":{"code":"not_found","message":"No visible ticket category matches 'TC-999'."}}}}}}},"RateLimited":{"description":"More than 60 requests in the current one-minute window from this IP (code rate_limited).","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"},"Retry-After":{"$ref":"#/components/headers/Retry-After"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"rate_limited":{"value":{"error":{"code":"rate_limited","message":"Rate limit exceeded: 60 requests per minute per IP. Retry after 42 seconds."}}}}}}},"UpstreamFailure":{"description":"High1's API failed: no answer within 8 seconds, unreachable or a non-2xx status (upstream_unavailable), or a body that is not JSON or not the expected shape (upstream_invalid_response). The upstream body is never passed through.","headers":{"X-RateLimit-Limit":{"$ref":"#/components/headers/X-RateLimit-Limit"},"X-RateLimit-Remaining":{"$ref":"#/components/headers/X-RateLimit-Remaining"},"X-RateLimit-Reset":{"$ref":"#/components/headers/X-RateLimit-Reset"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"},"examples":{"upstream_unavailable":{"value":{"error":{"code":"upstream_unavailable","message":"The High1 ticket service is unavailable: High1 did not answer within 8 seconds."}}},"upstream_invalid_response":{"value":{"error":{"code":"upstream_invalid_response","message":"The High1 ticket service returned a category list that is not a list."}}}}}}}}},"servers":[{"url":"https://high1.reotrip.com","description":"Production (the only environment)"}]}