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

Authentication

Scope

key가 호출할 수 있는 서비스와 API의 범위를 정의합니다.

managed key는 기본적으로 전체 scope를 가집니다. 카탈로그의 모든 서비스를 읽고 쓸 수 있다는 뜻입니다. scope는 key별로 그 범위를 좁혀서, 유출되거나 잘못 쓰인 key가 허용된 것 이상을 하지 못하게 합니다.

scope 형식

scope는 <providerId>:read 또는 <providerId>:write 형식입니다. <providerId> 자리에는 서비스 id가 들어가며, API 레퍼런스 경로의 첫 세그먼트와 같습니다. 예: catch-table, baemin. scope는 key를 발급할 때 지정하며 하나의 key에 여러 개를 조합할 수 있습니다. 읽기와 쓰기 구분은 HTTP 메서드를 따릅니다. GET은 read, POST와 DELETE 같은 변경 호출은 write입니다.

  • <providerId>:read는 해당 서비스의 읽기 API를 허용합니다.
  • <providerId>:write는 쓰기 API를 허용하며, 같은 서비스의 read를 함께 포함합니다. write만 부여해도 조회가 가능합니다.
  • *:read는 유일한 wildcard입니다. 현재와 이후에 추가될 모든 서비스의 읽기를 허용하지만, 어떤 쓰기도 허용하지 않습니다. 쓰기 wildcard는 없습니다.
  • scope를 지정하지 않은 key는 전체 scope, 즉 모든 서비스의 읽기와 쓰기를 가집니다.

scope 조합 예시

scope 조합허용거부
catch-table:readSearch restaurants, Get availability 같은 Catch Table 읽기Catch Table 쓰기와 다른 모든 서비스
catch-table:writeCreate reservation을 포함한 Catch Table 전체. write가 read를 포함합니다.다른 모든 서비스
*:read모든 서비스의 읽기모든 쓰기
*:read, catch-table:write모든 서비스의 읽기와 Catch Table 쓰기다른 서비스의 쓰기
(지정 없음)전체 scope. 모든 서비스의 읽기와 쓰기없음

scope_denied에 대응하기

key가 scope 밖의 호출을 하면 게이트웨이가 서비스에 아무것도 전달하기 전에 403으로 응답합니다. 에러 envelope의 code는 scope_denied이고 retryable은 false입니다. 같은 key로 같은 요청을 재시도해도 결과는 바뀌지 않습니다. 응답에 provider 필드가 없는 것은 이 에러가 서비스가 아니라 게이트웨이에서 발생하기 때문입니다.

읽기 전용 key로 시도한 쓰기
# 이 key의 scope는 catch-table:read뿐입니다.
curl -X POST "https://api.frism.dev/v1/catch-table/reservations" \
  -H "Authorization: Bearer frism_test_k3xample" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: idem_b1f7c2d0" \
  -d '{
    "restaurant_id": "res_01J8Q9W3TE",
    "slot_id": "slt_1900_2",
    "party_size": 2,
    "contact_name": "Han Jiwoo"
  }'
403 응답
{
  "error": {
    "code": "scope_denied",
    "message": "This key does not carry catch-table:write.",
    "request_id": "req_01J8QGX2M4",
    "retryable": false
  }
}

scope_denied는 런타임 상황이 아니라 설정 버그로 취급합니다. request_id를 로그에 남기고, key의 scope 또는 코드 경로를 고칩니다. 분기는 항상 error.code로 하고 message는 파싱하지 않습니다.

envelope code로 분기하기
const response = await fetch(
  "https://api.frism.dev/v1/catch-table/reservations",
  {
    method: "POST",
    headers: {
      Authorization: `Bearer ${process.env.FRISM_API_KEY}`,
      "Content-Type": "application/json",
      "Idempotency-Key": "idem_b1f7c2d0",
    },
    body: JSON.stringify({
      restaurant_id: "res_01J8Q9W3TE",
      slot_id: "slt_1900_2",
      party_size: 2,
      contact_name: "Han Jiwoo",
    }),
  },
);

if (!response.ok) {
  const { error } = await response.json();
  if (error.code === "scope_denied") {
    // 설정 문제입니다. 재시도하는 대신 key의 scope를 확인합니다.
    throw new Error(`Missing scope for catch-table (${error.request_id})`);
  }
  throw new Error(`${error.code}: ${error.message}`);
}

const reservation = await response.json();

프로덕션에서의 최소 권한

sandbox에서는 전체 scope의 key로 자유롭게 실험해도 됩니다. 반면 live key는 유출되었을 때의 피해 범위가 곧 부여한 scope의 범위입니다. live 전환 전에 다음을 적용합니다.

  • 워크로드마다 key를 하나씩 발급하고, 그 워크로드가 실제로 호출하는 서비스로만 scope를 좁힙니다. 리포팅 작업에는 *:read, 예약 백엔드에는 catch-table:write가 어울립니다.
  • 코드가 실제로 무언가를 변경하기 전까지는 read만 부여합니다. 나중에 write를 추가하는 것은 대시보드 설정과 일 뿐, 코드 변경이 아닙니다.
  • 서비스가 beta에서 available로 바뀌면 를 확인하고 key의 scope를 다시 점검합니다.
scope는 서비스와 API를 막는 장치이며 응답 필드를 필터링하지 않습니다. read scope의 key도 전체 scope의 key와 같은 payload를 받습니다.

scope에 쓰는 서비스 id는 각 서비스의 API 레퍼런스(예: )에서 확인합니다. 403을 포함한 모든 상태 코드 매핑은 에 있습니다.

key 교체
체인지로그
Catch Table
에러 모델