High1 Resort ticket connector: API documentation
Version 1.0.0 · Operated by REOTRIP TECHNOLOGY LIMITED · OpenAPI 3.0.3 specification
What this API is
A read-only HTTP API for High1 Resort tickets. It answers three questions: which ticket categories exist, what one category contains (with every ticket on sale in it), and which tickets can be used on a given date. Data comes from High1's own public storefront API at https://www.high1global.com; the connector reshapes it into the stable JSON described here and passes on only the fields listed below.
Version 1 only reads. It does not book, pay for or issue tickets, and it has no write operations of any kind.
Base URL
https://high1.reotrip.com/api/v1All endpoints are GET requests under this base and return application/json in UTF-8. Responses carry Access-Control-Allow-Origin: *, so browsers may call the API directly. The machine-readable description is at https://high1.reotrip.com/openapi.json.
Authentication and permissions
None. Every endpoint is public: no API key, token, OAuth flow, account or cookie is needed or accepted, and the OpenAPI document declares security: []. No permission scopes exist because the API only returns public ticket information already shown on High1's storefront.
Endpoints
| Method | Path | Purpose |
|---|---|---|
| GET | /api/v1/categories | List ticket categories |
| GET | /api/v1/categories/{category} | One category with its sub-categories and tickets |
| GET | /api/v1/tickets | Tickets on sale, optionally only those valid on a date |
GET/api/v1/categories
The visible first-level ticket categories on High1's storefront. Use a category's code with the next endpoint. Operation id listCategories.
Parameters: none.
Permissions: none (public). Side effects: none.
Responses: 200 CategoryList; 429 rate_limited; 502 upstream_unavailable or upstream_invalid_response.
| Field | Type | Description |
|---|---|---|
categories | array of Category | Visible first-level ticket categories. |
Example request
curl -s "https://high1.reotrip.com/api/v1/categories"Example response (200, illustrative values)
{
"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
}
]
}GET/api/v1/categories/{category}
One first-level category with its descriptive content (overview, details, usage guide, policy, address, images), its sub-categories, and every ticket on sale in it. Operation id getCategory.
Parameters
| Name | In | Required | Description |
|---|---|---|---|
category | path | yes | A category code such as TC-001, or the category's Korean name (URL-encoded). 1 to 64 letters, digits, spaces, ., _ or -; anything else is 400 invalid_parameter. |
Permissions: none (public). Side effects: none.
Responses: 200 CategoryDetail; 400 invalid_parameter; 404 not_found (no visible category matches); 429 rate_limited; 502 upstream_unavailable or upstream_invalid_response.
| Field | Type | Description |
|---|---|---|
category | CategoryContent | A category with its descriptive content and sub-categories. |
tickets | array of Ticket | Every ticket on sale in this category. |
category is a CategoryContent; each entry of tickets is a Ticket.
Example request
curl -s "https://high1.reotrip.com/api/v1/categories/TC-001"Example response (200, illustrative values)
{
"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"
}
}
]
}Example response (404)
{
"error": {
"code": "not_found",
"message": "No visible ticket category matches 'TC-999'."
}
}GET/api/v1/tickets
Tickets on sale. With use_date, only tickets that have at least one option whose validity window contains that date. Operation id searchTickets.
Parameters
| Name | In | Required | Description |
|---|---|---|---|
use_date | query | no | A real calendar date written YYYY-MM-DD (for example 2027-01-15). Omit it to list every ticket on sale. Anything else, including 2027-02-30, is 400 invalid_parameter. |
Permissions: none (public). Side effects: none.
Responses: 200 TicketSearch; 400 invalid_parameter; 429 rate_limited; 502 upstream_unavailable or upstream_invalid_response.
| Field | Type | Description |
|---|---|---|
use_date | string (date) or null | The use_date you sent, or null when you sent none. |
tickets | array of Ticket | Matching tickets. |
categories | array of Category | Categories High1 returns alongside the search. |
Example request
curl -s "https://high1.reotrip.com/api/v1/tickets?use_date=2027-01-15"Example response (200, illustrative values)
{
"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"
}
]
}Example response (400)
{
"error": {
"code": "invalid_parameter",
"message": "use_date must be a calendar date in YYYY-MM-DD format."
}
}Errors
Every error has the same body, {"error": {"code": "...", "message": "..."}} (schema Error), and is sent with Cache-Control: no-store. The message is for people; act on the code. The upstream body is never passed through.
| Status | Code | When | What to do |
|---|---|---|---|
| 400 | invalid_parameter | category or use_date is malformed. | Fix the request; do not retry it unchanged. |
| 404 | not_found | No visible ticket category matches {category}. | List categories and use a listed code. |
| 429 | rate_limited | More than 60 requests in the current minute from your IP. | Wait the number of seconds in Retry-After. |
| 502 | upstream_unavailable | High1 did not answer within 8 seconds, could not be reached, or answered with an error status. | Retry later with backoff. |
| 502 | upstream_invalid_response | High1 answered with something that is not JSON or not the expected shape. | Retry later; report it if it persists. |
Example (502)
{
"error": {
"code": "upstream_unavailable",
"message": "The High1 ticket service is unavailable: High1 did not answer within 8 seconds."
}
}Rate limit
60 requests per minute per client IP, counted in a fixed one-minute window. The window is kept in each serverless instance's memory, so the limit is enforced per instance. Over the limit the API answers 429 with code rate_limited and a Retry-After header. A 200 response served from the CDN cache (see caching below) is not counted and may carry the limit headers of the earlier request that filled the cache.
| Header | Sent on | Meaning |
|---|---|---|
X-RateLimit-Limit | API responses | Requests allowed per window (60). |
X-RateLimit-Remaining | API responses | Requests left in the current window. |
X-RateLimit-Reset | API responses | Seconds until the current window ends. |
Retry-After | 429 only | Seconds to wait before retrying. |
{
"error": {
"code": "rate_limited",
"message": "Rate limit exceeded: 60 requests per minute per IP. Retry after 42 seconds."
}
}Caching and timeouts
- Each upstream answer is kept in the instance's memory for 60 seconds. Failures are not cached.
- 200 responses are sent with
Cache-Control: public, max-age=0, s-maxage=60: browsers revalidate, and a shared cache (the CDN in front of the connector) may serve a response for up to 60 seconds. Error responses are sent withno-store. - Prices and validity windows can therefore lag High1's storefront by up to about two minutes.
- The connector waits at most 8 seconds for High1; after that it answers 502
upstream_unavailable. /openapi.jsonis sent withCache-Control: public, max-age=3600.
Data notes
- Currency. Every price is an object
{"amount": 89000, "currency": "KRW"}: an integer number of Korean won (KRW has no minor unit). Currency is alwaysKRW. - lowest_price. The lowest price among a ticket's options. It may be a child fare, so do not present it as the adult price; read
optionsfor per-option prices. - use_date. Passed to High1's own ticket search, which keeps tickets with an option whose validity window (
valid_fromtovalid_to) contains that date; the connector does not filter again. It reflects validity only, not live availability or inventory, and weekday or holiday rules are not checked. A ticket returned for a date may still be sold out or not usable that day. - Languages. Text fields are LocalizedText objects with
ko,en,zhandzh_hant; a language High1 has not filled in isnull. - HTML fields.
detail_html,guide_htmlandpolicy_htmlare HTML as High1 publishes it. Sanitize before rendering. - Missing values. A field the upstream omits or malforms becomes
null(or an empty list) rather than failing the request.
Side effects
None. All three endpoints are safe, idempotent GET requests. They create, change or reserve nothing, at High1 or anywhere else. The only state they keep is a request count per client IP, held in the serving instance's memory for the rate limit.
Environments
Production only, at the base URL above. There is no separate test or sandbox environment; because every call is read-only, it is safe to test against production. Please stay within the rate limit.
Versioning and roadmap
The major version is in the path (/api/v1); this page describes version 1.0.0, the same version as info.version in /openapi.json. Version 1 is a Raw API only. A hosted MCP server is planned for v2.
Schemas
Every response body, exactly as returned. Objects have no fields beyond those listed. The same definitions are in /openapi.json under components.schemas.
LocalizedText
The same text in four languages. A language High1 has not filled in is null.
| Field | Type | Description |
|---|---|---|
ko | string or null | Korean text (High1's primary language). |
en | string or null | English text. |
zh | string or null | Simplified Chinese text. |
zh_hant | string or null | Traditional Chinese text. |
Price
A price in Korean won.
| Field | Type | Description |
|---|---|---|
amount | integer | Whole Korean won; KRW has no minor unit. |
currency | string: KRW | Always KRW. |
Category
A visible first-level ticket category.
| Field | Type | Description |
|---|---|---|
id | integer | High1's category id. |
code | string | Category code, for example TC-001. Use it as {category}. |
name | LocalizedText | Category name. |
sort_order | integer or null | Display order on High1's storefront (ascending). |
hero_image_url | string (uri) or null | Banner image URL. |
CategoryContent
A category with its descriptive content and sub-categories.
| Field | Type | Description |
|---|---|---|
id | integer | High1's category id. |
code | string | Category code. |
name | LocalizedText | Category name. |
overview | LocalizedText | Short plain-text overview. |
detail_html | LocalizedText | Detail description as HTML from High1's storefront. |
guide_html | LocalizedText | Usage guide as HTML. |
policy_html | LocalizedText | Purchase, cancellation and refund policy as HTML. |
address | LocalizedText | Venue address. |
image_urls | array of string (uri) | Image URLs (http or https), without duplicates. |
children | array of CategoryContent | Sub-categories, with the same fields (recursive). |
TicketOption
One purchasable variant of a ticket (for example adult or child).
| Field | Type | Description |
|---|---|---|
id | integer | Option id. |
level | integer or null | Option level as High1 numbers it. |
level_name | string or null | Option level label, for example Adult or Child. |
name | LocalizedText | Option name. |
price | Price or null | Sale price of this option; null when High1 gives none. |
valid_from | string (date) or null | First day this option is valid (YYYY-MM-DD). |
valid_to | string (date) or null | Last day this option is valid (YYYY-MM-DD). |
Ticket
A ticket on sale on High1's storefront.
| Field | Type | Description |
|---|---|---|
id | integer | High1's product id. |
product_code | string or null | High1's product code. |
name | LocalizedText | Ticket name. |
category | object | Where the ticket sits in High1's category tree. |
category.id | integer or null | Id of the category the ticket sits in. |
category.name | string or null | Name of that category (Korean). |
category.root_name | string or null | Name of its first-level category (Korean). |
category.path | string or null | Category path as High1 writes it. |
category.badge | object | Short category label shown on the ticket. |
category.badge.en | string or null | Badge label in English. |
category.badge.ko | string or null | Badge label in Korean. |
category.badge.zh | string or null | Badge label in Chinese. |
thumbnail_url | string (uri) or null | Thumbnail image URL. |
image_urls | array of string (uri) | Image URLs (http or https), without duplicates. |
options | array of TicketOption | Purchasable options with their prices and validity windows. |
lowest_price | Price or null | The lowest option price. It may be a child fare, so do not present it as an adult price. |
CategoryList
Response of GET /api/v1/categories.
| Field | Type | Description |
|---|---|---|
categories | array of Category | Visible first-level ticket categories. |
CategoryDetail
Response of GET /api/v1/categories/{category}.
| Field | Type | Description |
|---|---|---|
category | CategoryContent | A category with its descriptive content and sub-categories. |
tickets | array of Ticket | Every ticket on sale in this category. |
TicketSearch
Response of GET /api/v1/tickets.
Error
Every error response has this body.
| Field | Type | Description |
|---|---|---|
error | object | |
error.code | string: invalid_parameter | not_found | rate_limited | upstream_unavailable | upstream_invalid_response | Machine-readable error code. |
error.message | string | Human-readable explanation. Never contains the upstream body. |
Operator, support and policies
- Operator and applicant: REOTRIP TECHNOLOGY LIMITED.
- Questions about High1 Resort tickets, prices or visits: High1 customer service, cs@high1global.com.
- Privacy policy: https://reotrip.com/en/privacy
- Terms: https://reotrip.com/en/terms
- OpenAPI specification: https://high1.reotrip.com/openapi.json