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/v1

All 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

MethodPathPurpose
GET/api/v1/categoriesList ticket categories
GET/api/v1/categories/{category}One category with its sub-categories and tickets
GET/api/v1/ticketsTickets 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.

FieldTypeDescription
categoriesarray of CategoryVisible 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

NameInRequiredDescription
categorypathyesA 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.

FieldTypeDescription
categoryCategoryContentA category with its descriptive content and sub-categories.
ticketsarray of TicketEvery 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

NameInRequiredDescription
use_datequerynoA 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.

FieldTypeDescription
use_datestring (date) or nullThe use_date you sent, or null when you sent none.
ticketsarray of TicketMatching tickets.
categoriesarray of CategoryCategories 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.

StatusCodeWhenWhat to do
400invalid_parametercategory or use_date is malformed.Fix the request; do not retry it unchanged.
404not_foundNo visible ticket category matches {category}.List categories and use a listed code.
429rate_limitedMore than 60 requests in the current minute from your IP.Wait the number of seconds in Retry-After.
502upstream_unavailableHigh1 did not answer within 8 seconds, could not be reached, or answered with an error status.Retry later with backoff.
502upstream_invalid_responseHigh1 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.

HeaderSent onMeaning
X-RateLimit-LimitAPI responsesRequests allowed per window (60).
X-RateLimit-RemainingAPI responsesRequests left in the current window.
X-RateLimit-ResetAPI responsesSeconds until the current window ends.
Retry-After429 onlySeconds 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

Data notes

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.

FieldTypeDescription
kostring or nullKorean text (High1's primary language).
enstring or nullEnglish text.
zhstring or nullSimplified Chinese text.
zh_hantstring or nullTraditional Chinese text.

Price

A price in Korean won.

FieldTypeDescription
amountintegerWhole Korean won; KRW has no minor unit.
currencystring: KRWAlways KRW.

Category

A visible first-level ticket category.

FieldTypeDescription
idintegerHigh1's category id.
codestringCategory code, for example TC-001. Use it as {category}.
nameLocalizedTextCategory name.
sort_orderinteger or nullDisplay order on High1's storefront (ascending).
hero_image_urlstring (uri) or nullBanner image URL.

CategoryContent

A category with its descriptive content and sub-categories.

FieldTypeDescription
idintegerHigh1's category id.
codestringCategory code.
nameLocalizedTextCategory name.
overviewLocalizedTextShort plain-text overview.
detail_htmlLocalizedTextDetail description as HTML from High1's storefront.
guide_htmlLocalizedTextUsage guide as HTML.
policy_htmlLocalizedTextPurchase, cancellation and refund policy as HTML.
addressLocalizedTextVenue address.
image_urlsarray of string (uri)Image URLs (http or https), without duplicates.
childrenarray of CategoryContentSub-categories, with the same fields (recursive).

TicketOption

One purchasable variant of a ticket (for example adult or child).

FieldTypeDescription
idintegerOption id.
levelinteger or nullOption level as High1 numbers it.
level_namestring or nullOption level label, for example Adult or Child.
nameLocalizedTextOption name.
pricePrice or nullSale price of this option; null when High1 gives none.
valid_fromstring (date) or nullFirst day this option is valid (YYYY-MM-DD).
valid_tostring (date) or nullLast day this option is valid (YYYY-MM-DD).

Ticket

A ticket on sale on High1's storefront.

FieldTypeDescription
idintegerHigh1's product id.
product_codestring or nullHigh1's product code.
nameLocalizedTextTicket name.
categoryobjectWhere the ticket sits in High1's category tree.
category.idinteger or nullId of the category the ticket sits in.
category.namestring or nullName of that category (Korean).
category.root_namestring or nullName of its first-level category (Korean).
category.pathstring or nullCategory path as High1 writes it.
category.badgeobjectShort category label shown on the ticket.
category.badge.enstring or nullBadge label in English.
category.badge.kostring or nullBadge label in Korean.
category.badge.zhstring or nullBadge label in Chinese.
thumbnail_urlstring (uri) or nullThumbnail image URL.
image_urlsarray of string (uri)Image URLs (http or https), without duplicates.
optionsarray of TicketOptionPurchasable options with their prices and validity windows.
lowest_pricePrice or nullThe 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.

FieldTypeDescription
categoriesarray of CategoryVisible first-level ticket categories.

CategoryDetail

Response of GET /api/v1/categories/{category}.

FieldTypeDescription
categoryCategoryContentA category with its descriptive content and sub-categories.
ticketsarray of TicketEvery ticket on sale in this category.

TicketSearch

Response of GET /api/v1/tickets.

FieldTypeDescription
use_datestring (date) or nullThe use_date you sent, or null when you sent none.
ticketsarray of TicketMatching tickets.
categoriesarray of CategoryCategories High1 returns alongside the search.

Error

Every error response has this body.

FieldTypeDescription
errorobject
error.codestring: invalid_parameter | not_found | rate_limited | upstream_unavailable | upstream_invalid_responseMachine-readable error code.
error.messagestringHuman-readable explanation. Never contains the upstream body.

Operator, support and policies