Connect

API reference

v1 public endpoints. Mostly read-only (GET); reservation requests and live-status questions are writes (POST). Every endpoint except /meta requires a Bearer key.

OpenAPI →
GET/api/v1/places

Search places

Search refined places (the oneset) by keyword, region, category, and confidence. Default sort is discovery (query fit, recency, cross-source verification, and completeness together), paginated. Use fields to shape the response.

Auth required (Bearer / X-API-Key header preferred)

Run in playground →

Parameters

  • keywordstringoptionalPartial match on name/address/menu item · example: 버거킹
  • region_codestringoptionalRegion (admin-dong) code
  • business_categorystringoptionalCategory (restaurant/cafe…) · example: restaurant
  • min_confidencenumberoptionalMinimum confidence (0-1) · example: 0.6
  • sortstringoptionaldiscovery (default, only value) — recommendation sort. distance is unavailable without coordinates. meta.sort reports the sort actually applied and may degrade to reviews on very broad searches. · example: discovery
  • recommended_forstringoptionalNarrow by occasion (comma, all must match). Natural language resolves too. Values: solo_dining, date, group_dining, family, business_meeting, formal_gathering, late_night… Full list & aliases at /api/v1/meta. · example: group_dining
  • atmospherestringoptionalAtmosphere (comma). quiet, lively, view, cozy, trendy, spacious, traditional, clean, work_study, rainy_mood. · example: quiet
  • parkingbooleanoptionalOnly places with confirmed parking. See parking_type for the kind. · example: true
  • parking_typestringoptionalParking type: onsite, valet, partner, nearby, none. Natural language (e.g. 발렛→valet) resolves. · example: onsite
  • reservablebooleanoptionalOnly reservable places (crawl-confirmed plus Yumi Partner venues). · example: true
  • payment_methodsstringoptionalRequire payment methods (comma, all must match). cash, card, naver_pay, kakao_pay, toss_pay, alipay, wechat_pay… · example: alipay
  • servesstringoptionalServes (comma). coffee, alcohol, dessert, vegetarian, vegan. · example: alcohol
  • dietarystringoptionalDietary (comma). vegan_options, vegetarian_options, fully_vegan, mixed_group_suitable. Natural words in Korean/English are resolved (비건/vegan/plant-based → vegan_options, mixed → mixed_group_suitable). For a mixed group (one vegan + others) use mixed_group_suitable: those venues have a confirmed vegan MEAL, not just a vegan drink. · example: vegan_options
  • foreign_languagesstringoptionalLanguages the venue can serve customers in (ISO 639-1, comma, all must match). en, zh, ja, es, de, fr. Owner-confirmed. Natural language (영어→en, 일본어→ja) resolves. e.g. English-speaking venues for foreign guests. · example: en
  • pet_friendlybooleanoptionalExample boolean presence filter. Attach the param to require =true (only confirmed places). Full list (wifi, private_room, outdoor_seating, group_friendly, takeout, delivery, corkage_free, has_promotion…) at /api/v1/meta filters.boolean. · example: true
  • open_atstringoptionalOnly places open at that time — a point or a meal window (KST). Point: 2026-08-26T19:00, '2026-08-26 19:00', '19:00' (today), 'now'. Meal windows: 'lunch' (11:00-14:00), 'dinner' (17:30-21:00), breakfast, brunch, late_night, a custom range '11:00-14:00', or combined with a date '2026-08-29 lunch'. Relative days: only 오늘/내일/모레 (today/tomorrow) are understood — send any other date absolutely. A window matches venues open for at least part of it, and the resolved range is echoed in meta.openAt.window. Based on regular hours, last order, and break times, including past-midnight sessions. Temporary closures and being full are not knowable. Venues with unconfirmed hours are excluded by default and reported via meta.openAt.unknownHoursExcluded. · example: 2026-08-26T19:00
  • include_unknown_hoursbooleanoptionalEscape hatch for open_at only. true also returns venues whose hours are unconfirmed (those are 'unknown', not 'open at that time'). · example: true
  • reservation_channelstringoptionalHow the venue can be booked (comma = OR): yumi (bookable via POST /api/v1/reservations) · external (third-party booking link) · phone. 'Accepts reservations' is not 'has a table at that time' — actual availability is only known by placing a request. · example: yumi
  • fieldsstringoptionalPick fields (Field Mask). Comma-separated tier names (core/contact_hours/quality/edge/media), 'all', or individual field names. Defaults to core. Call tokens = the highest field tier requested (per-request; page_size does not affect tokens). Owner-uploaded photos come via photos (media tier, highest cost 8 — venue & menu image URLs); in lists use photoCount (quality) for a cheap count. recommendedFor may include occasion tags such as solo_dining, late_night, and late_night_eatery. · example: core,rating,accessHints
  • pageintegeroptionalPage (default 1) · example: 1
  • page_sizeintegeroptionalItems per page (max 100). Does not affect tokens (per-request billing). Live API keys can access up to a 5,000-result window; beyond that use Bulk Export. · example: 20

Response example

json

{
  "success": true,
  "data": [
    {
      "id": "11892345",
      "name": "콩부자 홍제점",
      "category": "restaurant",
      "categoryLabel": "국밥",
      "location": {
        "lat": 37.5891,
        "lng": 126.9436
      },
      "address": {
        "road": "서울 서대문구 통일로 450",
        "jibun": "서울 서대문구 홍제동 330"
      },
      "regionCode": "1141011100",
      "confidence": 0.64,
      "sourceCount": 2,
      "possiblyClosed": false,
      "lastSeenAt": "2026-06-18T03:00:00.000Z"
    }
  ],
  "meta": {
    "total": 5,
    "page": 1,
    "pageSize": 20,
    "totalPages": 1
  }
}
GET/api/v1/places/nearby

Nearby search

Find places around a coordinate (lat·lng) within a radius (m), nearest first. Each result includes distanceM (meters from center). sort=discovery switches to recommendation ranking within the radius. fields/tokens behave like Search places.

Auth required (Bearer / X-API-Key header preferred)

Run in playground →

Parameters

  • latnumberrequiredLatitude · example: 37.5704
  • lngnumberrequiredLongitude · example: 126.9921
  • radiusintegeroptionalRadius in meters (default 1000, max 5000) · example: 500
  • business_categorystringoptionalCategory filter · example: cafe
  • keywordstringoptionalPartial match on name/address/menu item
  • sortstringoptionaldistance (default, nearest first) or discovery (recommendation ranking within the radius). Use distance for 'closest to me', discovery for 'somewhere good near here'. meta.sort reports the sort actually applied (may degrade to distance on deep pages or wide radii). · example: discovery
  • recommended_forstringoptionalNarrow by occasion (comma, all must match). Natural language resolves too. Values: solo_dining, date, group_dining, family, business_meeting, formal_gathering, late_night… Full list & aliases at /api/v1/meta. · example: group_dining
  • atmospherestringoptionalAtmosphere (comma). quiet, lively, view, cozy, trendy, spacious, traditional, clean, work_study, rainy_mood. · example: quiet
  • parkingbooleanoptionalOnly places with confirmed parking. See parking_type for the kind. · example: true
  • parking_typestringoptionalParking type: onsite, valet, partner, nearby, none. Natural language (e.g. 발렛→valet) resolves. · example: onsite
  • reservablebooleanoptionalOnly reservable places (crawl-confirmed plus Yumi Partner venues). · example: true
  • payment_methodsstringoptionalRequire payment methods (comma, all must match). cash, card, naver_pay, kakao_pay, toss_pay, alipay, wechat_pay… · example: alipay
  • servesstringoptionalServes (comma). coffee, alcohol, dessert, vegetarian, vegan. · example: alcohol
  • dietarystringoptionalDietary (comma). vegan_options, vegetarian_options, fully_vegan, mixed_group_suitable. Natural words in Korean/English are resolved (비건/vegan/plant-based → vegan_options, mixed → mixed_group_suitable). For a mixed group (one vegan + others) use mixed_group_suitable: those venues have a confirmed vegan MEAL, not just a vegan drink. · example: vegan_options
  • foreign_languagesstringoptionalLanguages the venue can serve customers in (ISO 639-1, comma, all must match). en, zh, ja, es, de, fr. Owner-confirmed. Natural language (영어→en, 일본어→ja) resolves. e.g. English-speaking venues for foreign guests. · example: en
  • pet_friendlybooleanoptionalExample boolean presence filter. Attach the param to require =true (only confirmed places). Full list (wifi, private_room, outdoor_seating, group_friendly, takeout, delivery, corkage_free, has_promotion…) at /api/v1/meta filters.boolean. · example: true
  • open_atstringoptionalOnly places open at that time — a point or a meal window (KST). Point: 2026-08-26T19:00, '2026-08-26 19:00', '19:00' (today), 'now'. Meal windows: 'lunch' (11:00-14:00), 'dinner' (17:30-21:00), breakfast, brunch, late_night, a custom range '11:00-14:00', or combined with a date '2026-08-29 lunch'. Relative days: only 오늘/내일/모레 (today/tomorrow) are understood — send any other date absolutely. A window matches venues open for at least part of it, and the resolved range is echoed in meta.openAt.window. Based on regular hours, last order, and break times, including past-midnight sessions. Temporary closures and being full are not knowable. Venues with unconfirmed hours are excluded by default and reported via meta.openAt.unknownHoursExcluded. · example: 2026-08-26T19:00
  • include_unknown_hoursbooleanoptionalEscape hatch for open_at only. true also returns venues whose hours are unconfirmed (those are 'unknown', not 'open at that time'). · example: true
  • reservation_channelstringoptionalHow the venue can be booked (comma = OR): yumi (bookable via POST /api/v1/reservations) · external (third-party booking link) · phone. 'Accepts reservations' is not 'has a table at that time' — actual availability is only known by placing a request. · example: yumi
  • fieldsstringoptionalPick fields (Field Mask). Comma-separated tier names (core/contact_hours/quality/edge/media), 'all', or individual field names. Defaults to core. Call tokens = the highest field tier requested (per-request; page_size does not affect tokens). Owner-uploaded photos come via photos (media tier, highest cost 8 — venue & menu image URLs); in lists use photoCount (quality) for a cheap count. recommendedFor may include occasion tags such as solo_dining, late_night, and late_night_eatery. · example: core,rating,accessHints
  • pageintegeroptionalPage (default 1) · example: 1
  • page_sizeintegeroptionalItems per page (max 100). Does not affect tokens (per-request billing). Live API keys can access up to a 5,000-result window; beyond that use Bulk Export. · example: 20

Response example

json

{
  "success": true,
  "data": [
    {
      "id": "11892345",
      "name": "콩부자 홍제점",
      "category": "restaurant",
      "categoryLabel": "국밥",
      "location": {
        "lat": 37.5891,
        "lng": 126.9436
      },
      "address": {
        "road": "서울 서대문구 통일로 450",
        "jibun": "서울 서대문구 홍제동 330"
      },
      "regionCode": "1141011100",
      "confidence": 0.64,
      "sourceCount": 2,
      "possiblyClosed": false,
      "lastSeenAt": "2026-06-18T03:00:00.000Z",
      "distanceM": 0
    }
  ],
  "meta": {
    "total": 12,
    "page": 1,
    "pageSize": 20,
    "totalPages": 1,
    "center": {
      "lat": 37.5704,
      "lng": 126.9921
    },
    "radius": 500
  }
}
GET/api/v1/places/{id}

Place detail

A single place. Use fields to fetch only the tiers you need (fields=all returns hours, menu, access hints, recommendation context, and more).

Auth required (Bearer / X-API-Key header preferred)

Run in playground →

Parameters

  • idstringrequiredPlace id (canonical) · example: 11782345
  • fieldsstringoptionalPick fields (Field Mask). Comma-separated tier names (core/contact_hours/quality/edge/media), 'all', or individual field names. Defaults to core. Call tokens = the highest field tier requested (per-request; page_size does not affect tokens). Owner-uploaded photos come via photos (media tier, highest cost 8 — venue & menu image URLs); in lists use photoCount (quality) for a cheap count. recommendedFor may include occasion tags such as solo_dining, late_night, and late_night_eatery. · example: core,rating,accessHints

Response example

json

{
  "success": true,
  "data": {
    "id": "11892345",
    "name": "콩부자 홍제점",
    "category": "restaurant",
    "categoryLabel": "국밥",
    "location": {
      "lat": 37.5891,
      "lng": 126.9436
    },
    "address": {
      "road": "서울 서대문구 통일로 450",
      "jibun": "서울 서대문구 홍제동 330"
    },
    "regionCode": "1141011100",
    "confidence": 0.64,
    "sourceCount": 2,
    "possiblyClosed": false,
    "lastSeenAt": "2026-06-18T03:00:00.000Z",
    "rating": null,
    "reviewCount": 10731,
    "latestReviewDate": "2026-06-15",
    "freshnessScore": 0.82,
    "dataQuality": {
      "veracity": 5,
      "completeness": 1,
      "confidence": 0.64,
      "recency": 0.99,
      "last_verified_days_ago": 4
    },
    "price": {
      "level": 2,
      "avg": 8000,
      "min": 4500,
      "max": 12000
    },
    "menuSummary": {
      "count": 12,
      "items": [
        "콩나물국밥",
        "수육",
        "모둠전"
      ]
    },
    "openNow": {
      "open": true,
      "reason": "open",
      "lastOrderPassed": false
    },
    "closureSignal": null,
    "promotion": null,
    "nearestStation": {
      "station": "홍제",
      "walkMin": 5
    },
    "photoCount": 5,
    "photos": {
      "count": 5,
      "main": "https://<supabase>/storage/v1/object/public/owner-photos/<uid>/11892345/1718000000000.jpg",
      "gallery": [
        {
          "category": "interior",
          "url": "https://<supabase>/storage/v1/object/public/owner-photos/<uid>/11892345/1718000000000.jpg",
          "isMain": true
        },
        {
          "category": "exterior",
          "url": "https://<supabase>/storage/v1/object/public/owner-photos/<uid>/11892345/1718000000001.jpg",
          "isMain": false
        }
      ],
      "menu": [
        {
          "menuItem": "콩나물국밥",
          "url": "https://<supabase>/storage/v1/object/public/owner-photos/<uid>/11892345/1718000000002.jpg"
        }
      ],
      "menuBoard": [
        "https://<supabase>/storage/v1/object/public/owner-photos/<uid>/11892345/1718000000003.jpg"
      ]
    },
    "phone": "02-123-4567",
    "homepage": null,
    "bookingUrl": null,
    "yumiReservable": false,
    "reservationChannels": [
      "phone"
    ],
    "snsLinks": null,
    "businessHours": [
      {
        "day": "mon",
        "closed": false,
        "open": "00:00",
        "close": "24:00",
        "endsNextDay": false,
        "breaks": [],
        "lastOrder": null
      }
    ],
    "is24h": true,
    "accessHints": {
      "subway": [
        {
          "station": "홍제",
          "lines": [
            "3호선"
          ],
          "distanceM": 360,
          "walkMin": 5
        },
        {
          "station": "무악재",
          "lines": [
            "3호선"
          ],
          "distanceM": 920,
          "walkMin": 13
        }
      ]
    },
    "recommendedFor": [
      "solo_dining",
      "late_night",
      "late_night_eatery"
    ],
    "atmosphere": [
      "캐주얼",
      "빠른"
    ],
    "menu": [
      {
        "name": "콩나물국밥",
        "price": 8000,
        "recommend": true,
        "isNew": false,
        "description": "24시간 끓인 진한 국물에 아삭한 콩나물."
      },
      {
        "name": "매생이굴국밥",
        "price": 9500,
        "recommend": false,
        "isNew": true
      }
    ],
    "serviceAttributes": {
      "parking": true,
      "parking_type": "onsite",
      "parking_fee": "paid",
      "parking_note": "매장 주차 가능(유료)",
      "dine_in": true,
      "reservable": true,
      "foreign_languages": [
        "en"
      ],
      "dietary": {
        "fully_vegan": false,
        "vegan_options": true,
        "vegetarian_options": true,
        "mixed_group_suitable": true,
        "vegan_menu_count": 3,
        "vegan_main_count": 2,
        "non_vegan_menu_count": 8,
        "confidence": 0.62,
        "note": "비건 메뉴와 일반 메뉴가 함께 있어 비건과 비(非)비건이 같이 가기 좋아요. 조리 분리는 확인이 필요해요."
      }
    },
    "atmosphereScores": {
      "late_night": 6,
      "late_night_eatery": 8,
      "quiet": 6.5,
      "lively": 4
    },
    "aiSummary": "홍제역 근처 캐주얼 국밥집, 혼밥·심야식당 수요에 적합."
  }
}
GET/api/v1/places/{id}/history

Place history

Daily rating and activity-freshness (freshnessScore) trend (accumulated snapshots). A signal you can use to judge changes in a place's activity yourself.

Auth required (Bearer / X-API-Key header preferred)

Run in playground →

Parameters

  • idstringrequiredPlace id (canonical) · example: 11782345

Response example

json

{
  "success": true,
  "data": [
    {
      "date": "2026-06-18",
      "reviewCount": 10731,
      "rating": null,
      "latestReviewDate": "2026-06-15",
      "freshnessScore": 0.82
    }
  ]
}
GET/api/v1/regions

Regions · resolve dong name

Resolves a dong (neighborhood) name into codes & coordinates (location lookup when you have no GPS). Dong names are not unique (e.g. Hongje-dong = Seoul Seodaemun-gu + Gangwon Gangneung), so candidates are returned disambiguated by sido/sigungu, with place counts and a representative center. Feed a chosen center into /places/nearby to also cover adjacent dongs. Without dong, lists all regions that have places.

Auth required (Bearer / X-API-Key header preferred)

Run in playground →

Parameters

  • dongstringoptionalDong name (e.g. 홍제동) — returns candidates · example: 홍제동
  • sigungustringoptionalNarrow by sigungu (e.g. 서대문구)
  • sidostringoptionalNarrow by sido (e.g. 서울특별시)
  • region_codestringoptionalLook up a single region code
  • include_emptybooleanoptionalInclude regions with no places yet (default false)

Response example

json

{
  "success": true,
  "data": [
    {
      "regionCode": "1141011100",
      "sido": "서울특별시",
      "sigungu": "서대문구",
      "dong": "홍제동",
      "fullName": "서울특별시 서대문구 홍제동",
      "center": {
        "lat": 37.577976,
        "lng": 126.938483
      },
      "placeCount": 280
    }
  ]
}
GET/api/v1/categories

Categories

Place counts per category in the oneset.

Auth required (Bearer / X-API-Key header preferred)

Run in playground →

Parameters

No parameters

Response example

json

{
  "success": true,
  "data": [
    {
      "category": "restaurant",
      "count": 82140
    }
  ]
}
GET/api/v1/stats

Dataset stats

Total places, regions, multi-source share, average confidence, category breakdown.

Auth required (Bearer / X-API-Key header preferred)

Run in playground →

Parameters

No parameters

Response example

json

{
  "success": true,
  "data": {
    "totalPlaces": 143027,
    "totalRegions": 512,
    "multiSourcePlaces": 70118,
    "avgConfidence": 0.72,
    "byCategory": [
      {
        "category": "restaurant",
        "count": 82140
      },
      {
        "category": "cafe",
        "count": 51730
      },
      {
        "category": "bar",
        "count": 9157
      }
    ]
  }
}
GET/api/v1/meta

Filter & field vocabulary

Key-free (no billing, 1h cache). Returns the supported attribute filters, values, natural-language aliases, and field tiers. The single source of truth for filter vocabulary, which MCP and SDKs sync from automatically.

Key-free · no billing

Run in playground →

Parameters

No parameters

Response example

json

{
  "version": 1,
  "filters": {
    "boolean": [
      "wifi",
      "parking",
      "outdoor_seating",
      "pet_friendly",
      "group_friendly",
      "kids_friendly",
      "reservable",
      "takeout",
      "delivery",
      "dine_in",
      "catering",
      "corkage_free",
      "wheelchair_accessible",
      "high_chair",
      "no_kids_zone",
      "smoking_area",
      "restroom_gender_separated",
      "power_outlets",
      "stroller_storage",
      "deposit_required",
      "restroom_clean",
      "waiting_expected",
      "leftover_packing",
      "repeat_customers",
      "private_room",
      "has_promotion"
    ],
    "enum": {
      "parking_type": [
        "onsite",
        "valet",
        "partner",
        "nearby",
        "none"
      ]
    },
    "array": {
      "payment_methods": [
        "cash",
        "card",
        "toss_pay",
        "kakao_pay",
        "naver_pay",
        "zero_pay",
        "local_gift",
        "gov_support",
        "alipay",
        "wechat_pay"
      ],
      "serves": [
        "coffee",
        "alcohol",
        "dessert",
        "vegetarian",
        "vegan"
      ],
      "dietary": [
        "vegan_options",
        "vegetarian_options",
        "fully_vegan",
        "mixed_group_suitable"
      ],
      "foreign_languages": [
        "en",
        "zh",
        "ja",
        "es",
        "de",
        "fr"
      ],
      "recommended_for": [
        "solo_dining",
        "solo_drinking",
        "date",
        "group_dining",
        "group_drinking",
        "family",
        "business_meeting",
        "formal_gathering",
        "late_night",
        "late_night_eatery"
      ],
      "atmosphere": [
        "cozy",
        "quiet",
        "lively",
        "spacious",
        "view",
        "trendy",
        "traditional",
        "clean",
        "work_study",
        "rainy_mood"
      ]
    },
    "aliases": {
      "recommended_for": {
        "회식": "group_dining",
        "혼밥": "solo_dining",
        "상견례": "formal_gathering"
      },
      "atmosphere": {
        "조용한": "quiet",
        "뷰맛집": "view"
      },
      "parking_type": {
        "발렛": "valet"
      },
      "foreign_languages": {
        "영어": "en",
        "일본어": "ja"
      }
    }
  },
  "fields": {
    "tiers": {
      "core": 1,
      "contact_hours": 2,
      "quality": 2,
      "edge": 4,
      "media": 8
    },
    "byField": {
      "name": "core",
      "rating": "quality",
      "serviceAttributes": "edge",
      "photos": "media"
    }
  }
}
POST/api/v1/reservations

Request a reservation

Request a table reservation at a Yumi Partner venue (detail shows yumiReservable=true). No prepayment. On success the owner's app gets an instant push and the response starts as status='pending' (not yet confirmed). The owner accepting → confirmed, declining → cancelled, no response (~5 min) → expired. Poll the status endpoint (GET) for the outcome. The guest is texted progress via KakaoTalk/SMS. Non-partners return 422 reservation_not_available (do not retry — point to the external bookingUrl/phone). Pass idempotencyKey to safely retry the same request without creating duplicates.

Auth required (Bearer / X-API-Key header preferred)

Parameters

No parameters

Request body (JSON)

  • placeIdstringrequiredCanonical place id. Get it from a search first. · example: 11782345
  • reservationTimestringrequiredRequested date & time in ISO 8601 with timezone offset (future). Korea is +09:00. · example: 2026-09-01T19:00:00+09:00
  • guestCountintegerrequiredParty size (at least 1). · example: 2
  • guestPhonestringrequiredGuest phone (required) — for status texts (KakaoTalk/SMS) and no-show contact. Missing → guest_phone_required. · example: 010-1234-5678
  • guestNamestringoptionalGuest name (recommended) so the owner knows who's coming. · example: 홍길동
  • notestringoptionalOptional note to the owner (seating, occasion, allergies).
  • idempotencyKeystringoptionalStable key to safely retry the same reservation. Auto-generated if omitted.

Response example

json

{
  "success": true,
  "data": {
    "reservationId": "b1f2c3d4-0000-0000-0000-000000000000",
    "status": "pending",
    "placeId": "11782345",
    "expiresAt": "2026-09-01T10:05:00.000Z"
  }
}
GET/api/v1/reservations/{id}

Reservation status (long-poll)

Check a reservation's current status. status: pending, confirmed, cancelled, expired, no_show. Pass ?wait=<sec> (max 25) to long-poll — it returns the moment the reservation settles (confirmed/cancelled/expired); if still pending, call again to fill the ~5-minute window, then report the final settled outcome.

Auth required (Bearer / X-API-Key header preferred)

Parameters

  • idstringrequiredThe reservationId returned by the create call. · example: b1f2c3d4-0000-0000-0000-000000000000
  • waitintegeroptionalLong-poll seconds (0-25). Omit for a one-shot check. · example: 25

Response example

json

{
  "success": true,
  "data": {
    "reservationId": "b1f2c3d4-0000-0000-0000-000000000000",
    "placeId": "11782345",
    "status": "confirmed",
    "settled": true,
    "reservationTime": "2026-09-01T19:00:00+09:00",
    "guestCount": 2,
    "approvedAt": "2026-09-01T10:02:11.000Z",
    "createdAt": "2026-09-01T10:00:00.000Z",
    "expiresAt": "2026-09-01T10:05:00.000Z"
  }
}
POST/api/v1/live-status

Live status (ask the venue right now)

Send the owner a time-sensitive question that map/review/static data can't answer and that changes through the day — (A) is this menu item available now / today's fresh stock / sold out (kind=item), (D) how long is the wait right now (kind=wait), (E) can a party of N get in right now (kind=seats, headcount required). Same rail as reservations: at a venue with an active owner (on the Yumi Partners app) the app gets an instant push and the response starts as status='pending' (5-minute answer window). The owner answers with one tap → available, limited, unavailable, soon, or not_offered; poll GET /api/v1/live-status/{queryId} (long-poll) for the outcome. To avoid re-bothering the owner, if a fresh answer already exists for the same venue+topic it's reused instantly (reused=true), and a pending identical question is joined. If 'now' is outside confirmed opening hours the owner is not disturbed and you get blocked='closed_now' immediately (do not retry — surface the hours). Venues without an active owner return 422 live_status_not_available. Do not use this for static info like hours, parking, or pet policy — answer those from search.

Auth required (Bearer / X-API-Key header preferred)

Parameters

No parameters

Request body (JSON)

  • placeIdstringrequiredCanonical place id. Get it from a search first. · example: 11782345
  • kindstringrequiredQuestion kind: item (menu/stock) · wait (queue) · seats (immediate seating, include headcount). · example: item
  • topicstringrequiredThe subject as a bare token, not a sentence. e.g. '두바이 쫀득 쿠키', 'yellowtail', 'wait', 'party of 10'. For item, use the venue's actual menu name. · example: 두바이 쫀득 쿠키
  • questionstringoptionalThe guest's original wording (optional), for owner context. · example: 지금 두바이 쫀득 쿠키 있어요?

Response example

json

{
  "success": true,
  "data": {
    "queryId": "c2e4f6a8-0000-0000-0000-000000000000",
    "placeId": "11782345",
    "kind": "item",
    "topic": "두바이 쫀득 쿠키",
    "status": "pending",
    "note": null,
    "settled": false,
    "fresh": false,
    "interestedCount": 1,
    "expiresAt": "2026-09-04T00:05:00.000Z"
  }
}
GET/api/v1/live-status/{queryId}

Live status result (long-poll)

Check a live question's current status. status: pending, available, limited, unavailable, soon, not_offered, no_response (owner didn't answer in 5 min). Pass ?wait=<sec> (max 25) to long-poll — it returns the moment the owner answers or the 5-minute window lapses (settled); if still pending, call again to fill the ~5-minute window, then report the result with the verified time. note may carry the owner's extra memo (e.g. wait '20분', 'we can seat you separately'). verifiedAt = when it was confirmed; validUntil = how long the answer stays reusable for other guests (varies by kind).

Auth required (Bearer / X-API-Key header preferred)

Parameters

  • queryIdstringrequiredThe queryId returned by the create call. · example: c2e4f6a8-0000-0000-0000-000000000000
  • waitintegeroptionalLong-poll seconds (0-25). Omit for a one-shot check. · example: 25

Response example

json

{
  "success": true,
  "data": {
    "queryId": "c2e4f6a8-0000-0000-0000-000000000000",
    "placeId": "11782345",
    "kind": "wait",
    "topic": "웨이팅",
    "status": "limited",
    "note": "20분",
    "settled": true,
    "verifiedAt": "2026-09-04T00:02:30.000Z",
    "verifiedBy": "merchant",
    "validUntil": "2026-09-04T00:12:30.000Z",
    "fresh": true,
    "interestedCount": 3,
    "createdAt": "2026-09-04T00:00:00.000Z",
    "expiresAt": "2026-09-04T00:05:00.000Z"
  }
}
GET/api/v1/live-status

Fresh live answer (optional)

If a still-valid owner-confirmed answer exists for placeId + topic, it's returned without asking (found:true + status, note, verifiedAt, validUntil). Otherwise found:false — then POST to ask fresh. You usually only need POST (it reuses on its own); use this only to peek at 'just-confirmed' info without triggering anything.

Auth required (Bearer / X-API-Key header preferred)

Parameters

  • placeIdstringrequiredCanonical place id. · example: 11782345
  • topicstringrequiredThe subject token (same as POST's topic). · example: 두바이 쫀득 쿠키

Response example

json

{
  "success": true,
  "data": {
    "found": true,
    "queryId": "c2e4f6a8-0000-0000-0000-000000000000",
    "placeId": "11782345",
    "kind": "item",
    "topic": "두바이 쫀득 쿠키",
    "status": "available",
    "note": null,
    "verifiedAt": "2026-09-04T00:02:30.000Z",
    "verifiedBy": "merchant",
    "validUntil": "2026-09-04T00:32:30.000Z",
    "fresh": true,
    "interestedCount": 4
  }
}

Hide Me Please, Inc.

© 2026 Hide Me Please, Inc. All rights reserved.

Business reg. no. 777-86-02664

Representative Yuhyun

E-commerce license 2023-Seoul Jung-gu-0094

2F, 33 Eulji-ro 11-gil, Jung-gu, Seoul 04543

Customer support +82 70-7954-1357

Email ixplorer@hidemeplease.xyz

Privacy officer Yuhyun

Hosting provider Vercel Inc.