APIFuseAPIFuseDocs

Getting started

  • 개요
  • 빠른 시작

Authentication

  • Managed key
  • Scope

Errors

  • 에러 모델
  • 재시도

Webhooks

  • 개요
  • 서명 검증

API reference

  • 아마존 재팬
  • 배달의민족 프로바이더
  • 빗썸
  • Buyee
  • 캐치테이블 음식점 검색 및 예약
  • 차란 커머스
  • 당근 공개 매물
  • 다이소 상품 및 매장 데이터
  • 다나와 가격 비교
  • Demaecan
  • 에키탄
  • 여기어때 국내 숙소
  • Google Flights
  • 한강 수위
  • 핫페퍼 구루메(Hot Pepper Gourmet) 프로바이더
  • 현대카드
  • 인천공항 여객편 운항현황
  • Jalan
  • 일본 국회 회의록
  • 일본 재난 알림
  • 일본 EDINET 공시 서류
  • 일본 e-Gov 법령
  • 일본 e-Stat
  • 일본 gBizINFO (경제산업성 법인정보)
  • 일본 GSI 지오코딩
  • 일본 e-Gov 오픈데이터
  • Japan Post ZIP
  • 일본 공휴일
  • JMA Weather
  • 카카오맵 장소 검색과 길찾기
  • 카카오 T 택시 호출
  • 카카오톡 네이티브 메시징
  • 한국 주소 검색
  • AirKorea 실시간 대기오염 정보
  • 전국 동물병원
  • 한국 아파트 전월세 실거래가
  • 한국 아파트 매매 실거래가
  • 나라장터 입찰공고
  • 한국 박스오피스
  • 건축물대장 (Korea Building Register)
  • 전국 버스 도착정보
  • Korea Business Verify
  • 대한민국 캠핑장
  • 한국 DART 기업 재무정보
  • DART 기업 정보
  • 한국 문화행사(한눈에 보는 문화정보)
  • 한국 재난 알림
  • 한국 응급의료기관
  • 한국 ETF
  • 한국 전기차 충전소
  • 한국 환율 (한국수출입은행)
  • 한국 고속도로 교통
  • 금융상품 비교공시 (금융감독원 금융상품한눈에)
  • 한국 주유소 유가
  • 국가유산 정보 (국가유산청)
  • Korea Holiday
  • Korea Hospital Info
  • 전국 고속·시외버스 시간표
  • 한국 토지 매매 실거래가
  • 식약처 의약품 안전정보
  • 식약처 식품 안전 정보
  • 생활쓰레기 배출정보
  • 국가법령정보 검색·조회
  • NEIS 학교 급식 식단
  • 배송사 목록 및 택배 배송 조회
  • 전국 주차장
  • 공연예술 정보 (KOPIS)
  • Korea Pharmacy
  • 한국 인구 통계
  • 한국 주식시장지수
  • 한국 주식 시세
  • 전국 상가업소 정보
  • 한국 유기동물 (국가동물보호정보시스템)
  • 한국 관광정보 (한국관광공사)
  • 한국 열차 시간표
  • 한국 기상청 예보 데이터
  • Korea Weather Forecast
  • 대한민국 복지서비스
  • K-Startup
  • LH 청약 공고
  • 마켓컬리 상품 데이터
  • Mercari
  • 모두의주차장
  • 네이버 블로그 검색
  • 네이버 항공권 API
  • 네이버 지역 검색
  • 네이버 지도
  • 네이버 뉴스 검색
  • NHK 편성표
  • NOL 숙소
  • 오늘의집 스토어 및 콘텐츠
  • 라쿠텐 북스
  • 라쿠텐 이치바
  • 라쿠텐 레시피
  • 라쿠텐 트래블
  • SEC EDGAR Filings
  • 서울 따릉이
  • 서울 실시간 혼잡도
  • 서울 지하철 실시간 도착
  • 신한은행
  • 신한카드
  • Skiplagged
  • Steam 스토어
  • SUUMO
  • 스윙 택시
  • Tabelog
  • TableCheck
  • 업비트
  • Visit Japan Web (일본 입국 수속 서비스)
  • Weverse 프로바이더
  • 야후! 쇼핑 (일본)
  • Yogiyo
  • ZOZOTOWN

Guides

  • APIFuse 문서
  • 시작하기
  • 인증과 connection
  • 플레이그라운드
  • OpenAPI와 스키마 아티팩트
  • MCP 엔드포인트
  • 개발자 MCP 가이드
  • 스키마 번들과 변환 경고
  • Next.js App Router 연동
  • FastAPI 연동
  • 에러 처리
  • 자주 묻는 질문
  • 추가 리소스

Changelog

  • 체인지로그
APIFuseAPIFuse
문서서비스플레이그라운드상태
로그인회원가입

Getting started

빠른 시작

sandbox key를 발급받고 첫 예약 생성까지 진행합니다.

전체 흐름은 key 발급, 매장 검색, availability 조회, 예약 생성의 네 단계이며, 모두 Catch Table sandbox에서 진행합니다. 필요한 것은 터미널과 fetch를 지원하는 런타임뿐입니다. 아래의 모든 호출은 sandbox fixture로 응답되므로 실제 매장에는 어떤 요청도 전달되지 않습니다.

Sandbox key 발급

APIFuse의 key는 두 종류입니다. live key는 frism_live_, sandbox key는 frism_test_로 시작합니다. 둘 다 managed key이므로 서비스별 credential은 APIFuse이 보관하고, Catch Table 계정을 직접 만들 일은 없습니다.

  1. APIFuse 콘솔에 로그인하고 프로젝트를 만듭니다.
  2. API keys에서 sandbox key를 생성합니다. key는 frism_test_로 시작하며 발급 시 한 번만 표시되므로 secret manager에 보관합니다.
  3. scope는 기본값 그대로 둡니다. 새 key는 전체 scope로 시작하며, 이후 catch-table:read와 catch-table:write로 좁힐 수 있습니다. 자세한 내용은 scope를 참고합니다.
sandbox key는 실제 매장에 도달하지 않습니다. 모든 요청이 fixture 데이터로 응답되므로 예약을 자유롭게 만들고 취소해도 됩니다.

첫 호출: 매장 검색

먼저 예약 가능한 매장을 찾습니다. Search restaurants는 area, cuisine, party_size로 필터링하고 cursor 기반으로 페이지네이션합니다.

매장 검색
curl "https://api.frism.dev/v1/catch-table/restaurants?area=seongsu&cuisine=japanese&party_size=2" \
  -H "Authorization: Bearer frism_test_k3xample"

응답을 일부 줄이면 다음과 같습니다. 각 항목의 id가 이후 호출에 사용할 매장 식별자입니다. bookable_online이 false인 매장은 waitlist 등록만 받습니다.

200 응답 (일부)
{
  "items": [
    {
      "id": "res_01J8Q9W3TE",
      "name": "Sushi Aoyagi",
      "area": "seongsu",
      "cuisine": "japanese",
      "price_band": "high",
      "bookable_online": true
    }
  ],
  "next_cursor": "cur_9f2kq"
}

next_cursor를 cursor 파라미터로 넘기면 다음 페이지를 받습니다. 마지막 페이지에서는 null입니다.

TypeScript로 availability 조회와 예약 생성

예약은 두 호출로 완성됩니다. 가 날짜와 일행 수 기준의 열린 슬롯을 반환하고, 이 그중 하나를 예약합니다. POST에는 Idempotency-Key 헤더를 붙입니다. 타임아웃이나 프로세스 중단 후에도 같은 키로 24시간 동안 안전하게 재시도할 수 있습니다.

슬롯 조회 후 예약 생성
const base = "https://api.frism.dev/v1";
const headers = { Authorization: "Bearer frism_test_k3xample" };

// 1. 날짜와 일행 수 기준으로 열려 있는 슬롯을 조회합니다.
const availabilityRes = await fetch(
  base +
    "/catch-table/restaurants/res_01J8Q9W3TE/availability" +
    "?date=2026-09-02&party_size=2",
  { headers },
);
const availability = await availabilityRes.json();
const slot = availability.slots[0];
// slot: { slot_id: "slt_1900_2", starts_at: "2026-09-02T19:00:00+09:00" }

// 2. 슬롯을 예약합니다. Idempotency-Key가 이 POST의 재시도를 안전하게 만듭니다.
const created = await fetch(base + "/catch-table/reservations", {
  method: "POST",
  headers: {
    ...headers,
    "Content-Type": "application/json",
    "Idempotency-Key": "idem_b1f7c2d0",
  },
  body: JSON.stringify({
    restaurant_id: "res_01J8Q9W3TE",
    slot_id: slot.slot_id,
    party_size: 2,
    contact_name: "Han Jiwoo",
    note: "Window seat if possible.",
  }),
});

console.log(created.status); 
console.log( created.json());

성공하면 게이트웨이가 201과 함께 예약 본문을 반환합니다.

201 응답
{
  "id": "rsv_01J8QDGT2K",
  "status": "confirmed",
  "restaurant_id": "res_01J8Q9W3TE",
  "starts_at": "2026-09-02T19:00:00+09:00",
  "party_size": 2
}

status가 confirmed인 것은 이 매장이 즉시 확정하기 때문입니다. 매장 승인이 필요한 곳은 pending으로 시작하고, 확정되는 시점에 reservation.confirmed 이벤트가 으로 도착합니다. 폴링보다 webhook 구독을 권장합니다.

두 호출 사이에 슬롯이 소진되면 409와 code conflict가 표준 로 반환됩니다. availability를 다시 조회한 뒤 다른 슬롯으로 시도합니다.

뒤에서 일어난 일

이 과정에서 key는 Catch Table에 전달되지 않았습니다. 게이트웨이가 경로의 catch-table 세그먼트를 해석하고, key의 scope를 확인한 뒤, APIFuse이 보관 중인 매장 credential로 예약을 수행하고 응답을 위의 스키마로 정규화했습니다. 서비스 장애도 같은 방식으로 돌아옵니다. 502와 provider_unavailable이 같은 envelope에 담기고 retryable: true가 표시되므로, 클라이언트는 backoff 로 이어갈 수 있습니다. 이 구조 덕분에 다른 서비스를 붙일 때에도 인증과 에러 처리 코드는 그대로 재사용됩니다.

다음 단계

  • 로 key의 범위를 좁혀 production에 대비합니다.
  • 로 상태 변화를 구독하고, 으로 수신한 payload를 확인합니다.
  • 과 으로 실패 처리를 설계합니다.
  • 에서 전체 API를 확인하고, 에서 다른 서비스를 살펴봅니다.
// 201
await
Get availability
Create reservation
webhook
Get reservation
에러 envelope
재시도
scope
webhook 개요
서명 검증
에러 모델
재시도 규칙
Catch Table 레퍼런스
서비스 카탈로그