← Billbook 으로 돌아가기

원격 가계부 API

최종 업데이트: 2026년 5월 10일

개인 API 토큰으로 cURL, iOS 단축어, 자동화 스크립트에서 원격으로 기록할 수 있습니다. 토큰은 쓰기 전용으로, 거래 추가 및 카테고리·태그 목록 조회는 가능하지만 거래 데이터를 읽거나 삭제할 수는 없습니다.

1. 토큰 받기

admin 으로 로그인하여 설정 → 🔑 원격 가계부 API 를 열고 "토큰 생성" 을 누르세요.

평문 토큰은 한 번만 표시되므로 즉시 복사해 두세요. 서버는 SHA-256 해시만 저장하므로 분실 시 재생성(기존 토큰 무효화)하는 방법뿐입니다.

토큰 형식: bb_<userId>_<secret>. 모든 요청에 Authorization: Bearer <token> 으로 전달하세요.

2. POST /api/ingest — 거래 한 건 추가

요청 본문은 다음 필드를 가진 JSON 객체입니다:

  • title (string, 필수) — 거래 이름
  • amount (number, 필수) — 양수여야 함
  • type (string, 선택, 기본 expense) — expense / income / prepaid_expense / pending_income
  • category (string, 선택) — 카테고리 이름
  • note (string, 선택) — 자유 메모
  • created_at (string, 선택) — ISO 8601, 생략 시 현재
curl -X POST https://billbook.me/api/ingest \
  -H "Authorization: Bearer bb_<userId>_<secret>" \
  -H "Content-Type: application/json" \
  -d '{"title":"Coffee","amount":120,"type":"expense","category":"Food"}'

# response: 201
{ "id": "...", "created_at": "..." }

3. GET /api/ingest/categories — 카테고리 목록 조회

admin 의 카테고리 이름을 대시보드 드롭다운 순서대로 반환합니다. 응답에는 이름 문자열만 포함되며 id 나 거래 데이터는 없습니다.

curl https://billbook.me/api/ingest/categories \
  -H "Authorization: Bearer bb_<userId>_<secret>"

# response: 200
{ "categories": ["Food", "Rent", "..."] }

4. GET /api/ingest/tags — 최근 사용한 태그

최근 업데이트된 태그 접두어(#XXX 형식)를 반환합니다. 기본 20개, ?limit= 로 조정 가능(최대 100).

tag_prefixes 테이블이 아직 없으면 오류 대신 빈 배열을 반환합니다.

curl "https://billbook.me/api/ingest/tags?limit=20" \
  -H "Authorization: Bearer bb_<userId>_<secret>"

# response: 200
{ "tags": ["#management-fee", "#travel", "..."] }

5. 오류 코드

모든 오류는 JSON: { "error": "메시지" }.

  • 401 — 인증 정보 없음, 토큰 형식 오류, 폐기 또는 불일치
  • 402 — 구독 만료. 쓰기에는 갱신 필요
  • 405 — 메서드 미지원 (예: /api/ingest 에 GET)
  • 501 — 서버에 SUPABASE_SERVICE_ROLE_KEY 미설정
  • 500 — 기타 내부 오류

6. 보안과 제한

설계상 호출자 자신의 조직에만 쓸 수 있으며, 다른 조직 사칭이나 기존 데이터 조회는 불가능합니다:

  • user_id 는 항상 토큰 소유자 본인 — 위조 불가
  • org_id 는 항상 소유자의 조직 — 조직 간 쓰기 불가
  • 토큰은 admin 역할에만 발급 (manager / staff 는 403)
  • 응답은 다른 행을 노출하지 않고 { id, created_at } 만 반환
  • 폐기는 즉시 반영. 설정에서 언제든 갱신 가능

7. iOS 단축어 예제

"URL 콘텐츠 가져오기" 동작을 추가하고 URL 을 https://billbook.me/api/ingest, 메서드 POST, 헤더에 Authorization: Bearer bb_...Content-Type: application/json, 요청 본문을 JSON {"title":"커피","amount":120,"type":"expense"} 으로 설정하세요. titleamount 를 단축어 입력 또는 "매번 묻기" 변수로 연결하면 됩니다.

이 문서는 빠른 참조용이며 실제 동작은 백엔드 코드를 기준으로 합니다.