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
문서서비스플레이그라운드상태
로그인회원가입

Errors

에러 모델

서비스 장애와 게이트웨이 에러를 하나의 에러 모델로 정규화합니다.

실패한 호출은 어디서 실패했든 같은 JSON 본문으로 돌아옵니다. Catch Table이 거부한 취소와 게이트웨이가 발생시킨 rate limit이 하나의 구조를 공유하므로, 에러 처리 코드는 한 번만 작성하면 카탈로그의 모든 서비스에 재사용할 수 있습니다.

Envelope 구조

2xx가 아닌 모든 응답의 본문은 아래 형태입니다. provider와 retryable은 선택 필드이고, 나머지 세 필드는 항상 존재합니다.

에러 envelope
{
  "error": {
    "code": "provider_unavailable",
    "message": "Catch Table did not answer within the gateway deadline.",
    "request_id": "req_01J8QGX2M4",
    "provider": "catch-table",
    "retryable": true
  }
}
  • code: 기계가 분기할 수 있는 안정적인 식별자입니다. 아래 표의 8개 값 중 하나입니다.
  • message: 사람이 읽는 설명입니다. 파싱하지 않습니다.
  • request_id: 이 요청의 식별자입니다. 지원 문의 시 함께 전달합니다.
  • provider: 에러가 제휴 서비스에서 발생했을 때만 존재합니다.
  • retryable: 같은 요청을 backoff와 함께 재시도하면 성공할 수 있을 때 true입니다.

Status와 code 매핑

HTTP status는 에러를 큰 범주로 묶고, code는 정확한 케이스를 지정합니다. 매핑은 고정되어 있습니다.

HTTPcode의미재시도
400invalid_request요청이 스키마 검증을 통과하지 못했습니다.불가
401unauthorizedmanaged key가 없거나 유효하지 않습니다.불가
403scope_deniedkey의 scope가 이 서비스 또는 API를 허용하지 않습니다.불가
404not_found경로의 리소스가 존재하지 않습니다.불가
409conflict리소스의 현재 상태와 충돌합니다. 예: 이미 소진된 슬롯.불가
422provider_rejected서비스의 정책이 요청을 거부했습니다.불가
429rate_limitedrate limit을 초과했습니다. Retry-After 헤더가 함께 옵니다.가능
502provider_unavailable제휴 서비스가 응답하지 않았습니다.가능
code 목록은 안정적으로 유지됩니다. 새 code는 에 먼저 공지되며, 항상 기존 status 아래로 추가됩니다.

서비스 에러와 게이트웨이 에러

provider 필드가 에러의 출처를 알려줍니다. 필드가 있으면 요청이 게이트웨이를 통과해 서비스까지 도달했고 거기서 거부되거나 실패했다는 뜻입니다. 401, 403, 429처럼 게이트웨이에서 끝난 에러에는 이 필드가 없습니다. 반대로 422 provider_rejected와 502 provider_unavailable은 항상 서비스에서 발생하므로 필드가 항상 존재합니다.

이 구분이 대응 방법을 결정합니다. 게이트웨이 에러는 요청 자체(key, scope, 스키마)를 고치면 해결됩니다. 서비스 에러는 서비스 쪽 상태(취소 정책, 슬롯 재고, 가용성)가 원인이므로, 요청을 고쳐도 결과가 달라지지 않는 경우가 많습니다.

request_id와 지원 문의

모든 에러에는 request_id가 포함됩니다. 게이트웨이 로그와 서비스 호출 기록이 이 식별자 하나로 연결되어 있으므로, 지원 문의 시 이 값을 함께 전달하면 재현 과정 없이 바로 추적할 수 있습니다. 예상하지 못한 에러는 code와 request_id를 함께 로깅해 두는 것을 권장합니다.

422 직접 재현하기

매장의 취소 마감이 지난 예약에 을 호출하면 422가 반환됩니다. sandbox key가 없다면 에서 발급합니다.

취소 마감이 지난 예약 취소
curl -X DELETE "https://api.frism.dev/v1/catch-table/reservations/rsv_01J8QDGT2K" \
  -H "Authorization: Bearer frism_test_k3xample"
422 provider_rejected
{
  "error": {
    "code": "provider_rejected",
    "message": "The venue's cancellation window has closed.",
    "request_id": "req_01J8QH54N8",
    "provider": "catch-table",
    "retryable": false
  }
}

code로 분기하기

에러 처리 로직은 항상 code로 분기합니다. message는 사람에게 보여주거나 로그에 남기는 용도이며, 표현이 예고 없이 바뀔 수 있습니다. status만으로 분기하는 것도 피합니다. status는 범주만 알려주고, 같은 status 아래에 더 구체적인 code가 추가될 수 있기 때문입니다.

code 기준 분기
const response = await fetch(
  "https://api.frism.dev/v1/catch-table/reservations/rsv_01J8QDGT2K",
  {
    method: "DELETE",
    headers: { Authorization: "Bearer frism_test_k3xample" },
  },
);

if (!response.ok) {
  const { error } = (await response.json()) as {
    error: {
      code: string;
      message: string;
      request_id: string;
      provider?: string;
      retryable?: boolean;
    };
  };

  switch (error.code) {
    case "provider_rejected":
      // 정책상 거부입니다. 재시도 대신 사용자에게 안내합니다.
      break;
    case "rate_limited":
    case "provider_unavailable":
      // backoff 후 재시도합니다.
      break;
    default:
      // 예상하지 못한 code는 request_id와 함께 로깅합니다.
      console.error(error.code, error.request_id);
  }
}

재시도해도 되는 에러와 backoff 규칙은 에서 다룹니다. API별 에러 응답 전체는 각 서비스의 API 레퍼런스(예: )에 문서화되어 있습니다.

changelog
Cancel reservation
빠른 시작
재시도 가이드
Catch Table